0

私のSpring Security XMLは次のとおりです。

    <http use-expressions="true">
        <intercept-url pattern="/login" access="isAnonymous()" requires-channel="https"/>
        <intercept-url pattern="/login/" access="isAnonymous()" requires-channel="https" />
        <intercept-url pattern="/logout-success" access="isAnonymous()" />
        <intercept-url pattern="/logout-success/" access="isAnonymous()" />     
        <intercept-url pattern="/logout" access="isAuthenticated()" />

        <intercept-url pattern="/**" access="hasRole('ROLE_SUPER_ADMIN')" />
        <form-login login-page="/login/" default-target-url="/example/Login_execute"/>
        <logout logout-url="/logout" logout-success-url="/logout-success" />
        <remember-me services-ref="rememberMeServices"/>

        <port-mappings>
            <port-mapping http="8080" https="8443"/>
        </port-mappings>        
    </http>

...

    <beans:bean id="userDetailsService" class="com.myownpackage.UserAccountServiceImpl"/>

    <beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices">
        <beans:property name="userDetailsService" ref="userDetailsService" />
        <beans:property name="tokenRepository" ref="persistentTokenRepository" />
        <beans:property name="key" value="myownkey" />
    </beans:bean>

<beans:bean id="persistentTokenRepository" class="com.myownpackage.PersistentTokenRepositoryImpl" />  

ログインして「記憶」にチェックを入れるたびに、プログラムは記憶データベーステーブルに何かを保存します (これは正しいです)。

ブラウザーを閉じてブラウザーを再度開き、認証が必要なページを開くと、プログラムは PersistentTokenBasedRememberMeServices で processAutoLoginCookie を実行し、正しい UserDetails を返します (これも正しいです)。

しかし、それでも、ログインページにリダイレクトされます。

ちなみに、ログインページはカスタマイズしており、ログイン用のフォームをJSPファイルで表示するだけです。

春のセキュリティ XML を書くときに見逃したステップはありますか?

4

1 に答える 1

1

Spring Security の「Remember Me」は、ブラウザーであるクライアント側で Cookie を使用します。

Spring の DOCSから:

Remember-me または永続的なログイン認証とは、Web サイトがセッション間でプリンシパルの ID を記憶できることを指します。これは通常、Cookie をブラウザに送信することで実現されます。この Cookie は今後のセッションで検出され、自動ログインが行われます。Spring Security は、これらの操作を実行するために必要なフックを提供し、2 つの具体的な記憶の実装を備えています。1 つはハッシュを使用して Cookie ベースのトークンのセキュリティを維持し、もう 1 つはデータベースまたはその他の永続的なストレージ メカニズムを使用して、生成されたトークンを保存します。

Spring のアイデアは、異なるセッション間で自動的にログインできるようにすることです。

サーバーのセッション、つまりサーバーが「跳ね返る」(ダウンしてからアップする) ときは、たとえば永続性によって処理されます。

クライアントのセッションはブラウザ (Cookie) によって処理されます。ブラウザーは Spring が送信する Cookie を使用し、サーバーはこの Cookie を検証して、資格情報を再度入力する必要なく、ユーザーが自動的にログインできるようにします。

ブラウザ内の Cookie を確認します。

HTH。

オハッド。

于 2012-09-09T11:14:39.967 に答える