我正在尝试理解包含以下BeanPostProcessor实现的Spring 3.0应用程序。这段代码需要什么?我认为UserDetailsService足以获取和设置用户帐户信息。
@Service
public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor
{
/**
* The username parameter.
*/
private String usernameParameter;
/**
* The password parameter.
*/
private String passwordParameter;
@Override
public final Object postProcessAfterInitialization(final Object bean, final String beanName)
{
return bean;
}
@Override
public final Object postProcessBeforeInitialization(final Object bean, final String beanName)
{
if (bean instanceof UsernamePasswordAuthenticationFilter)
{
final UsernamePasswordAuthenticationFilter filter = (UsernamePasswordAuthenticationFilter) bean;
filter.setUsernameParameter(getUsernameParameter());
filter.setPasswordParameter(getPasswordParameter());
}
return bean;
}
/**
* Sets the username parameter.
*
* @param usernameParameter
* the username parameter
*/
public final void setUsernameParameter(final String usernameParameter)
{
this.usernameParameter = usernameParameter;
}
/**
* Gets the username parameter.
*
* @return the username parameter
*/
public final String getUsernameParameter()
{
return usernameParameter;
}
/**
* Sets the password parameter.
*
* @param passwordParameter
* the password parameter
*/
public final void setPasswordParameter(final String passwordParameter)
{
this.passwordParameter = passwordParameter;
}
/**
* Gets the password parameter.
*
* @return the password parameter
*/
public final String getPasswordParameter()
{
return passwordParameter;
}
}
答案 0 :(得分:2)
是的,UserDetailsService
就足够了。
此BeanPostProcessor
更改登录请求中的用户名和密码参数的名称(即登录表单中的字段名称) - 无法通过命名空间配置配置这些属性,并使用BeanPostProcessors
s为了定制这些属性是一种丑陋但很常见的做法。
答案 1 :(得分:1)
此postProcessBeforeInitialization()
方法是从BeanPostProcessor
接口实现的,该接口在getter和setter方法完成执行后自动执行
一旦postProcessBeforeInitialization()
方法完成执行,就会初始化对象,然后执行postProcessAfterInitialization()
。
这些就像生命周期方法。