extend Spring Security UserDetailService class

This commit is contained in:
myh 2023-12-03 23:44:38 +08:00
parent 684954efee
commit 5aa2ff89c0
2 changed files with 49 additions and 2 deletions

View File

@ -2,11 +2,12 @@ package com.example.springdemo.service;
import com.example.springdemo.entities.Users; import com.example.springdemo.entities.Users;
import com.example.springdemo.entities.password.UsersPassword; import com.example.springdemo.entities.password.UsersPassword;
import org.springframework.security.core.userdetails.UserDetailsService;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface UsersService { public interface UsersService extends UserDetailsService {
Users addUser(Users user, UsersPassword userPassword); Users addUser(Users user, UsersPassword userPassword);

View File

@ -1,17 +1,31 @@
package com.example.springdemo.service; package com.example.springdemo.serviceImpl;
import com.example.springdemo.dao.UsersPasswordRepository; import com.example.springdemo.dao.UsersPasswordRepository;
import com.example.springdemo.dao.UsersRepository; import com.example.springdemo.dao.UsersRepository;
import com.example.springdemo.entities.RBAC.Permissions;
import com.example.springdemo.entities.RBAC.Roles;
import com.example.springdemo.entities.Users; import com.example.springdemo.entities.Users;
import com.example.springdemo.entities.password.UsersPassword; import com.example.springdemo.entities.password.UsersPassword;
import com.example.springdemo.service.PermissionsService;
import com.example.springdemo.service.UsersService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@Service @Service
@Component
public class UsersServiceImpl implements UsersService { public class UsersServiceImpl implements UsersService {
@Resource @Resource
private UsersRepository usersRepository; private UsersRepository usersRepository;
@ -19,6 +33,9 @@ public class UsersServiceImpl implements UsersService {
@Resource @Resource
private UsersPasswordRepository usersPasswordRepository; private UsersPasswordRepository usersPasswordRepository;
@Resource
private PermissionsService permissionsService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
//添加用户时同步添加密码 //添加用户时同步添加密码
@ -74,9 +91,38 @@ public class UsersServiceImpl implements UsersService {
} }
@Override @Override
@Modifying
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
//更新用户密码 //更新用户密码
public int updateUserPasswordById(String password, Long userId) { public int updateUserPasswordById(String password, Long userId) {
return usersPasswordRepository.updatePassword(password, userId); return usersPasswordRepository.updatePassword(password, userId);
} }
//根据用户名获取用户信息
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Collection<GrantedAuthority> authorities = new ArrayList<>();
// 从数据库中取出用户信息
Users user = usersRepository.findByName(username).orElse(null);
// 判断用户是否存在
if (user == null) {
throw new UsernameNotFoundException("用户名不存在");
}
// 取出密码
String password = usersPasswordRepository.findByUsersId(user.getId()).getPassword();
// 用户角色
Roles role = user.getRoles();
authorities.add(new SimpleGrantedAuthority("ROLE_".concat(role.getName())));
//用户权限
List<Permissions> permissions = permissionsService.findPermissionsByRoleId(role.getId());
for (Permissions permission : permissions) {
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(permission.getName());
authorities.add(simpleGrantedAuthority);
}
// 返回UserDetails实现类
return new User(user.getName(), "{noop}" + password, authorities);
}
} }