如何在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)吗?