0

我正在使用CustomAuthenticationprovider 来验证 which extends AbstractUserDetailsAuthenticationProvider。我必须这样做,因为我想针对 Web 服务进行身份验证,并且需要用户 ID 和密码。这是唯一允许我这样做的课程。现在我遇到了为此实现记住我功能的问题,这是我的安全上下文文件 -

<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 的原因。

4

1 回答 1

0

记住我是验证用户的另一种方式,因此当它接收到记住我的 cookie 时,它​​需要对其进行验证并加载信息以供用户将其提供给应用程序。为此,它使用UserDetailsService接口。

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

另一种方法是PersistentTokenBasedRememberMeServices,它使用数据库来存储记住我的令牌。它不需要访问密码,但您仍然需要实现 aUserDetailsService以允许它为经过身份验证的用户加载信息。它返回的UserDetails对象不需要包含密码,但它应该至少包含用户名,这样您就可以知道谁登录了。

于 2013-06-14T10:56:45.537 回答