Solución:
También puedes simplemente lanzar
org.springframework.security.access.AccessDeniedException("403 returned");
Esto devuelve un 403 en el encabezado de respuesta.
Cree una excepción anotada con @ResponseStatus, por ejemplo, así:
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
Ahora simplemente arroje esa excepción en su método de controlador y la respuesta tendrá el estado 403.
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 su archivo de vista. En la cima hay un lindo lugar.
Detalle
En MVC, siempre establecería esto en la vista, y en la mayoría de los casos con Spring-MVC, usaría el SimpleMappingExceptionResolver
para presentar la vista correcta en respuesta a una excepción de tiempo de ejecución lanzada.
Por ejemplo: crea y lanza un PermissionDeniedException
en su controlador o capa de servicio y haga que el solucionador de excepciones apunte a 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 de 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).