Spring Безопасность: как переименовать поле "_spring_security_remember_me"?

В приложении Spring MVC 3.1 я пытаюсь реализовать функцию вспомнить (с информацией, сохраненной в базе данных).

Здесь у меня есть:

  • Я создал таблицу persistent_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 мне удалось переименовать поля по умолчанию "j_password" и "j_username", которые должны использоваться в jsp, используя параметр userername и пароль, параметр. Но я не могу найти способ переименовать поле "_spring_security_remember_me".

Любая идея о том, как его переименовать?

Ответ 1

Это значение устанавливается с помощью свойства parameter RememberMeServices.

К сожалению, это невозможно установить с помощью конфигурации пространства имен. Вот несколько способов, которые вы могли бы установить:

  • Создайте пользовательские функции RememberMeServices и используйте их с помощью <remember-me services-ref="myRememberMeServices">. Установите свойство на bean.

  • Используйте BeanPostProcessor (см. 1.8), чтобы установить свойство по умолчанию RememberMeServices.

Ответ 2

Вы должны использовать 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> 

Надеюсь, что это поможет.