【发布时间】:2012-10-31 07:49:19
【问题描述】:
谁能告诉我如何在 spring security 中使用“记住我”复选框进行自定义身份验证,
这是我在登录页面中的记住我字段
这是 secuirty.xml 中的配置
谢谢
【问题讨论】:
标签: cookies spring-security session-cookies remember-me
谁能告诉我如何在 spring security 中使用“记住我”复选框进行自定义身份验证,
这是我在登录页面中的记住我字段
这是 secuirty.xml 中的配置
谢谢
【问题讨论】:
标签: cookies spring-security session-cookies remember-me
正如Spring Docs 中定义的那样,当一个人声明一个“remember-me”时,“user-service-ref”应该是:
“remember-me 服务实现需要访问 UserDetailsService,因此必须在应用程序中定义一个 上下文。”
但是,在您的情况下,您的 user-service-ref 是对 MyCustomAuthentication 类型的 bean 的引用。这就是为什么您会收到 ClassCastException “MyCustomAuthentication cannot be cast to UserDetailsService”。
您应该定义如下内容:
<security:user-service id="userDetailsService">
<security:user name="username" password="pass" authorities="ROLE_USER" />
</security:user-service>
并在“user-service-ref”中使用此 id
附:恕我直言,您还必须修复您的身份验证提供程序
HTH
为了您的要求,更准确地说:
<http auto-config="true" use-expressions="true">
...
<remember-me user-service-ref="customUserDetailsManager"/>
</http>
<b:bean id="customUserDetailsManager"
class="com.something.something.MyCustomUserDetailsManager" />
<authentication-manager>
<authentication-provider user-service-ref="customUserDetailsManager">
</authentication-provider>
</authentication-manager>
</b:beans>
注意 MyCustomUserDetailsManager 应该实现 UserDetailsManager
另一个重要说明(来自文档):
请注意,两个(Spring 的)实现都需要一个 用户详细信息服务。如果您使用的身份验证提供程序 不使用 UserDetailsService(例如,LDAP 提供程序)然后 除非您的文件中还有一个 UserDetailsService bean,否则它将无法工作 应用程序上下文。
【讨论】: