【问题标题】:How to use Remember me in spring security for custom authentication如何在 Spring Security 中使用记住我进行自定义身份验证
【发布时间】:2012-10-31 07:49:19
【问题描述】:

谁能告诉我如何在 spring security 中使用“记住我”复选框进行自定义身份验证,

这是我在登录页面中的记住我字段

这是 secuirty.xml 中的配置

谢谢

【问题讨论】:

    标签: cookies spring-security session-cookies remember-me


    【解决方案1】:

    正如Spring Docs 中定义的那样,当一个人声明一个“remember-me”时,“user-service-ref”应该是:

    “remember-me 服务实现需要访问 UserDetailsS​​ervice,因此必须在应用程序中定义一个 上下文。”

    但是,在您的情况下,您的 user-service-ref 是对 MyCustomAuthentication 类型的 bean 的引用。这就是为什么您会收到 ClassCastException “MyCustomAuthentication cannot be cast to UserDetailsS​​ervice”。

    您应该定义如下内容:

    <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 的)实现都需要一个 用户详细信息服务。如果您使用的身份验证提供程序 不使用 UserDetailsS​​ervice(例如,LDAP 提供程序)然后 除非您的文件中还有一个 UserDetailsS​​ervice bean,否则它将无法工作 应用程序上下文。

    【讨论】:

    • 您仍然可以使用您的自定义身份验证类。但是您必须定义 userDetailsS​​ervice ,并将其引用到我向您展示的地方,否则您将不断收到 spring 的异常。
    • 我添加了一个例子,见上文。如果有帮助,请善待并将此答案标记为有用。
    • remember-me 与 Authentication-Provider 无关。当然,您可以实现自己的提供程序,然后使用 。并且记住我与我在示例中显示的一样。
    • 我相信多阅读文档会有所帮助。试试这个:static.springsource.org/spring-http://static.springsource.org/…
    • 没问题。我已经添加(在我的回答中)来自文档的另一个重要且相关的引用,关于 userDetailsS​​ervice 的需求。您的 XML 中必须有 userDetailsS​​ervice,否则记住我将不起作用。
    猜你喜欢
    • 2013-03-29
    • 2012-12-14
    • 2023-03-05
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2018-10-09
    相关资源
    最近更新 更多