SecurityAccessTokenResolver.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.dragoninfo.dcuc.authweb.interceptor;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.dragoninfo.dcuc.auth.auth.facade.IBimBusinessFacade;
  4. import com.dragoninfo.dcuc.auth.auth.vo.bim.BimUserInfoItemRespVO;
  5. import com.dragoninfo.dcuc.common.Constants;
  6. import com.dragoninfo.dcuc.user.user.entity.UserInfo;
  7. import com.dragoninfo.dcuc.user.user.facade.IUserFacade;
  8. import com.dragonsoft.duceap.base.api.security.ISecurityAccessTokenResolver;
  9. import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
  10. import com.dragonsoft.duceap.base.entity.security.SecurityUser;
  11. import com.dragonsoft.duceap.commons.util.UrlMatcher;
  12. import com.dragonsoft.duceap.commons.util.json.JsonUtils;
  13. import com.dragonsoft.duceap.security.jwt.securityaccess.SecurityAccessTokenProperties;
  14. import com.dragonsoft.duceap.security.jwt.securityaccess.SecurityAccessUserCacheResolver;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.boot.autoconfigure.web.ServerProperties;
  18. import org.springframework.stereotype.Component;
  19. import javax.servlet.http.HttpServletRequest;
  20. /**
  21. * @author huangzqa
  22. * @date 2021/4/15
  23. **/
  24. @Slf4j
  25. @Component
  26. public class SecurityAccessTokenResolver implements ISecurityAccessTokenResolver {
  27. @Autowired
  28. private SecurityAccessTokenProperties secAccessProp;
  29. @Autowired(required = false)
  30. private SecurityAccessUserCacheResolver cacheResolver;
  31. @Autowired
  32. private IBimBusinessFacade bimBusinessFacade;
  33. @Autowired
  34. private IUserFacade userFacade;
  35. @Autowired
  36. private ServerProperties serverProperties;
  37. public static final String FILTER_URL = "/js/*|/img/*|/css/*|/api/*|/*.png|/rest/*|/webSocket/*|" +
  38. "/oauthLogin/*|/authorizationPage.html|/importAuthorizationFile.html|/license/LicenseManagerServlet|" +
  39. "/authorizationFile/";
  40. @Override
  41. public BaseSecurityUser resolve(HttpServletRequest request) {
  42. String contextPath = serverProperties.getServlet().getContextPath();
  43. String requestUri = request.getRequestURI();
  44. log.debug("Security filter origin uri:{}", requestUri);
  45. // 去除上下文
  46. requestUri = requestUri.substring(contextPath.length());
  47. log.debug("Security filter not context uri:{}", requestUri);
  48. String[] splitUrls = FILTER_URL.split("\\|");
  49. log.debug("splitUrls:{} .", JsonUtils.toJSONString(splitUrls));
  50. if (UrlMatcher.matches(requestUri, splitUrls)) {
  51. log.debug("URI:{} Not need get user info.", requestUri);
  52. return null;
  53. }
  54. String userToken = request.getHeader(secAccessProp.getUserTokenHeaderName());
  55. String appToken = request.getHeader(Constants.APP_TOKEN);
  56. log.info("userToken:{},appToken:{}", userToken, appToken);
  57. if (cacheResolver != null) {
  58. //从缓存中取
  59. SecurityUser securityUserCache = (SecurityUser) cacheResolver.getIfPresent(cacheResolver.cacheKey(userToken));
  60. if (securityUserCache != null) {
  61. log.info("Cache securityUserCache:{}", JsonUtils.toJSONString(securityUserCache));
  62. return securityUserCache;
  63. }
  64. }
  65. if (StrUtil.isBlank(userToken)) {
  66. return null;
  67. }
  68. BimUserInfoItemRespVO userInfoItemRespVO = bimBusinessFacade.getUserInfoByUserToken(userToken);
  69. String sfzh = userInfoItemRespVO.getSfzh();
  70. UserInfo userInfo = userFacade.detailBySfzh(sfzh);
  71. log.info("idcard:{}, userInfo :{}", sfzh, JsonUtils.toJSONString(userInfo));
  72. SecurityUser securityUser = new SecurityUser();
  73. securityUser.setId(userInfo.getId());
  74. securityUser.setName(userInfo.getName());
  75. securityUser.setUserName(userInfo.getIdcard());
  76. securityUser.setPoliceNo(userInfo.getPoliceNumber());
  77. securityUser.setIdcard(userInfo.getIdcard());
  78. securityUser.setSecurityOrg(userInfo.getOrgCode());
  79. securityUser.setSecurityOrgName(userInfo.getOrgName());
  80. //放入缓存
  81. if (cacheResolver != null) {
  82. cacheResolver.put(cacheResolver.cacheKey(userToken), securityUser);
  83. }
  84. log.info("return idcard:{}, securityUser :{}", sfzh, JsonUtils.toJSONString(securityUser));
  85. return securityUser;
  86. }
  87. }