使用Spring Security标记库时将exception映射到404页面
将exception映射到404页面时,Spring Security标记无法从安全上下文中查找身份validation信息。 使用“真实”404,可以找到认证。
我的web.xml:
com.example.NotFoundException /app/404 404 /app/404
在JSP上我有:
/app/404
路径映射到只返回视图的控制器。 当我浏览到/foo/some_invalid_id
, NotFoundException
会从控制器中抛出,最后当它进入JSP时,它无法在SecurityContext
找到身份validation并呈现这两个选项中的任何一个。 相反,当我浏览/something_that_really_doesnt_exist
它能够判断我是否登录并呈现正确的HTML。
将以下两个调度程序元素添加到spring security filter-mapping中:
... REQUEST ERROR
默认情况下,只有普通请求才会通过定义的filter映射。
“INCLUDE”和“FORWARD”是另外两个有效的调度程序元素值。
最可能的情况是代码中的某些组件在exception处理时调用HttpSession.invalidate()
。 您可以通过简单的调试轻松找到它。
但实际上没有必要检查isAnonymous()
– 它足以检查没有 ROLE_USER
权限的用户:
- 在Spring Security 2中:您可以使用
标记的areNotGranted
属性(请参阅Spring Security 2文档 - 在Spring Security 3中:您可以使用Spring EL来评估负面条件:
access="!hasRole('ROLE_USER')"
- 为日志记录目的捕获RuntimeException是不好的做法吗?
- IOException与RuntimeException Java
- e.printStackTrace和System.out.println(e)之间的区别
- 有关多次“捕获”的问题
- 为什么Java编译器允许在throws部分中列出exception,该方法无法抛出exception
- 使用Scanner.nextInt()与Scanner.nextLine()进行exception处理
- 在Java中拯救吞噬的exception
- Spring MVC最佳实践处理控制器中不可恢复的exception
- 在java中使用AssertionError和断言