如何在 Spring MVC 中返回 403 Forbidden?

新手上路,请多包涵

当用户没有查看特定页面的权限时,我希望我的控制器返回正确的 HTTP 响应代码。

原文由 Will Harris 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

匆匆

如果您使用的是纯 JSP 视图(最常见的情况),则只需添加

<% response.setStatus( 403 ); %>

在你的视图文件中的某个地方。在顶部是一个不错的地方。

细节

在 MVC 中,我总是会在视图中设置它,并且在大多数情况下使用 Spring-MVC,使用 SimpleMappingExceptionResolver 来呈现正确的视图以响应抛出的运行时异常。

例如:在您的控制器或服务层中创建并抛出一个 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)。

原文由 Cheekysoft 发布,翻译遵循 CC BY-SA 2.5 许可协议

你也可以扔

org.springframework.security.access.AccessDeniedException("403 returned");

这会在响应标头中返回 403。

原文由 Chris Ritchie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题