Spring security Remember me 不适用于 Spring MVC 应用程序。

2023-12-24

身份验证和授权工作正常。但记住我在应用程序中无法正常工作。

我使用了 Spring Security 的数据库身份验证和 LDAP 身份验证(一次仅一个)以及大量 Spring Security 自定义。

下面是我的 spring 安全上下文文件。

    <?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <context:property-placeholder location="classpath:/application.properties"/>                                                        

    <http use-expressions="true">
        <intercept-url pattern="/resources/**" filters="none" />
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/**" access="isAuthenticated()" />
        <form-login login-page="/login"/>
        <logout invalidate-session="true"
                logout-success-url="/"
                logout-url="/logout"/>
        <remember-me key="myApp2" />
        <custom-filter before="FORM_LOGIN_FILTER" ref="applicationAuthenticationFilter"/>
    </http>

    <beans:bean id="applicationAuthenticationFilter" class="com.myApp.security.DmxAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="authenticationFailureHandler" ref="failureHandler"/>
        <beans:property name="authenticationSuccessHandler" ref="successHandler"/>
        <beans:property name="authenticationMethod" value="${authenticationMethod}"/>
    </beans:bean>

    <beans:bean id="successHandler"
      class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/home"/>
        <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    </beans:bean>

    <beans:bean id="failureHandler"
      class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
        <beans:property name="defaultFailureUrl" value="/login?login_error=1"/>
    </beans:bean>

    <beans:bean id="accessControlService" class="com.myApp.services.AccessControlService"/>
    <beans:bean id="userService" class="com.myApp.services.UserService"/>
    <beans:bean id="roleService" class="com.myApp.services.RoleService"/>
    <beans:bean id="lookupService" class="com.myApp.services.LookupService"/>

    <beans:bean id= "userDetailsService" class="com.myApp.security.DmxUsersDetailsServiceImpl">
        <beans:property name="accessControlService" ref="accessControlService"/> 
    </beans:bean>   

    <beans:bean id="databaseAuthenticationProvider" class="com.myApp.security.DmxAuthenticationProvider">
        <beans:property name="userDetailsService" ref="userDetailsService"/>
       <!-- <beans:property name="hideUserNotFoundExceptions" value="false"/> -->
    </beans:bean>

    <!-- ================ LDAP configuration STARTS here ================ -->

    <beans:bean id="ldapServer" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">  
        <beans:constructor-arg value="${ldap.url}"/>  
        <beans:property name="userDn" value="${ldap.userDn}"/>  
        <beans:property name="password" value="${ldap.password}"/>
        <!--
        <beans:property name="baseEnvironmentProperties">
            <beans:map>
                <beans:entry key="java.naming.referral" value="follow" />
            </beans:map>
        </beans:property>
        -->
    </beans:bean>  

    <beans:bean id="ldapSearchBean" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">  
        <beans:constructor-arg value="${ldap.userSearchBase}"/>  
        <beans:constructor-arg value="${ldap.userSearchFilter}"/>  
        <beans:constructor-arg ref="ldapServer"/>  
    </beans:bean>  

    <beans:bean id="ldapAuthenticationProvider" class="com.myApp.security.DmxLdapAuthenticationProvider">  
        <beans:constructor-arg ref="ldapBindAuthenticator"/>  
        <beans:constructor-arg ref="ldapAuthoritiesPopulator"/>  
        <beans:property name="userDetailsContextMapper" ref="ldapUserDetailsContextMapper"/>  
    </beans:bean> 

    <beans:bean id="ldapBindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator">  
        <beans:constructor-arg ref="ldapServer"/>  
        <beans:property name="userSearch" ref="ldapSearchBean"/>  
    </beans:bean>  

    <beans:bean id="ldapAuthoritiesPopulator" class="com.myApp.security.DmxLdapAuthoritiesPopulator">
        <beans:constructor-arg ref="ldapServer" />
        <beans:constructor-arg value="" />
        <beans:property name="groupSearchFilter" value="${ldap.groupSearchFilter}"/>
        <beans:property name="groupRoleAttribute" value="${ldap.groupRoleAttribute}" />
        <beans:property name="rolePrefix" value=""/>
        <beans:property name="searchSubtree" value="true"/>
        <beans:property name="convertToUpperCase" value="false"/>
        <beans:property name="ldapTemplate" ref="ldapTemplate"/> 
    </beans:bean>

    <beans:bean id= "dmxUsersMapper" class="com.myApp.security.DmxUsersMapper">
        <beans:property name="accessControlService" ref="accessControlService"/>
        <beans:property name="userService" ref="userService"/>
        <beans:property name="roleService" ref="roleService"/>
        <beans:property name="lookupService" ref="lookupService"/>
        <beans:property name="organizationUname" value="${organizationUname}"/>
        <beans:property name="companyUname" value="${companyUname}"/>
        <beans:property name="ldapUsername" value="${ldap.db.userName}"/>
        <beans:property name="password" value="${ldap.db.password}"/>
    </beans:bean>    

    <beans:bean class="com.myApp.security.DmxLdapUserDetailsMapper" id="ldapUserDetailsContextMapper">
        <beans:property name="dmxUsersMapper" ref="dmxUsersMapper"/> 
    </beans:bean>

    <beans:bean id="ldapTemplate" class="org.springframework.security.ldap.SpringSecurityLdapTemplate">
        <beans:constructor-arg ref="ldapServer" />
        <beans:property name="ignorePartialResultException" value="true"/>
    </beans:bean>

    <!-- ================ LDAP configuration ENDS here ================ -->

    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="databaseAuthenticationProvider" />
        <authentication-provider ref="ldapAuthenticationProvider"/>  
    </authentication-manager> 

    <beans:bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <beans:property name="basenames">
            <beans:list>
                <beans:value>com/myApp/resourceBundles/SecurityMessages</beans:value>
            </beans:list>
        </beans:property>            
    </beans:bean>

</beans:beans>

下面是我的登录页面。

    <form action="j_dmx_security_filter" method="post">
    <table border="0" class="section_tbl2">
        <tr>
            <td><label for="j_organization">Organization</label> </td>
            <td> : </td>
            <td><input id="j_organization" name="j_organization" size="20" maxlength="50"
                       type="text" class="txtinput"/></td>
        </tr>

        <tr>
            <td> <label for="j_company">Company</label></td>
            <td> : </td>
            <td> <input id="j_company" name="j_company" size="20" maxlength="50"
                        type="text" class="txtinput"/></td>
        </tr>
        <tr>
            <td><label for="j_username">Username</label>  </td>
            <td> : </td>
            <td><input id="j_username" name="j_username" size="20" maxlength="50"
                       type="text" class="txtinput"/></td>
        </tr>
        <tr>
            <td><label for="j_password">Password</label>  </td>
            <td> : </td>
            <td><input id="j_password" name="j_password" size="20" maxlength="50"
                       type="password" class="txtinput"/></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td> <input type="submit" value="Login"/></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td> <input id="_spring_security_remember_me" name="_spring_security_
                        remember_me" type="checkbox" value="true"/>
                <label for="_spring_security_remember_me">Remember Me?</label></td>
        </tr>
    </table>
</form>

“记住我”令牌本身并未被创建。

请帮忙。


为了提供帮助,RememberMe 的相关 beans 定义在哪里?例如

<bean id="rememberMeServices" class=
        "org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
    <property name="userDetailsService" ref="jpaUserDetailsService"/>
    <property name="key" value="89dqj219dn910lsAc12"/>
</bean>

<bean id="rememberMeAuthenticationProvider" class=
        "org.springframework.security.authentication.RememberMeAuthenticationProvider">
    <property name="key" value="89dqj219dn910lsAc12"/>
</bean>

(这太长了,无法写成评论,所以我把它写成“答案”......抱歉)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring security Remember me 不适用于 Spring MVC 应用程序。 的相关文章

随机推荐

  • Linq-to-Entity 查询的动态谓词

    以下 Linq to Entities 查询工作正常 var query repository Where r gt r YearProp1 HasValue r YearProp1 gt minYear r YearProp1 lt ma
  • 使用实体框架删除项目

    我正在尝试使用实体框架删除一个对象 在互联网上的所有教程中 我发现为了做到这一点 您必须调用DeleteObject方法结合上下文 我尝试这样做 但似乎我没有DeleteObject方法 这是我的代码 public void DeleteB
  • 选择子网格中的行会选择父网格中具有相同行索引的行

    我已经在 Rowexpander 插件中实现了嵌套网格 现在的问题是 当我选择子网格的任何第 n 行时 父网格第 n 行也会被选中 我认为因为两者都有相同的 rowIndex 即使当我将鼠标悬停在子网格行上时 父级也会同时显示相同的鼠标悬停
  • cpp中的接口

    我想在 cpp 中创建接口 这样任何类都实现该类 那么该类必须实现父类的函数 如果所有功能都没有实现 那么它一定会显示错误 class parent interface class public virtual void display c
  • socket.io,动态添加消息处理程序

    我很高兴编写了一个node js 服务器 它使用socket io 与客户端通信 这一切都运作良好 socket on connection 处理程序有点大 这让我想到了另一种组织代码并将处理程序添加到生成器函数中的方法 如下所示 sess
  • AWS Lambda“进程在完成请求之前退出”

    我正在尝试打电话DynamoDB客户端方法并从 DynamoDB 表中获取一项 我在用AWS Lambda 然而 我不断收到这样的消息 进程在完成请求之前退出 我增加了超时只是为了确保 但处理时间小于超时 有什么建议吗 console lo
  • OnResume 在片段内多次调用

    I have 内部片段里面包含RecyclerView主片段添加到浏览器 当 MainFragment 被创建时 同时滑动 OnResume 被多次调用 第一次 OnResume 在 MainFragment 中调用一次 在 InnerFr
  • Ruby,检查字符串是否都是有效的十六进制字符?

    我必须检查 4 个字符的字符串是否都是有效的十六进制 我发现了另一个问题 它准确地演示了我想要做什么 但它是 Java 用于检查字符串仅包含十六进制字符的正则表达式 https stackoverflow com questions 531
  • 如何使用逆 CDF 在 Python 中随机采样对数正态数据并指定目标百分位数?

    我正在尝试从 Python 中的对数正态分布生成随机样本 该应用程序用于模拟网络流量 我想生成这样的样本 模态样本结果为 320 10 2 5 80 的样本位于 100 到 1000 10 2 到 10 3 范围内 我的策略是使用逆 CDF
  • 为什么 localStorage["..."] 未定义,但 localStorage.getItem("...") 为 null?

    上次我检查时 返回了以下两行true null localStorage foo null localStorage getItem foo 更换时同样适用null with undefined 那么第一个问题是 为什么有两种方式来寻址lo
  • 在 Google 表单上创建动态问题

    我在谷歌电子表格中有数百张图像的网址列表 我想创建一个谷歌表单 动态选择其中 50 张图像 显示它们并询问一个喜欢 讨厌的通用问题 然后将此数据与 URL 一起提交到电子表格 有没有办法动态地做到这一点 AFAIK 您可以使用函数使用应用程
  • Oauth2 Access Token 可以被客户端共享吗?

    我是 OAUTH 的新手 正在尝试理解该规范 所以根据规范协议流程 https www rfc editor org rfc rfc6749 section 1 2 据我了解 客户端 A 可以获得受保护资源的授权代码和访问令牌 现在 如果已
  • 我的 JBoss 服务器在 Linux 上达到 100% SYS CPU;什么会导致这种情况?

    我们已经调试这个 JBoss 服务器问题很长时间了 大约工作 10 小时后 服务器陷入 100 CPU 恐慌攻击并停止运行 在此期间您无法运行任何新程序 因此您甚至无法kill quit获取堆栈跟踪 这些 100 SYS CPU 负载持续
  • 在 Spring Boot WebSocket 中向特定用户发送通知

    我想向特定客户发送通知 例如用户名 user Configuration EnableWebSocketMessageBroker public class WebSocketConfiguration extends AbstractWe
  • 使用 IO monad 的 Haskell 单元测试

    我正在尝试为返回 IO monad 的 haskell 函数编写 HUnit 测试 因为它们执行文件 I O 有什么办法可以做到这一点吗 现在我正在尝试编写一个仅返回 Bool 的方法 这可以作为我的测试 combine FilePath
  • OSCAR_SEARCH_FACETS 用于过滤产品列表

    我正在使用 django oscar 开发一个电子商务网站 产品已列出 我必须应用过滤器 例如年份 价格等 我们可以使用 oscar facet 来实现此过滤功能吗 我尝试添加以下内容奥斯卡文档 http django oscar read
  • Django 带过滤器的左外连接

    我正在使用 Django 的内置用户模型 并有一个自定义 Foo 对象 其中包含 User 的外键 我希望选择符合某些约束的所有 User 对象和所有 Foo 对象 如下所示 SELECT from auth user LEFT OUTER
  • 如何理解 Haskell 中的“$”用法[重复]

    这个问题在这里已经有答案了 当您想要将一堆函数应用于同一个变量时 就会发生这种情况 它可能如下所示 map f gt f 4 odd even 但从LYAH http learnyouahaskell com higher order fu
  • 在 MSBuild 中使用 Studio 的“自定义工具”

    我有一个 Visual Studio 的 自定义工具 可以将一些模板文件合并到代码中 为了一致性和可移植性 我希望在 Visual Studio 之外构建时能够从 MSBuild 运行此模板处理器 Visual Studio 为文件创建以下
  • Spring security Remember me 不适用于 Spring MVC 应用程序。

    身份验证和授权工作正常 但记住我在应用程序中无法正常工作 我使用了 Spring Security 的数据库身份验证和 LDAP 身份验证 一次仅一个 以及大量 Spring Security 自定义 下面是我的 spring 安全上下文文