10

在 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 中,我已经能够使用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)将属性设置为 default 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 回答