我正在使用password-parameter(如下所示)自定义包含密码的请求参数的名称.如何用remember-me(默认_spring_security_remember_me)做同样的事情?
<security:form-login password-parameter="j_password_input" ... />
Run Code Online (Sandbox Code Playgroud)
您有几个选项我已在下面进一步详细说明
命名空间不支持配置remember me参数,但您可以使用FAQ中的提示来了解如何仍使用命名空间支持,但自定义结果.诀窍是使用a 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你需要像往常一样使用命名空间,并将MyBeanPostProcessor添加到Spring配置中,如下所示:
<security:http ..>
...
<security:remember-me/>
</security:http>
<bean class="sample.MyBeanPostProcessor"/>
Run Code Online (Sandbox Code Playgroud)
您也可以使用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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |