123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package com.dragoninfo.dcuc.authweb.interceptor;
- import cn.hutool.core.util.StrUtil;
- import com.dragoninfo.dcuc.auth.auth.facade.IBimBusinessFacade;
- import com.dragoninfo.dcuc.auth.auth.vo.bim.BimUserInfoItemRespVO;
- import com.dragoninfo.dcuc.common.Constants;
- import com.dragoninfo.dcuc.user.user.entity.UserInfo;
- import com.dragoninfo.dcuc.user.user.facade.IUserFacade;
- import com.dragonsoft.duceap.base.api.security.ISecurityAccessTokenResolver;
- import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
- import com.dragonsoft.duceap.base.entity.security.SecurityUser;
- import com.dragonsoft.duceap.commons.util.UrlMatcher;
- import com.dragonsoft.duceap.commons.util.json.JsonUtils;
- import com.dragonsoft.duceap.security.jwt.securityaccess.SecurityAccessTokenProperties;
- import com.dragonsoft.duceap.security.jwt.securityaccess.SecurityAccessUserCacheResolver;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.autoconfigure.web.ServerProperties;
- import org.springframework.stereotype.Component;
- import javax.servlet.http.HttpServletRequest;
- /**
- * @author huangzqa
- * @date 2021/4/15
- **/
- @Slf4j
- @Component
- public class SecurityAccessTokenResolver implements ISecurityAccessTokenResolver {
- @Autowired
- private SecurityAccessTokenProperties secAccessProp;
- @Autowired(required = false)
- private SecurityAccessUserCacheResolver cacheResolver;
- @Autowired
- private IBimBusinessFacade bimBusinessFacade;
- @Autowired
- private IUserFacade userFacade;
- @Autowired
- private ServerProperties serverProperties;
- public static final String FILTER_URL = "/js/*|/img/*|/css/*|/api/*|/*.png|/rest/*|/webSocket/*|" +
- "/oauthLogin/*|/authorizationPage.html|/importAuthorizationFile.html|/license/LicenseManagerServlet|" +
- "/authorizationFile/";
- @Override
- public BaseSecurityUser resolve(HttpServletRequest request) {
- String contextPath = serverProperties.getServlet().getContextPath();
- String requestUri = request.getRequestURI();
- log.debug("Security filter origin uri:{}", requestUri);
- // 去除上下文
- requestUri = requestUri.substring(contextPath.length());
- log.debug("Security filter not context uri:{}", requestUri);
- String[] splitUrls = FILTER_URL.split("\\|");
- log.debug("splitUrls:{} .", JsonUtils.toJSONString(splitUrls));
- if (UrlMatcher.matches(requestUri, splitUrls)) {
- log.debug("URI:{} Not need get user info.", requestUri);
- return null;
- }
- String userToken = request.getHeader(secAccessProp.getUserTokenHeaderName());
- String appToken = request.getHeader(Constants.APP_TOKEN);
- log.info("userToken:{},appToken:{}", userToken, appToken);
- if (cacheResolver != null) {
- //从缓存中取
- SecurityUser securityUserCache = (SecurityUser) cacheResolver.getIfPresent(cacheResolver.cacheKey(userToken));
- if (securityUserCache != null) {
- log.info("Cache securityUserCache:{}", JsonUtils.toJSONString(securityUserCache));
- return securityUserCache;
- }
- }
- if (StrUtil.isBlank(userToken)) {
- return null;
- }
- BimUserInfoItemRespVO userInfoItemRespVO = bimBusinessFacade.getUserInfoByUserToken(userToken);
- String sfzh = userInfoItemRespVO.getSfzh();
- UserInfo userInfo = userFacade.detailBySfzh(sfzh);
- log.info("idcard:{}, userInfo :{}", sfzh, JsonUtils.toJSONString(userInfo));
- SecurityUser securityUser = new SecurityUser();
- securityUser.setId(userInfo.getId());
- securityUser.setName(userInfo.getName());
- securityUser.setUserName(userInfo.getIdcard());
- securityUser.setPoliceNo(userInfo.getPoliceNumber());
- securityUser.setIdcard(userInfo.getIdcard());
- securityUser.setSecurityOrg(userInfo.getOrgCode());
- securityUser.setSecurityOrgName(userInfo.getOrgName());
- //放入缓存
- if (cacheResolver != null) {
- cacheResolver.put(cacheResolver.cacheKey(userToken), securityUser);
- }
- log.info("return idcard:{}, securityUser :{}", sfzh, JsonUtils.toJSONString(securityUser));
- return securityUser;
- }
- }
|