tutorial springframework framework descargar java spring

java - springframework - spring framework tutorial



¿Cómo devuelvo un 403 Forbidden en Spring MVC? (5)

Cree una excepción anotada con @ResponseStatus por ej. De esta manera:

@ResponseStatus(HttpStatus.FORBIDDEN) public class ForbiddenException extends RuntimeException { }

Ahora solo tira esa Excepción en tu método de manejo y la respuesta tendrá el estado 403.

Quiero que mi controlador devuelva el código de respuesta HTTP correcto cuando el usuario no tiene permiso para ver una página en particular.


Usar un ExceptionResolver es una gran manera de hacerlo, pero si solo desea que esto sea independiente de la vista, puede realizar una llamada a response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable"); en tu controlador.


Cosa hecha rápidamente

Si está utilizando vistas JSP simples (como es más común), simplemente agregue

<% response.setStatus( 403 ); %>

en algún lugar de tu archivo de vista. En la cima hay un lindo lugar.

Detalle

En MVC, siempre configuro esto en la vista, y en la mayoría de los casos con Spring-MVC, uso SimpleMappingExceptionResolver para presentar la vista correcta en respuesta a una excepción de tiempo de ejecución arrojado.

Por ejemplo: crea y lanza una PermissionDeniedException en tu controlador o capa de servicio y haz que el punto de resolución de excepciones sea un archivo de vista permissionDenied.jsp . Este archivo de vista establece el estado 403 y muestra al usuario un mensaje apropiado.

En su archivo XML Spring bean:

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="PermissionDeniedException"> rescues/permissionDenied </prop> ... set other exception/view mappings as <prop>s here ... </props> </property> <property name="defaultErrorView" value="rescues/general" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>

Si necesita implementar un mecanismo de inicio de sesión de usuario, eche un vistazo a Spring Security (anteriormente Acegi Security).


¿Puedes usar response.setStatus (403)?


También puedes simplemente tirar

org.springframework.security.access.AccessDeniedException("403 returned");

Esto devuelve un 403 en el encabezado de respuesta.