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