SecurityAccessTokenResolver.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. if (UrlMatcher.matches(requestUri, splitUrls)) {
  50. log.debug("URI:{} Not need get user info.", requestUri);
  51. return null;
  52. }
  53. String userToken = request.getHeader(secAccessProp.getUserTokenHeaderName());
  54. String appToken = request.getHeader(Constants.APP_TOKEN);
  55. log.info("userToken:{},appToken:{}", userToken, appToken);
  56. if (cacheResolver != null) {
  57. //从缓存中取
  58. SecurityUser securityUserCache = (SecurityUser) cacheResolver.getIfPresent(cacheResolver.cacheKey(userToken));
  59. if (securityUserCache != null) {
  60. log.info("Cache securityUserCache:{}", JsonUtils.toJSONString(securityUserCache));
  61. return securityUserCache;
  62. }
  63. }
  64. if (StrUtil.isBlank(userToken)) {
  65. return null;
  66. }
  67. BimUserInfoItemRespVO userInfoItemRespVO = bimBusinessFacade.getUserInfoByUserToken(userToken);
  68. String sfzh = userInfoItemRespVO.getSfzh();
  69. UserInfo userInfo = userFacade.detailBySfzh(sfzh);
  70. log.info("idcard:{}, userInfo :{}", sfzh, JsonUtils.toJSONString(userInfo));
  71. SecurityUser securityUser = new SecurityUser();
  72. securityUser.setId(userInfo.getId());
  73. securityUser.setName(userInfo.getName());
  74. securityUser.setUserName(userInfo.getIdcard());
  75. securityUser.setPoliceNo(userInfo.getPoliceNumber());
  76. securityUser.setIdcard(userInfo.getIdcard());
  77. securityUser.setSecurityOrg(userInfo.getOrgCode());
  78. securityUser.setSecurityOrgName(userInfo.getOrgName());
  79. //放入缓存
  80. if (cacheResolver != null) {
  81. cacheResolver.put(cacheResolver.cacheKey(userToken), securityUser);
  82. }
  83. log.info("return idcard:{}, securityUser :{}", sfzh, JsonUtils.toJSONString(securityUser));
  84. return securityUser;
  85. }
  86. }