| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package com.jzg.handler;
- import com.alibaba.fastjson.JSONObject;
- import com.jzg.commons.entity.vo.SysRoleDataScopeVo;
- import com.jzg.config.JzgGrantedAuthority;
- import com.jzg.config.JzgTokenService;
- import com.jzg.entity.RedisToken;
- import com.jzg.mapper.SysUserJzgInfoMapper;
- import jakarta.servlet.ServletException;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.security.core.Authentication;
- import org.springframework.security.core.GrantedAuthority;
- import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
- import java.io.IOException;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.List;
- import java.util.logging.Logger;
- import java.util.stream.Collectors;
- public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
- Logger logger = Logger.getLogger(JzgAuthenticationSuccessHandler.class.getName());
- private final JzgTokenService tokenService;
- private final SysUserJzgInfoMapper sysUserJzgInfoMapper;
- public JzgAuthenticationSuccessHandler(JzgTokenService tokenService, SysUserJzgInfoMapper sysUserJzgInfoMapper) {
- this.tokenService = tokenService;
- this.sysUserJzgInfoMapper = sysUserJzgInfoMapper;
- }
- @Override
- public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
- // 获取用户信息
- String username = authentication.getName();
- SysRoleDataScopeVo dataScopeVo = (SysRoleDataScopeVo) ((HashMap<?, ?>) authentication.getDetails()).get("dataScope");
- String system = ((HashMap<String, String>) authentication.getDetails()).get("systemcode");
- String deptId = ((HashMap<String, String>) authentication.getDetails()).get("deptId");
- String id = ((HashMap<String, String>) authentication.getDetails()).get("id");
- String workNumber = ((HashMap<String, String>) authentication.getDetails()).get("workNumber");
- String name = ((HashMap<String, String>) authentication.getDetails()).get("name");
- String headSculpture = ((HashMap<String, String>) authentication.getDetails()).get("headSculpture");
- String province = ((HashMap<String, String>) authentication.getDetails()).get("province");
- boolean isFirst = ((HashMap<String, Boolean>) authentication.getDetails()).get("isFirst");
- RedisToken redisToken = new RedisToken();
- Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
- redisToken.setUsername(username);
- List<JzgGrantedAuthority> jzgGrantedAuthorities = authorities.stream()
- // 过滤出系统的权限
- .filter(authority -> ((JzgGrantedAuthority)authority).getSystem().equals(system))
- // 强制转换为 SimpleGrantedAuthority
- .map(authority -> (JzgGrantedAuthority) authority)
- .collect(Collectors.toList());
- // 根据用户id(sys_user_jzg_info.user_id)联 sys_user_jzg_info_salesman 表查询用户身份
- String typeAttr = null;
- try {
- typeAttr = sysUserJzgInfoMapper.selectTypeAttrByUserId(id);
- } catch (Exception e) {
- logger.warning("查询用户身份失败:" + e.getMessage());
- }
- redisToken.setTypeAttr(typeAttr);
- redisToken.setUserId(id);
- redisToken.setAuths(jzgGrantedAuthorities);
- redisToken.setUsername(username);
- redisToken.setWorkNumber(workNumber);
- redisToken.setName(name);
- redisToken.setSystem(system);
- redisToken.setDeptId(deptId);
- redisToken.setDataScope(dataScopeVo);
- redisToken.setHeadSculpture(headSculpture);
- redisToken.setProvince(province);
- String token = tokenService.generateToken(username);
- // 生成 JWT Token
- tokenService.saveToken(username,token,JSONObject.toJSONString(redisToken));
- logger.info(username+"登录成功");
- // 设置响应内容类型为 JSON
- response.setContentType("application/json");
- JSONObject json = new JSONObject();
- JSONObject data = new JSONObject();
- data.put("token",token);
- data.put("isFirst",isFirst);
- data.put("typeAttr", typeAttr);
- json.put("code",200);
- json.put("msg","login success");
- json.put("data",data);
- json.put("type","1");
- // json.put("data",token);
- // 将 Token 返回给前端
- response.getWriter().write(json.toJSONString());
- // 确保状态码为 200 OK,不进行重定向
- response.setStatus(HttpServletResponse.SC_OK);
- }
- }
|