1

アプリケーションのログイン機能を実装するために春のセキュリティを使用しています。ほとんどの場合、春のセキュリティは期待どおりに機能しています。でもたまに発狂する。その時点で、私のデザインのないログインページが、ユーザー名とパスワードのテキストボックスで開きます。完全に形成されていないログイン ページからログインすると、ホームページのランダムな png または js ファイルが開かれます。次に、対応する js または png 部分を URL から削除し、Enter キーを押します。その時点で、完全に形成されたログイン ページが開き、アプリケーションは期待どおりにスムーズに動作します。春のセキュリティ部分で何が起こっているのかわかりません。誰か助けてください。以下は、春のセキュリティの私の構成です。

<http auto-config="true" use-expressions="true">
    <!-- <intercept-url pattern="/loadISearch" access="ROLE_ADMIN" />  -->  

    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/accessdenied**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />

        <form-login login-page="/" default-target-url="/dashboard1" authentication-failure-url="/accessdenied" />
        <logout invalidate-session="true" logout-success-url="/" /> 

    </http>
4

1 に答える 1

1

私の推測では、次のことが起こっています。

  • あなたのログインページはスタイル設定に CSS と画像を使用しています
  • Spring Security は、CSS / 画像ファイルへのアクセスを許可していないため、それらへのアクセスを拒否しています。このため、ログイン ページが予想とは異なり、認識できません。
  • CSS/画像がブラウザによってキャッシュされるため、ログインページが正常に見える場合があります。ブラウザーは CSS / 画像をキャッシュしているため、コンテナーにリソースを要求しておらず、Spring Security はそれを保護できないため、ログイン ページは期待どおりにレンダリングされます。
  • Spring Security のデフォルト ポリシーは、認証前に行った最後のリクエストを保存し、そこにユーザーを送信することです。ログインページは保護されたリソース (CSS、画像など) に対して追加のリクエストを行っているため、認証後にそれらのページに送信されます。リクエストは非同期であるため、結果は非決定論的である可能性があります。

この問題を解決するには、ログイン ページで使用するすべてのリソースへのアクセスを許可してください。たとえば、すべての CSS、JS、および画像を /resources/ という名前のフォルダーに配置する場合、次のように構成を変更できます。

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/resources/**" access="permitAll" />

    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/accessdenied**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />

    <form-login login-page="/" 
                default-target-url="/dashboard1" 
                authentication-failure-url="/accessdenied" />
    <logout invalidate-session="true" logout-success-url="/" /> 

</http>
于 2013-10-22T13:57:06.933 に答える