10

Spring MVC 3.1 アプリケーションで、(データベースに保存された情報を使用して)記憶機能を実装しようとしています。

ここに私が現在持っているものがあります:

  • persist_loginsテーブルを作成しました。
  • セキュリティコンテキストファイルにこれがあります:

    <form-login login-page="/login" 
            authentication-failure-url="/login?err=true"
            default-target-url="/" 
            username-parameter="username" 
            password-parameter="password"
            login-processing-url="/validatelogin" />
    
    <remember-me key="some_random_key" 
             token-validity-seconds="31536000" 
             data-source-ref="dataSource" />
    
  • 私の login.jsp には、次のものがあります。

    <form action="/validatelogin" method="post">
        username : <input type='text' id='username' name='username' value='${SPRING_SECURITY_LAST_EXCEPTION.authentication.principal}' />
        <br />
        password : <input type='password' id='password' name='password' />
        <br /><br />
        remember me : <input type="checkbox" name="_spring_security_remember_me" />
        <br /><br />
        <input type="submit" value="submit" />
    </form>
    

「<form-login>」Bean では、 username-parameterpassword-parameterを使用して、jsp で使用する必要があるデフォルトの「j_password」フィールドと「j_username」フィールドの名前を変更できました。しかし、「_spring_security_remember_me」チェックボックス フィールドの名前を変更する方法が見つかりません。

名前を変更する方法について何か考えはありますか?

4

2 に答える 2

10

parameterのプロパティを使用して設定されますRememberMeServices

残念ながら、これは名前空間構成を使用して設定することはできません。これを設定するには、いくつかの方法があります。

  1. カスタムの RememberMeServices を作成し、 を使用して使用し<remember-me services-ref="myRememberMeServices">ます。Bean にプロパティを設定します。

  2. デフォルトのプロパティを設定するには、BeanPostProcessor (1.8 を参照) を使用RememberMeServicesします。

于 2012-04-29T02:21:36.907 に答える
3

BeanPostProcessor を使用して正しいプロパティを設定する必要があります。

プロパティを「myRememberMeProperty」と呼びたいと考えてみましょう。

次に、コードは次のようになります。

public class MyBeanPostProcessor implements BeanPostProcessor {

 String myRememberMeProperty;


  public Object postProcessAfterInitialization(Object bean, String name) {
    if (bean instanceof AbstractRememberMeServices) {
      AbstractRememberMeServices rememberMe = (AbstractRememberMeServices) bean;
      rememberMe.setParameter(getMyRememberMeProperty());
    }
    return bean;
  }    
  public Object postProcessBeforeInitialization(Object bean, String name) {
    return bean;
  }

  public void setMyRememberMeProperty(String myRememberMeProperty){
    this.myRememberMeProperty = myRememberMeProperty;    

  }

 public String getMyRememberMeProperty(){
     return this.myRememberMeProperty;    

  }
}


<bean id="myBeanPostProcessor"
    class="x.y.z.MyBeanPostProcessor">
    <property name="myRememberMeProperty" value="myRememberMeProperty" />
</bean> 

それが役に立てば幸い。

于 2012-04-29T07:16:32.590 に答える