1

この方法には習慣AuthenticationProviderがありauthenticateます。

    @Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {

        > Check username, password, throw exceptions where needed

        return new CustomAuthenticationToken(username, grantedAuthorities);
    }

そしてトークン:

public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken
{
     public CustomAuthenticationToken(ICurrentUserContext currentUser, List<GrantedAuthority> authorities) {
         super(currentUser.getUsername(), currentUser.getPassword(), authorities);
     }
}

Chrome、Firefoxでログインしても問題ありません。

IE 8/9では、非常に奇妙な問題が発生します。メソッドを1回だけ呼び出す場合もあり、authenticateログインしてすべてが期待どおりに機能します。ただし、ときどきauthenticate2回呼び出され、ログインに失敗します。

誰か手がかりはありますか?

私はTomcatでそれをテストしました。

4

4 に答える 4

2

Spring Securityのデバッグログを注意深くトレースして、問題を見つけました。これが将来誰かに役立つことを願っています。

明らかに、SpringSecurityのデフォルトはログイン後にセッションを移行します。ただし、IEでは、認証Cookieを新しいセッションに移行しないため、ログインページが表示されます。

修正は簡単で、SpringSecurityxmlで実行できます。

<http use-expressions="true">

    <!-- 
        This settings is for IE. Default this setting is on migrateSession.
        When IE tries to migrate the session, the auth cookie does not migrate,
        resulting in a nice login screen again, after you've logged in.

        This setting ensures that the session will not be invalidated, and thus IE will still work as expected.
     -->
    <session-management session-fixation-protection="none" />
</http>
于 2012-11-29T12:09:44.693 に答える
1

カスタムweblogicプロバイダーにアクセスするときは、InternetExplorerのバグを確認してください。

たぶん、TomcatではなくCookieを無効にする必要があります

于 2012-11-29T10:51:50.287 に答える
1

セッションの移行は完全にサーバー側のプロセスであり、ブラウザからは見えないはずです。表示されるのはJSESSIONIDの新しいSet-Cookieヘッダーだけであり、これを尊重する必要があります。

私の推測では、このtomcatバグが発生していると思います。これは、ブラウザーが重複するヘッダーをどのように解釈するかによって、さまざまな影響を引き起こします。これは元々、ここに表示されているものと密接に関連しているBlackberryブラウザのこの問題が原因で報告されました。

ただし、Spring SecurityとTomcatのどちらのバージョンを使用しているのかはわかりません(常に良い考えです:-))。そのため、確実に言うのは難しいです。

于 2012-11-29T13:55:29.220 に答える
0

目次クイックリファレンスSpringSecurityCoreプラグイン<<17IPアドレス制限19ログアウトハンドラー>>18セッション固定防止-リファレンスドキュメント作成者:Burt Beckwith、Beverley Talbottバージョン:2.0-RC3 18セッション固定攻撃セッション固定攻撃を防ぐには、useSessionFixationPreventionを設定します属性をtrueに設定:grails.plugin.springsecurity.useSessionFixationPrevention = true認証が成功すると、新しいHTTPセッションが作成され、前のセッションの属性がそこにコピーされます。アカウントをハッキングしようとしている誰かによって生成された、アクティブなセッションIDを含むリンクをクリックしてセッションを開始すると、ログイン後に前のセッションを共有しなくなります。あなたはあなた自身のセッションを持っています。

GrailsはデフォルトでURLにjsessionidを含まないため(このJIRAの問題を参照)、セッション固定はそれほど問題になりませんが、この機能を使用することをお勧めします。

cookie-sessionプラグインを使用する場合は問題があることに注意してください。詳細については、この問題を参照してください。

この表は、セッション固定の構成オプションを示しています。

プロパティデフォルト値意味useSessionFixationPreventiontrueセッション固定防止を使用するかどうか。sessionFixationPrevention.migratetrueログイン後に既存のセッションのセッション属性を新しいセッションにコピーするかどうか。sessionFixationPrevention.alwaysCreateSessionfalseリクエストの開始時にセッションが存在していなくても常にセッションを作成するかどうか。

http://grails-plugins.github.io/grails-spring-security-core/guide/sessionFixation.html

于 2014-07-07T14:07:47.717 に答える