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>
Надеюсь, что это поможет.