JzgAuthenticationSuccessHandler.java 4.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.jzg.handler;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.jzg.commons.entity.vo.SysRoleDataScopeVo;
  4. import com.jzg.config.JzgGrantedAuthority;
  5. import com.jzg.config.JzgTokenService;
  6. import com.jzg.entity.RedisToken;
  7. import com.jzg.mapper.SysUserJzgInfoMapper;
  8. import jakarta.servlet.ServletException;
  9. import jakarta.servlet.http.HttpServletRequest;
  10. import jakarta.servlet.http.HttpServletResponse;
  11. import org.springframework.security.core.Authentication;
  12. import org.springframework.security.core.GrantedAuthority;
  13. import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
  14. import java.io.IOException;
  15. import java.util.Collection;
  16. import java.util.HashMap;
  17. import java.util.List;
  18. import java.util.logging.Logger;
  19. import java.util.stream.Collectors;
  20. public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
  21. Logger logger = Logger.getLogger(JzgAuthenticationSuccessHandler.class.getName());
  22. private final JzgTokenService tokenService;
  23. private final SysUserJzgInfoMapper sysUserJzgInfoMapper;
  24. public JzgAuthenticationSuccessHandler(JzgTokenService tokenService, SysUserJzgInfoMapper sysUserJzgInfoMapper) {
  25. this.tokenService = tokenService;
  26. this.sysUserJzgInfoMapper = sysUserJzgInfoMapper;
  27. }
  28. @Override
  29. public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
  30. // 获取用户信息
  31. String username = authentication.getName();
  32. SysRoleDataScopeVo dataScopeVo = (SysRoleDataScopeVo) ((HashMap<?, ?>) authentication.getDetails()).get("dataScope");
  33. String system = ((HashMap<String, String>) authentication.getDetails()).get("systemcode");
  34. String deptId = ((HashMap<String, String>) authentication.getDetails()).get("deptId");
  35. String id = ((HashMap<String, String>) authentication.getDetails()).get("id");
  36. String workNumber = ((HashMap<String, String>) authentication.getDetails()).get("workNumber");
  37. String name = ((HashMap<String, String>) authentication.getDetails()).get("name");
  38. String headSculpture = ((HashMap<String, String>) authentication.getDetails()).get("headSculpture");
  39. String province = ((HashMap<String, String>) authentication.getDetails()).get("province");
  40. boolean isFirst = ((HashMap<String, Boolean>) authentication.getDetails()).get("isFirst");
  41. RedisToken redisToken = new RedisToken();
  42. Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
  43. redisToken.setUsername(username);
  44. List<JzgGrantedAuthority> jzgGrantedAuthorities = authorities.stream()
  45. // 过滤出系统的权限
  46. .filter(authority -> ((JzgGrantedAuthority)authority).getSystem().equals(system))
  47. // 强制转换为 SimpleGrantedAuthority
  48. .map(authority -> (JzgGrantedAuthority) authority)
  49. .collect(Collectors.toList());
  50. // 根据用户id(sys_user_jzg_info.user_id)联 sys_user_jzg_info_salesman 表查询用户身份
  51. String typeAttr = null;
  52. try {
  53. typeAttr = sysUserJzgInfoMapper.selectTypeAttrByUserId(id);
  54. } catch (Exception e) {
  55. logger.warning("查询用户身份失败:" + e.getMessage());
  56. }
  57. redisToken.setTypeAttr(typeAttr);
  58. redisToken.setUserId(id);
  59. redisToken.setAuths(jzgGrantedAuthorities);
  60. redisToken.setUsername(username);
  61. redisToken.setWorkNumber(workNumber);
  62. redisToken.setName(name);
  63. redisToken.setSystem(system);
  64. redisToken.setDeptId(deptId);
  65. redisToken.setDataScope(dataScopeVo);
  66. redisToken.setHeadSculpture(headSculpture);
  67. redisToken.setProvince(province);
  68. String token = tokenService.generateToken(username);
  69. // 生成 JWT Token
  70. tokenService.saveToken(username,token,JSONObject.toJSONString(redisToken));
  71. logger.info(username+"登录成功");
  72. // 设置响应内容类型为 JSON
  73. response.setContentType("application/json");
  74. JSONObject json = new JSONObject();
  75. JSONObject data = new JSONObject();
  76. data.put("token",token);
  77. data.put("isFirst",isFirst);
  78. data.put("typeAttr", typeAttr);
  79. json.put("code",200);
  80. json.put("msg","login success");
  81. json.put("data",data);
  82. json.put("type","1");
  83. // json.put("data",token);
  84. // 将 Token 返回给前端
  85. response.getWriter().write(json.toJSONString());
  86. // 确保状态码为 200 OK,不进行重定向
  87. response.setStatus(HttpServletResponse.SC_OK);
  88. }
  89. }