当用户缺少查看特定页面的权限时,我希望我的控制器返回正确的HTTP响应代码.
你也可以扔掉
org.springframework.security.access.AccessDeniedException("403 returned");
这将在响应头中返回403.
创建一个使用@ResponseStatus注释的异常,例如:
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
现在只需在处理程序方法中抛出异常,响应将具有状态403.
匆匆
如果您使用的是纯JSP视图(最常见),那么只需添加即可
<% response.setStatus( 403 ); %>
在视图文件中的某个位置.在顶部是一个不错的地方.
详情
在MVC中,我总是在视图中设置它,并且在大多数情况下使用Spring-MVC,使用它SimpleMappingExceptionResolver
来呈现正确的视图以响应抛出的运行时异常.
例如:PermissionDeniedException
在控制器或服务层中创建并抛出a ,并使异常解析器指向视图文件permissionDenied.jsp
.此视图文件设置403状态并向用户显示相应的消息.
在Spring bean XML文件中:
rescues/permissionDenied ... set other exception/view mappings ass here ...
如果您需要实现用户登录机制,请查看Spring Security(以前称为Acegi Security).
使用a ExceptionResolver
是一种很好的方法,但是如果你只想让它与视图无关,你当然可以response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");
在你的Controller中调用它.
你能使用response.setStatus(403)吗?