2

サーバーを再起動すると、基本的にセッションのすべてのコンテンツが消去されます。セッションが消去されたため、ユーザーはログインしていると見なされなくなりました。 (JSESSIONID Cookie はブラウザーに残ります)

しかし、ブラウザから JESSIONID Cookie を削除しない限り、春はログインにリダイレクトされません。私の質問は - なぜ春のセキュリティはセッションではなく JESSIONID Cookie に依存するのですか?

これは私の spring-security.xml 構成です -

    <security:global-method-security
        secured-annotations="enabled" />

    <security:http auto-config="true">
        <!-- Restrict URLs based on role -->
        <security:intercept-url pattern="/portal/login*"
            access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/logoutSuccess*"
            access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <security:intercept-url pattern="/**/*.css"
            access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/**/*.js"
            access="IS_AUTHENTICATED_ANONYMOUSLY" />    

        <security:intercept-url pattern="/portal/**"
            access="ROLE_USER, ROLE_ADMIN" />

        <security:form-login login-page="/portal/login.action"
            login-processing-url="/portal/loginProcess" default-target-url="/portal/index"
            authentication-failure-url="/portal/login.action?login_error=1" />

        <security:logout logout-url="/portal/logout"
            logout-success-url="/portal/login.action" />

    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>

            <security:jdbc-user-service
                data-source-ref="dataSource"
                users-by-username-query="SELECT emailid AS username, password, IF(active = 'Y', true, false) AS enabled FROM users WHERE emailid = ?"
                authorities-by-username-query="SELECT username, authority from authorities where username = ?" />
        </security:authentication-provider>
    </security:authentication-manager>
4

2 に答える 2

1

サーバーを再起動すると、基本的にセッションのすべてのコンテンツが消去されます。セッションがクリアされたため、ユーザーはログインしていると見なされなくなりました。

あなたのコメントによると、サーバーの再起動後、アプリケーションはユーザーがログインしたかのように動作します。セッションの永続性が有効になっていると思われます (Tomcat/JBoss ではデフォルトで有効になっています)。実際にログインしています (同じ JSESSIONID )。また、セッションに入れたオブジェクトはシリアル化できないため、おそらくセッションの内容が失われます。

Tomcat のドキュメントによると (この場合、JBoss は同様に動作します):

セッションの永続性を無効にする 上で説明したように、すべての Web アプリケーションには既定で標準のマネージャー実装が構成されており、再起動後もセッションの永続性を実行します。この永続化機能を無効にするには、Web アプリケーションのコンテキスト構成ファイルを作成し、そこに次の要素を追加します。

<Manager pathname="" />
于 2013-06-17T12:16:46.040 に答える