62 lines
2.2 KiB
Java
62 lines
2.2 KiB
Java
package com.yaoyuan.jiscuss.service.impl;
|
|
|
|
import com.yaoyuan.jiscuss.entity.UserInfo;
|
|
import com.yaoyuan.jiscuss.entity.Users;
|
|
import com.yaoyuan.jiscuss.service.IUsersService;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.User;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author yaoyuan2.chu
|
|
* @Title:
|
|
* @Package com.yaoyuan.jiscuss.service.impl
|
|
* @Description:
|
|
* @date 2020/7/15 16:34
|
|
*/
|
|
@Component
|
|
public class UserDetailServiceImpl implements UserDetailsService {
|
|
@Autowired
|
|
private IUsersService userInfoService;
|
|
|
|
/**
|
|
* 需新建配置类注册一个指定的加密方式Bean,或在下一步Security配置类中注册指定
|
|
*/
|
|
@Autowired
|
|
private PasswordEncoder passwordEncoder;
|
|
|
|
@Override
|
|
public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException {
|
|
// 通过用户名从数据库获取用户信息
|
|
Users userInfo = userInfoService.getByUsername(username);
|
|
if (userInfo == null) {
|
|
throw new UsernameNotFoundException("用户不存在");
|
|
}
|
|
|
|
// 得到用户角色
|
|
String role = "admin";
|
|
|
|
// 角色集合
|
|
List<GrantedAuthority> authorities = new ArrayList<>();
|
|
// 角色必须以`ROLE_`开头,数据库中没有,则在这里加
|
|
authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
|
|
|
|
return new UserInfo(
|
|
authorities,
|
|
userInfo.getId(),
|
|
// 因为数据库是明文,所以这里需加密密码
|
|
passwordEncoder.encode(userInfo.getPassword()),
|
|
userInfo.getUsername(),
|
|
userInfo.getPhone()
|
|
);
|
|
}
|
|
} |