首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring Security (Acegi) Remember Me 功能完整配置指南

     編輯:Java 相關知識

Acegi (Spring Security 前身) 的 RememberMeProcessingFilter 讓使用者勾選「記住我」後,下次造訪無需重新登入。本文詳細說明原理、配置步驟與關鍵 Bean 關係。

一、核心原理

  1. 登入成功且勾選「記住我」 → 產生加密 Cookie 回寫瀏覽器。
  2. 後續請求攜帶 Cookie → RememberMeProcessingFilter 解析並驗證。
  3. 驗證通過 → 建立 RememberMeAuthenticationToken 放入 SecurityContext,視同已認證。

二、登入頁面新增 Checkbox

<input type="checkbox" name="rememberMe" /> 讓系統記住我

參數名 rememberMe 須與後端設定一致。

三、核心 Bean 配置

<!-- 1. TokenBasedRememberMeServices:產生/解析 Cookie -->
<bean id="rememberMeServices"
      class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
    <property name="userDetailsService" ref="userDetailsService"/>
    <property name="key" value="23_*!cdU='612./e;NrI"/> <!-- 加密金鑰 -->
    <property name="parameter" value="rememberMe"/> <-- 對應 checkbox name -->
</bean>

<!-- 2. RememberMeAuthenticationProvider:驗證 Token -->
<bean id="rememberMeAuthenticationProvider"
      class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
    <property name="key" value="23_*!cdU='612./e;NrI"/> <-- 必須與上方 key 相同 -->
</bean>

<!-- 3. AuthenticationProcessingFilter 掛載 rememberMeServices -->
<bean id="authenticationProcessingFilter"
      class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
    <property name="rememberMeServices" ref="rememberMeServices"/>
    <!-- 其他屬性省略 -->
</bean>

<!-- 4. RememberMeProcessingFilter 加入 Filter 鏈 -->
<bean id="rememberMeProcessingFilter"
      class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="rememberMeServices" ref="rememberMeServices"/>
</bean>

<!-- 5. 將 Provider 註冊至 AuthenticationManager -->
<bean id="authenticationManager"
      class="org.acegisecurity.providers.ProviderManager">
    <property name="providers">
        <list>
            <ref bean="daoAuthenticationProvider"/>
            <ref bean="rememberMeAuthenticationProvider"/>
            <ref bean="anonymousAuthenticationProvider"/>
        </list>
    </property>
</bean>

四、Filter 鏈順序

/**=httpSessionContextIntegrationFilter,
   logoutFilter,
   authenticationProcessingFilter,
   rememberMeProcessingFilter,  <-- 放在 authenticationProcessingFilter 之後
   anonymousProcessingFilter,
   exceptionTranslationFilter,
   filterInvocationInterceptor

五、關鍵屬性說明

屬性用途
key雙向加密金鑰,Services 與 Provider 必須一致,防止偽造 Cookie。
parameter對應登入表單 checkbox name,決定是否產生 Cookie。
userDetailsService驗證 Cookie 時重新載入 UserDetails,檢查帳號是否存在、密碼是否變更。

六、安全性建議

  • 使用 HTTPS 傳輸 Cookie,防止竊聽。
  • 設定 Cookie HttpOnly、Secure、SameSite=Strict。
  • 定期輪換 key,失效舊 Token。
  • 敏感操作(修改密碼、綁定手機)需強制重新驗證密碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved