Spring安全性记住了我使用customAuthenticationProvider

时间:2013-06-11 12:24:30

标签: spring spring-security remember-me

我正在使用CustomAuthentication提供程序来验证哪个扩展AbstractUserDetailsAuthenticationProvider。我必须这样做,因为我想对web服务进行身份验证,并且需要userid和password。这是唯一允许我这样做的课程。 现在我面临着为此实现记住我功能的问题,这是我的安全上下文文件 -

<http auto-config="true">
    <intercept-url pattern="/j_spring_security_check" access="IS_AUTHENTICATED_ANONYMOUSLY"/>       
    <intercept-url pattern="/dashboard*" access="ROLE_USER" />
    <form-login login-page="/login.html" default-target-url="/dashboard1.html#meetings"
        authentication-failure-url="/loginFailed.html" />
    <logout logout-success-url="/login.html" />
</http>

<beans:bean name="customAuthenticationProvider" class = "com.component.WebServiceUserDetailsAuthenticationProvider"/>

<authentication-manager>
  <authentication-provider ref = "customAuthenticationProvider"/>
</authentication-manager>

</beans:beans>  

现在我正在尝试实现记住我,但它强制我拥有我不能拥有的用户详细服务,因为我需要用户名和密码来再次验证我的web服务和userdetailservice公开的方法只提供用户名而不是密码,这就是我必须在第一时间使用customAuthentication的原因。

1 个答案:

答案 0 :(得分:0)

记住我是另一种验证用户的方法,所以当它收到一个记住我的cookie时,它需要验证它并加载用户提供给应用程序的信息。为此,它使用UserDetailsService接口。

基本实现TokenBasedRememberMeServices需要访问密码才能验证令牌。如果您的系统无法提供,那么您就无法使用它。

替代方案是PersistentTokenBasedRememberMeServices,它使用数据库存储记住我的令牌。它不需要访问密码,但您仍需要实现UserDetailsService以允许其为经过身份验证的用户加载信息。它返回的UserDetails对象不需要包含密码,但它应该包含用户名作为最小值,以便您可以告诉谁登录。