在Spring MVC 3.1应用程序中,我正在尝试实现 remember-me 功能(信息保存在数据库中)。
以下是我目前的情况:
我在安全上下文文件中有这个:
<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>
在“&lt; form-login&gt;”中bean,我已经能够使用 username-parameter 和 password-parameter 重命名必须在jsp中使用的默认“j_password”和“j_username”字段。但我找不到重命名“_spring_security_remember_me”复选框字段的方法。
有关如何重命名的想法吗?
答案 0 :(得分:10)
使用RememberMeServices
的{{3}}属性设置。
遗憾的是,使用命名空间配置无法设置。您可以通过以下几种方式进行设置:
创建自定义RememberMeServices并使用<remember-me services-ref="myRememberMeServices">
使用它。在bean上设置属性。
parameter
在默认RememberMeServices
上设置属性。
答案 1 :(得分: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>
希望它有所帮助。