如何在Spring MVC中返回403禁止访问?
时间:2020-03-05 18:48:08 来源:igfitidea点击:
我希望我的控制器在用户没有权限查看特定页面时返回正确的HTTP响应代码。
解决方案
回答
我们可以使用response.setStatus(403)吗?
回答
匆匆
如果我们使用的是普通的JSP视图(最常见的情况),则只需添加
<% response.setStatus( 403 ); %>
在视图文件中的某处。在顶部是一个不错的地方。
细节
在MVC中,我将始终在视图中进行设置,在大多数情况下,对于Spring-MVC,请使用SimpleMappingExceptionResolver来呈现正确的视图,以响应抛出的运行时Exception。
例如:在控制器或者服务层中创建并抛出" PermissionDeniedException",并使异常解析器指向视图文件" permissionDenied.jsp"。该视图文件设置403状态并向用户显示适当的消息。
在Spring bean XML文件中:
<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>
如果需要实现用户登录机制,请查看Spring Security(以前称为Acegi Security)。
回答
使用ExceptionResolver
是一个很好的方法,但是如果我们只是想让它独立于视图,则可以在控制器中调用response.sendError(HttpServletResponse.SC_FORBIDDEN," AdditionalInformationIfAvailable");
。