Spring Security 角色前缀和自定义用户详细信息服务
如何在 Spring 中使用自定义用户详细信息服务将角色前缀设置为 ""
?
<beans:bean id="authService" class="com.cisco.badges.business.services.AuthenticationService"/>
<authentication-manager>
<authentication-provider user-service-ref="authService">
<password-encoder ref="passwordEncoder">
<salt-source ref="saltSource" />
</password-encoder>
</authentication-provider>
</authentication-manager>
@Service("authService")
public class AuthenticationService extends BaseService implements UserDetailsService, IAuthenticationService {
@Autowired
IUserRepository userRepository;
@Autowired
IAuthorityRepository authorityRepository;
public AuthenticationService() {
}
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if(user == null)
throw new UsernameNotFoundException("No user with username '" + username + "' found!");
List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
for (Role role : user.getRoles()) {
authList.add(new GrantedAuthorityImpl(role.getName()));
}
UserAuthentication userAuthentication = new UserAuthentication(user.getUsername(), user.getPassword(), user.getEnabled() == 0 ? false : true, true, true, true, authList);
userAuthentication.setSalt(user.getSalt());
userAuthentication.setId(user.getId());
return (UserDetails)userAuthentication;
}
}
How do I set the role prefix to ""
with a custom user details service in Spring?
<beans:bean id="authService" class="com.cisco.badges.business.services.AuthenticationService"/>
<authentication-manager>
<authentication-provider user-service-ref="authService">
<password-encoder ref="passwordEncoder">
<salt-source ref="saltSource" />
</password-encoder>
</authentication-provider>
</authentication-manager>
@Service("authService")
public class AuthenticationService extends BaseService implements UserDetailsService, IAuthenticationService {
@Autowired
IUserRepository userRepository;
@Autowired
IAuthorityRepository authorityRepository;
public AuthenticationService() {
}
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if(user == null)
throw new UsernameNotFoundException("No user with username '" + username + "' found!");
List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
for (Role role : user.getRoles()) {
authList.add(new GrantedAuthorityImpl(role.getName()));
}
UserAuthentication userAuthentication = new UserAuthentication(user.getUsername(), user.getPassword(), user.getEnabled() == 0 ? false : true, true, true, true, authList);
userAuthentication.setSalt(user.getSalt());
userAuthentication.setId(user.getId());
return (UserDetails)userAuthentication;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
就像这样
just like this
还可以使用映射器将
_ROLE
附加到您当前的角色。在 Spring Boot 中:之后,您应该将此映射器添加到您的提供程序中:
It's also possible to append a
_ROLE
to your current roles using a mapper. In Spring Boot:After that you should add this mapper to your provider: