我只想问是否可以使用除域类的用户名和密码之外的其他属性进行登录?
例如,我有一个与Person
域类有one-to-one
关系的Account
域类。我想使用他们在域类中找到的firstName
&birthDate
属性对我的用户进行身份验证。Person
有没有我可以做的配置来实现这一点?
我只想问是否可以使用除域类的用户名和密码之外的其他属性进行登录?
例如,我有一个与Person
域类有one-to-one
关系的Account
域类。我想使用他们在域类中找到的firstName
&birthDate
属性对我的用户进行身份验证。Person
有没有我可以做的配置来实现这一点?
是的。这是可能的。
您必须编写一个自定义authentication-provider
的,您可以在其中获取您喜欢的参数来进行身份验证。
例如,您可能有这样的事情:
public class MyUserDetailsService implements UserDetailsService{
@Override
public UserDetails loadUserByUsername(String username){
//You have to override this method to have your desired action
//If those criteria are not satisfied you may return null
//Otherwise have an UserDetails filled and returned
org.springframework.security.core.userdetails.User userDetails = new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), user.getIsActive(), true, true, true, getAuthorities(user));
return userDetails
}
在您的 bean 配置中,使用您自己的,authentication-provider
如下所示:
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="myUserDetailsService"/>
</sec:authentication-manager>