我们有一个 Spring Web 应用程序,它已经使用 Spring 安全性来验证用户并授予对一组受限页面的访问权限。然而,我们还有另一组我们希望获得的资源。对于第二组,我们不需要用户身份验证,而是希望用户进入页面:/access.html 并输入访问代码(之前通过电子邮件发送给他们),然后他们将被授予访问这些资源的权限而无需登录。访问代码(令牌)仅在有限的时间段内有效,然后过期。
我可以以某种方式使用 spring security 来实现这个与我们已经存在的用户身份验证设置并行吗?
我们有一个 Spring Web 应用程序,它已经使用 Spring 安全性来验证用户并授予对一组受限页面的访问权限。然而,我们还有另一组我们希望获得的资源。对于第二组,我们不需要用户身份验证,而是希望用户进入页面:/access.html 并输入访问代码(之前通过电子邮件发送给他们),然后他们将被授予访问这些资源的权限而无需登录。访问代码(令牌)仅在有限的时间段内有效,然后过期。
我可以以某种方式使用 spring security 来实现这个与我们已经存在的用户身份验证设置并行吗?
当然,有几种方法可以做到这一点。听起来您需要做的就是创建一个过滤器,该过滤器可以在会话/请求中检查您的令牌,并创建/更新 Spring Security 上下文以获得所需的角色。然后授权正常进行。
特别是,您将为Spring Security Context添加GrantedAuthories到您的Authentication对象。这个过程有很多细节,我承认我的答案并不完整,但完整的答案会非常广泛。
我用 cookie 做过类似的事情。
您可以实现自己的过滤器扩展GenericFilterBean
然后使用 spring-security 设置配置,如下所示
<security:http ... >
....
<sec:custom-filter position="FORM_LOGIN_FILTER" ref="cookieAuthenticationFilter" />
</security:http>
看看源代码BasicAuthenticationFilter
可能会有所帮助。