0
A
回答
1
您需要通过实现UserDetailsService来创建一个用户类,如
@Transactional
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
MyUser details = userDao.getUser(username);
Collection<simplegrantedauthority> authorities = new ArrayList<simplegrantedauthority>();
SimpleGrantedAuthority userAuthority = new SimpleGrantedAuthority(
"ROLE_USER");
SimpleGrantedAuthority adminAuthority = new SimpleGrantedAuthority(
"ROLE_ADMIN");
if (details.getRole().equals("user"))
authorities.add(userAuthority);
else if (details.getRole().equals("admin")) {
authorities.add(userAuthority);
authorities.add(adminAuthority);
}
UserDetails user = new User(details.getUsername(),
details.getPassword(), true, true, true, true, authorities);
return user;
}
}
的再配置Spring使用您的customuser对象......像
<authentication-manager>
<authentication-provider user-service-ref="authService">
</authentication-provider>
</authentication-manager>
找到
1
您可以创建一个扩展UserDetailsService的用户服务,然后创建UserDetail对象。
这与此类似。
创建你的用户等级:
public class MyUserDetails implements UserDetails {
private UserEntity user;
private List<GrantedAuthority> authorities;
/**
* Constructor
*/
public MyUserDetails(UserEntity user) {
this.user = user;
this.authorities = Arrays.asList(new SimpleGrantedAuthority(user.getRole().name()));
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#getAuthorities()
*/
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#getPassword()
*/
@Override
public String getPassword() {
return user.getPassword();
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#getUsername()
*/
@Override
public String getUsername() {
return user.getEmail();
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#isAccountNonExpired()
*/
@Override
public boolean isAccountNonExpired() {
return true;
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#isAccountNonLocked()
*/
@Override
public boolean isAccountNonLocked() {
return !user.isLocked();
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#isCredentialsNonExpired()
*/
@Override
public boolean isCredentialsNonExpired() {
return !user.isExpired();
}
/* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetails#isEnabled()
*/
@Override
public boolean isEnabled() {
return user.isEnabled();
}
/**
* @return the user
*/
public UserEntity getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(UserEntity user) {
this.user = user;
}
}
那么你应该创建你的UserDetailsService:
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepo;
/*
* (non-Javadoc)
* @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserEntity user = userDao.findByEmail(username);
if (user == null) {
LOGGER.warn("User {} does not exist in our database", username);
throw new UsernameNotFoundException("User not found.");
}
return new MyUserDetails(user);
}
}
最后,你应该添加配置春季安全使用你的服务:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MyUserDetailsService userDetailsService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new Md5PasswordEncoder());
}
}
相关问题
- 1. 创建我自己的GoPro实时流
- 2. 如何在Symfony 2实体中创建我自己的函数
- 3. 在EDMX中更新时保存我自己创建的实体
- 4. 如何使用我自己的实体创建自定义模型
- 5. 创建我自己的API
- 6. 让用户创建自己的类的实例
- 7. 使用我自己的实体而不是POCO实体
- 8. 创建和使用我自己的
- 9. 为与自己相关的实体创建正确的模型
- 10. 如何在Eclipse中创建我自己的实用程序类?
- 11. 为nuget创建我自己的用户界面
- 12. 实体框架为外键创建了自己的列
- 13. 创建自己的Boost :: Archive实现
- 14. HTML/CSS自己的实体
- 15. 我如何用我自己的风格创建自己的wysiwyg编辑器?
- 16. 创建我自己的Google网站模板使用我自己的CSS
- 17. 虽然我自己创建了用户帐户,但用户拒绝访问PHPMyAdmin
- 18. c# - 绕过Windows窗体ClassName名称创建到我自己的
- 19. 从我自己的媒体库创建播放列表
- 20. 创建我自己的YAJSW Java服务包装器的实现?
- 21. 如何创建我自己的setSVMDetector?
- 22. 创建我自己的RSS订阅2.0
- 23. 创建我自己的回调
- 24. 如何创建我自己的sap.suite.ui.generic.template.ObjectPage
- 25. 创建我自己的MJPEG流
- 26. 创建我自己的闹钟活动
- 27. asp.net MVC创建我自己的路由
- 28. 创建我自己的strcopy函数
- 29. 创建我自己的注释Java
- 30. 在android中创建我自己的SSO