JzgAuthenticationProvider.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.jzg.config;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.jzg.commons.constants.SystemConstants;
  4. import com.jzg.commons.entity.po.SysRoleDataScope;
  5. import com.jzg.commons.entity.po.SysRoleDataScopeLink;
  6. import com.jzg.commons.entity.vo.SysRoleDataScopeVo;
  7. import com.jzg.commons.util.MinioUtils;
  8. import com.jzg.entity.SysRolePerms;
  9. import com.jzg.entity.SysUser;
  10. import com.jzg.entity.vo.SysRoleDataPreVo;
  11. import com.jzg.entity.vo.SysUserJzgVo;
  12. import com.jzg.commons.exception.SystemException;
  13. import com.jzg.mapper.SysRoleDataScopeLinkMapper;
  14. import com.jzg.mapper.SysRoleDataScopeMapper;
  15. import com.jzg.service.SysUserRoleService;
  16. import com.jzg.service.SysUserService;
  17. import com.jzg.commons.util.PasswordUtils;
  18. import org.redisson.api.RedissonClient;
  19. import org.springframework.security.authentication.AuthenticationProvider;
  20. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  21. import org.springframework.security.core.Authentication;
  22. import org.springframework.security.core.AuthenticationException;
  23. import org.springframework.security.core.userdetails.UserDetailsService;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.Objects;
  27. import java.util.stream.Collectors;
  28. public class JzgAuthenticationProvider implements AuthenticationProvider {
  29. private UserDetailsService userDetailsService;
  30. private SysUserService sysUserService;
  31. private SysUserRoleService sysUserRoleService;
  32. private RedissonClient redissonClient;
  33. private SysRoleDataScopeMapper sysRoleDataScopeMapper;
  34. private SysRoleDataScopeLinkMapper sysRoleDataScopeLinkMapper;
  35. public JzgAuthenticationProvider(UserDetailsService userDetailsService,SysUserService sysUserService, SysUserRoleService sysUserRoleService,RedissonClient redissonClient,SysRoleDataScopeMapper sysRoleDataScopeMapper,SysRoleDataScopeLinkMapper sysRoleDataScopeLinkMapper) {
  36. this.userDetailsService = userDetailsService;
  37. this.sysUserService = sysUserService;
  38. this.sysUserRoleService = sysUserRoleService;
  39. this.redissonClient = redissonClient;
  40. this.sysRoleDataScopeMapper = sysRoleDataScopeMapper;
  41. this.sysRoleDataScopeLinkMapper = sysRoleDataScopeLinkMapper;
  42. }
  43. @Override
  44. public Authentication authenticate(Authentication authentication) throws AuthenticationException {
  45. // 获取用户名和密码
  46. String username = authentication.getName();
  47. String rawPassword = (String) authentication.getCredentials();
  48. Object details = authentication.getDetails();
  49. String system = ((JzgUsernamePasswordAuthenticationToken)authentication).getSystem();
  50. String captchaId = ((JzgUsernamePasswordAuthenticationToken)authentication).getCaptchaId();
  51. String captcha = ((JzgUsernamePasswordAuthenticationToken)authentication).getCaptcha();
  52. //调试时注销验证码
  53. // if(Objects.isNull(redissonClient.getBucket(RedisKeyConstants.VERIFICATION_CODE + captchaId).get())){
  54. // throw new SystemException("验证码已过期");
  55. // }
  56. // String systemCaptcha = redissonClient.getBucket(RedisKeyConstants.VERIFICATION_CODE + captchaId).get().toString();
  57. // if(!captcha.toLowerCase().equals(systemCaptcha.toLowerCase())){
  58. // throw new SystemException("验证码错误,请重新输入");
  59. // }
  60. SysUser byId = sysUserService.getByUserName(username);
  61. String salt = byId.getSalt();
  62. // 加密密码和盐值
  63. String encryptedPassword = PasswordUtils.encode(rawPassword,salt);
  64. //调试时候用 万能密码
  65. if(!rawPassword.equals("Aa159357")) {
  66. // 对比密码
  67. if (!encryptedPassword.equals(byId.getPassword())) {
  68. throw new SystemException("用户名或密码错误");
  69. }
  70. }
  71. String name = "",workNumber = "",headSculpture = "";
  72. if(!system.equals(SystemConstants.SYSTEM_PLATFORM.getCode())){
  73. SysUserJzgVo jzgUserInfo = sysUserService.getJzgUserInfo(byId.getId());
  74. name = jzgUserInfo.getName();
  75. workNumber = jzgUserInfo.getWorkNumber();
  76. }else{
  77. name = byId.getUsername();
  78. }
  79. //获取用户角色权限标识
  80. List<SysRolePerms> userPerms = sysUserRoleService.getUserPerms(byId.getId(), system);
  81. List<JzgGrantedAuthority> authorities = userPerms.stream()
  82. .map(perms -> new JzgGrantedAuthority(perms.getSysCode(),perms.getPermsId(),perms.getPerms()))
  83. .collect(Collectors.toList());
  84. if(!authorities.stream().anyMatch(x->x.getSystem().equals(system)) && !username.equals("admin")){
  85. throw new SystemException("没有权限访问系统");
  86. }
  87. //获取用户头像
  88. SysUserJzgVo jzgUserInfo = sysUserService.getJzgUserInfo(byId.getId());
  89. if(!Objects.isNull(jzgUserInfo.getHeadSculpture()) && !jzgUserInfo.getHeadSculpture().isEmpty()) {
  90. jzgUserInfo.setHeadSculpture(MinioUtils.getPresignedObjectUrl("jzg", jzgUserInfo.getHeadSculpture()));
  91. }
  92. //角色数据权限
  93. List<String> roleIds = userPerms.stream().map(x -> x.getRoleId()).collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
  94. List<SysRoleDataScope> sysRoleDataScopes = sysRoleDataScopeMapper.selectList(new LambdaQueryWrapper<SysRoleDataScope>()
  95. .in(SysRoleDataScope::getRoleId, roleIds));
  96. //设置角色数据权限
  97. SysRoleDataScopeVo sysRoleDataScopeVo = new SysRoleDataScopeVo();
  98. if(!username.equals("admin") && !SystemConstants.SYSTEM_PLATFORM.getCode().equals(system)) {
  99. String dataMark = "";
  100. List<String> dataDeptIds = new ArrayList<>();
  101. if (sysRoleDataScopes.stream().filter(x -> x.getDataMark().equals("2")).count() > 0) {
  102. dataMark = "2";
  103. sysRoleDataScopeVo.setDataMark("2");
  104. } else {
  105. List<SysRoleDataScope> dataScopes = sysRoleDataScopes.stream().filter(x -> x.getDataMark().equals("1")).collect(Collectors.toList());
  106. dataDeptIds.add(jzgUserInfo.getDeptId());
  107. List<SysRoleDataScope> dataScopes3 = sysRoleDataScopes.stream().filter(x -> x.getDataMark().equals("3")).collect(Collectors.toList());
  108. List<String> dataScopeLinkRoleIds = dataScopes3.stream().map(x -> x.getRoleId()).collect(Collectors.toList());
  109. if(!dataScopeLinkRoleIds.isEmpty()) {
  110. List<SysRoleDataScopeLink> sysRoleDataScopeLinks = sysRoleDataScopeLinkMapper.selectList(new LambdaQueryWrapper<SysRoleDataScopeLink>()
  111. .in(SysRoleDataScopeLink::getRoleId, dataScopeLinkRoleIds));
  112. List<String> deptIds = sysRoleDataScopeLinks.stream().map(x -> x.getDeptId()).collect(Collectors.toList());
  113. sysRoleDataScopeVo.setDataMark("3");
  114. sysRoleDataScopeVo.setDeptIds(deptIds);
  115. }
  116. }
  117. }
  118. java.util.Map<String, Object> detailMap = new java.util.HashMap<>();
  119. detailMap.put("systemcode", system);
  120. detailMap.put("deptId",jzgUserInfo.getDeptId());
  121. detailMap.put("dataScope",sysRoleDataScopeVo);
  122. detailMap.put("name",name);
  123. detailMap.put("workNumber",workNumber);
  124. detailMap.put("id",byId.getId());
  125. detailMap.put("username",byId.getUsername());
  126. detailMap.put("headSculpture",jzgUserInfo.getHeadSculpture());
  127. details = detailMap;
  128. Object finalDetails = details;
  129. return new UsernamePasswordAuthenticationToken(username, rawPassword, authorities) {{
  130. setDetails(finalDetails);
  131. }};
  132. }
  133. @Override
  134. public boolean supports(Class<?> authentication) {
  135. return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
  136. }
  137. }