我正在使用 Spring Security 3.1.x 并尝试实现以下场景:
- 使用 isFullyAuthenticated() 保护页面
- 当前用户仅通过记住我的身份验证,因此未完全通过身份验证
- 用户导航到这个完全经过身份验证的页面 - 这不应该被允许(而且它不是)
- 但是,用户不应获得 403 页面 - 相反,应提示用户通过登录表单登录
- 登录后,应该允许用户继续访问他之前请求的页面,因为现在他是一个完全经过身份验证的用户
我的 Spring Security 配置是:
<http use-expressions="true">
<intercept-url pattern="/admin/full_auth_only.html" access="isFullyAuthenticated()" />
<form-login login-page="/login.html" default-target-url="/authenticated.html" />
<logout />
<remember-me key="someAppKey" />
</http>
我试图补充:
<access-denied-handler error-page="/login.html" />
但是,现在的问题是,在访问页面时,确实是登录表单提示,只是URL没有对应登录;相反,它是完全经过身份验证的页面的 URL:
http://localhost:8080/spring-security/admin/full_auth_only.html
然后破坏身份验证过程,在尝试访问(无效)URL时失败:
http://localhost:8080/spring-security/admin/j_spring_security_check
这应该是:
http://localhost:8080/spring-security/j_spring_security_check
对此的任何帮助表示赞赏 - 我认为用例非常常见,因此我更喜欢使用命名空间支持而不是自定义方向。
谢谢。
欧根。