-1

ログインに失敗したときに自分の価値を覚えて、ログインページを再度開くにはどうすればよいですか?コントローラで_spring_security_remember_meの値を取得できますか?

ログインエラーが発生したときにチェックボックスの値を保持する必要があります!

4

2 に答える 2

0

あなたの質問は少し不明確です、またはあなたは春のセキュリティで私をどのように覚えているかについて間違ったイメージを持っています。Springセキュリティリファレンス第11章「Remember-Me認証」をお読みください

簡単に言うと、次のように機能します。

  • ユーザーが自分のユーザー名とパスワードで正常にログインし、[記憶する]チェックボックスを有効にした場合、SpringSecurityはユーザーを確認してユーザーに「送信」するCookieを作成します。

  • ログインしていないユーザーがセキュリティで保護されたページを要求する(認証が必要)Springは、彼が有効なCookieであるかどうかを確認します。

    • 彼がそのようなクッキーを持っている場合、春のセキュリティは彼を「自動的に」「ログイン」し、彼にページを表示します
    • 彼が有効なCookieを持っていない場合、Springは彼をログインページに転送します(上記を参照)

これがお役に立てば幸いです。

于 2012-09-14T07:02:14.007 に答える
0

次の解決策を試すことができます。1。カスタムフィルターをスプリングセキュリティフィルターチェーンに挿入します。2。このフィルター内でhttpセッションを取得し、要求パラメーターの値を保存します。

ログインフォームを変更する(別のパラメーターを追加する)と、ログインフォームのSpring表現とSpringログイン処理フィルターをカスタマイズする必要があります。構成は次のとおりです。

<authentication-manager alias="authenticationManager"/>

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter">
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
    <beans:property name="defaultTargetUrl" value="/initialize.action"/>
    <beans:property name="authenticationFailureUrl" value="/login_failed.action"/>
    <beans:property name="authenticationManager" ref="authenticationManager"/>
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    <beans:property name="filterProcessesUrl" value="/perform_login"/>
</beans:bean>

<beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <beans:property name="loginFormUrl" value="/login.action"/>
</beans:bean>

MyAuthenticationProcessingFilterは、springのorg.springframework.security.ui.webapp.AuthenticationProcessingFilterを拡張し、attemptAuthenticationメソッドをラップしてリクエストパラメーターを取得し、httpセッション内に保存します。このクラスは、アイデアを示すためだけに作成されています。より良い練習として、AuthenticationProcessingFilterコードでユーザー名とパスワードのパラメーターを参照してください。

パブリッククラスMyAuthenticationProcessingFilterはAuthenticationProcessingFilterを拡張します{

@Override
public Authentication attemptAuthentication(HttpServletRequest request)
        throws AuthenticationException {
    String param = request.getParameter("_spring_security_remember_me");

    HttpSession session = request.getSession();
    if (session != null || getAllowSessionCreation()) {
        session.setAttribute("_spring_security_remember_me", param);
    }

    return super.attemptAuthentication(request);
}

}

「myFilter」Beanと「entryPoint」Beanが一緒になって、内部の要素によって定義されるパラメーターを定義していることに気付くかもしれません。デフォルトの動作が必要な場合に使用します。ただし、この場合はカスタムBeanを使用するため、要素を完全に削除する必要があります。次に、Beanを使用するように指示する必要があります。「myFilter」Beanは、Bean定義内の要素を使用してスプリングチェーンに渡されます。

<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter">
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
    ...
</beans:bean>

「entryPoint」はusing属性に渡されます:

<http entry-point-ref="entryPoint">
    ...
    <!-- no form-login here -->
</http>
于 2012-09-14T13:49:20.823 に答える