package com.java1234.controller;
import com.java1234.entity.R;
import com.java1234.entity.SysUser;
import com.java1234.service.SysUserService;
import com.java1234.util.JwtUtils;
import com.java1234.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 测试包
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private SysUserService sysUserService;
@RequestMapping("/user/list")
// @PreAuthorize("hasRole('ROLE_admin2')")
@PreAuthorize("hasAnyAuthority('system:user:list')")
public R userList(@RequestHeader(required = false)String token){
if(StringUtil.isNotEmpty(token)){
Map<String,Object> resultMap = new HashMap<>();
List<SysUser> userList = sysUserService.list();
resultMap.put("userList",userList);
return R.ok(resultMap);
}else{
return R.error(401,"没有权限访问");
}
}
@RequestMapping("/login")
public R login(){
String token = JwtUtils.genJwtToken("java1234");
return R.ok().put("token",token);
}
}
package com.java1234.common.security;
import com.java1234.common.exception.UserCountLockException;
import com.java1234.entity.SysUser;
import com.java1234.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 自定义UserDetails
*/
@Service
public class MyUserDetailServiceImpl implements UserDetailsService {
@Autowired
private SysUserService sysUserService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
SysUser sysUser = sysUserService.getByUsername(username);
if(sysUser==null){
throw new UsernameNotFoundException("用户名或者密码错误!");
}else if("1".equals(sysUser.getStatus())){
throw new UserCountLockException("该用户账号被封禁,具体请联系管理员!");
}
return new User(sysUser.getUsername(),sysUser.getPassword(),getUserAuthority(sysUser.getId()));
}
public List<GrantedAuthority> getUserAuthority(Long userId) {
String authority = sysUserService.getByUserAuthorityInfo(userId);
return AuthorityUtils.commaSeparatedStringToAuthorityList(authority);
}
}
package com.java1234.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java1234.entity.SysMenu;
import com.java1234.entity.SysRole;
import com.java1234.entity.SysUser;
import com.java1234.mapper.SysMenuMapper;
import com.java1234.mapper.SysRoleMapper;
import com.java1234.service.SysUserService;
import com.java1234.mapper.SysUserMapper;
import com.java1234.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author mayer
* @description 针对表【sys_user】的数据库操作Service实现
* @createDate 2023-07-28 20:32:47
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
implements SysUserService{
@Autowired
SysRoleMapper sysRoleMapper;
@Autowired
SysMenuMapper sysMenuMapper;
@Override
public SysUser getByUsername(String username) {
return getOne(new QueryWrapper<SysUser>().eq("username",username));
}
@Override
public String getByUserAuthorityInfo(Long userId) {
StringBuffer authority = new StringBuffer();
//根据用户id获取所有的角色信息
List<SysRole> roleList = sysRoleMapper.selectList(new QueryWrapper<SysRole>().inSql("id", "SELECT role_id FROM sys_user_role WHERE user_id=" + userId));
if(roleList.size() > 0){
String roleCodeStrs = roleList.stream().map(r -> "ROLE_" + r.getCode()).collect(Collectors.joining(","));
authority.append(roleCodeStrs);
}
//遍历所有的角色 获取所有菜单权限 而且不重复
Set<String> menuCodeSet = new HashSet<>();
for(SysRole sysRole : roleList){
List<SysMenu> sysMenuList = sysMenuMapper.selectList(new QueryWrapper<SysMenu>().inSql("id", "SELECT menu_id FROM sys_role_menu WHERE role_id =" + sysRole.getId()));
for(SysMenu sysMenu : sysMenuList){
String perms = sysMenu.getPerms();
if(StringUtil.isNotEmpty(perms)){
menuCodeSet.add(perms);
}
}
}
if(menuCodeSet.size() >0){
authority.append(",");
String menuCodeStrs = menuCodeSet.stream().collect(Collectors.joining(","));
authority.append(menuCodeStrs);
}
System.out.println("authority:"+authority.toString());
return authority.toString() ;
}
}
文章来源地址https://www.toymoban.com/news/detail-628041.html
文章来源:https://www.toymoban.com/news/detail-628041.html
到了这里,关于获取用户角色权限信息实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!