我正在使用password-parameter
(如下所示)来自定义包含密码的请求参数的名称。如何使用remember-me(默认_spring_security_remember_me
)?
<security:form-login password-parameter="j_password_input" ... />
答案 0 :(得分:5)
您有几个选项,我已在下面进一步详细解释
命名空间不支持配置remember me参数,但您可以使用FAQ中有关如何仍然使用命名空间支持的提示,但可以自定义结果。诀窍是使用BeanPostProcessor
在AbstractRememberMeServices
上设置参数字段。您可以在下面找到以下示例:
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessAfterInitialization(Object bean, String name) {
if (bean instanceof AbstractRememberMeServices) {
AbstractRememberMeServices rememberMe = (AbstractRememberMeServices) bean;
rememberMe.setParameter("myParamname");
}
return bean;
}
public Object postProcessBeforeInitialization(Object bean, String name) {
return bean;
}
}
然后你需要像往常一样使用命名空间,并将MyBeanPostProcessor添加到Spring配置中,如下所示:
<security:http ..>
...
<security:remember-me/>
</security:http>
<bean class="sample.MyBeanPostProcessor"/>
您也可以使用services-ref属性,但这需要更多配置。例如,如果您需要,可以使用以下配置:
<security:http ..>
...
<security:remember-me services-ref="rememberMeServices"/>
</security:http>
<bean id="rememberMeServices"
class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
<property name="key" value="mustMatchRememberMeAuthenticationProvidersKey"/>
<property name="parameter" value="myParamName"/>
<!-- You must refer to a bean that implements UserDetailsService
in this example the bean id is userDetailsService -->
<property name="userDetailsService" ref="userDetailsService"/>
</bean>
答案 1 :(得分:0)
从Spring Security 3.2.x开始,您可以使用remember-me-parameter
元素上的remember-me
参数进行设置。