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. 在EDMX中更新時保存我自己創建的實體
- 3. 如何使用我自己的實體創建自定義模型
- 4. 讓用戶創建自己的類的實例
- 5. 使用我自己的實體而不是POCO實體
- 6. 創建和使用我自己的
- 7. 如何在Eclipse中創建我自己的實用程序類?
- 8. 實體框架爲外鍵創建了自己的列
- 9. 創建自己的Boost :: Archive實現
- 10. HTML/CSS自己的實體
- 11. 我如何用我自己的風格創建自己的wysiwyg編輯器?
- 12. c# - 繞過Windows窗體ClassName名稱創建到我自己的
- 13. 從我自己的媒體庫創建播放列表
- 14. 如何創建我自己的加密?
- 15. 創建我自己的strcopy函數
- 16. 如何創建我自己的sap.suite.ui.generic.template.ObjectPage
- 17. Java Android - 創建我自己的類
- 18. 定製PreferenceActivity或創建我自己的?
- 19. 創建我自己的滑塊
- 20. AppEngine:創建我自己的UserService?
- 21. 如何創建我自己的UITabBar?
- 22. 如何創建我自己的setSVMDetector?
- 23. 創建我自己的PHP框架
- 24. 創建我自己的MJPEG流
- 25. 創建我自己的雙擊功能
- 26. 如何創建我自己的承諾?
- 27. asp.net MVC創建我自己的路由
- 28. 創建我自己的回調
- 29. 在Codeigniter中創建我自己的base_url()
- 30. 在android中創建我自己的SSO