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.¿Cómo devuelvo un 403 Forbidden en Spring MVC?
Respuesta
Quickie
Si está utilizando puntos de vista de civil JSP (como es más común), entonces sólo tiene que añadir
<% response.setStatus(403); %>
algún lugar de su archivo de vista. En la cima hay un lindo lugar.
Detalle
En MVC, i siempre habría establecer esta en la vista, y en la mayoría de los casos con Primavera-MVC, utilice el SimpleMappingExceptionResolver
para presentar el punto de vista correcto en respuesta a una excepción de ejecución lanzado.
Por ejemplo: cree y ejecute un PermissionDeniedException
en su controlador o capa de servicio y tenga el punto de resolución de excepciones en un archivo de vista permissionDenied.jsp
. Este archivo de vista establece el estado 403 y muestra al usuario un mensaje apropiado.
En el archivo XML de frijol de primavera:
<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 es necesario implementar un mecanismo de inicio de sesión del usuario, echar un vistazo a Spring Security (anteriormente Acegi Seguridad).
El uso de un ExceptionResolver
es una gran manera de hacerlo, pero si solo desea que esto sea independiente de la vista, sin duda puede llamar al response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");
en su Controlador.
Crear una excepción anotada con @ResponseStatus p. de esta manera:
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
Ahora acaba de lanzar la excepción de que en su método de control y la respuesta tendrá el estado 403.
También se puede simplemente tirar
org.springframework.security.access.AccessDeniedException("403 returned");
Esto devuelve un 403 en la respuesta encabezamiento.
Esto funciona perfectamente y debería ser la respuesta aceptada porque es más flexible. – Heady
@Heady: Realmente no es la mejor respuesta porque crea una fuerte dependencia con Spring Security. La respuesta de Joe, para crear su propia excepción, es la mejor OMI. Todavía lo voté porque es una alternativa decente. –
Esto devuelve 500 para mí. – heez
- 1. OpenURI :: HTTPError: 403 Forbidden
- 2. Weblogic Error 403 - Forbidden
- 3. SVN: NKACTIVITY 403 Forbidden
- 4. Apache VirtualHost 403 Forbidden
- 5. .htaccess RewriteRule causando 403 Forbidden
- 6. Problema a redirigir 403 Forbidden a 404 Not Found
- 7. CodeIgniter REST API Library Ajax PUT throwing 403 Forbidden
- 8. 403 - Prohibido: Acceso denegado. ASP.Net MVC
- 9. En MVC, ¿cómo devuelvo un resultado de cadena?
- 10. Spring Security - necesita error 403, no redirige
- 11. ¿Cómo hacer que los hosts virtuales de Nginx funcionen? (Actualmente da error 403 Forbidden)
- 12. Validación en Spring MVC
- 13. `open_http ': 403 Forbidden (OpenURI :: HTTPError) para los 'Steve_Jobs' cuerda pero no para cualquier otra cadena
- 14. 403 prohibido después de publicar asp.net MVC
- 15. ASP.NET MVC: ¿cómo devuelvo el estado 304 "No modificado"?
- 16. Cómo almacenar la sesión en Spring MVC
- 17. anotación @RequestMapping en Spring MVC
- 18. Buscando un tutorial de OSGi con Spring (específicamente Spring MVC)
- 19. ASP.NET MVC vs Spring MVC
- 20. ServletContext y Spring MVC
- 21. ¿Cómo usar efectivamente Scala en un proyecto Spring MVC?
- 22. ¿Cómo mostrar un DateTime formateado en Spring MVC 3.0?
- 23. ¿Cómo se crea un proyecto Spring MVC en Eclipse?
- 24. ¿Cómo envío un correo electrónico HTML en Spring MVC?
- 25. ¿Cómo puedo registrar un editor personalizado global en Spring-MVC?
- 26. Spring MVC - Modelo pase entre controladores
- 27. Spring MVC Plugin Architecture
- 28. Spring MVC return JSONS y excepción Handling
- 29. Testing Spring @MVC anotaciones
- 30. Spring MVC o Wicket?
¿Por qué es necesario el response.setStatus? Después de la respuesta (en Tomcat), parece haber una cierta evolución del código de respuesta http de la respuesta: primero 200 (predeterminado), luego se mueve a 404 (por el bien del argumento) cuando el Spring DispatcherServlet procesa el excepción del controlador, la vista se representa y el código se establece en 500 (lo que es extraño) y, a continuación, el setStatus soluciona el problema al revertir el código de la respuesta a 404. – Eugen