如何在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");