123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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.auth.sub.dto.AuthUserContactDTO;
- import com.dragoninfo.dcuc.auth.sub.facade.IAuthUserInfoFacade;
- import com.dragoninfo.dcuc.authweb.util.HeadTokenUtils;
- import com.dragoninfo.dcuc.common.enums.UserExtInfoEnum;
- 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.commons.util.string.StringUtils;
- import com.dragonsoft.duceap.security.jwt.SecurityUserCacheResolver;
- import com.dragonsoft.duceap.security.jwt.securityaccess.SecurityAccessTokenProperties;
- 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;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @author huangzqa
- * @date 2021/4/15
- **/
- @Slf4j
- @Component
- public class SecurityAccessTokenResolver implements ISecurityAccessTokenResolver {
- @Autowired
- private SecurityAccessTokenProperties secAccessProp;
- @Autowired(required = false)
- private SecurityUserCacheResolver cacheResolver;
- @Autowired
- private IBimBusinessFacade bimBusinessFacade;
- @Autowired
- private IAuthUserInfoFacade authUserInfoFacade;
- @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 = HeadTokenUtils.getUserToken(request);
- String appToken = HeadTokenUtils.getAppToken(request);
- log.info("用户令牌id:{} , 应用令牌id:{}", userToken, appToken);
- if (StrUtil.isBlank(userToken)) {
- log.error("用户令牌为空");
- return null;
- }
- if (cacheResolver != null) {
- //从缓存中取
- SecurityUser securityUserCache = cacheResolver.getIfPresent(userToken);
- if (securityUserCache != null) {
- log.info("Cache securityUserCache:{}", JsonUtils.toJSONString(securityUserCache));
- return securityUserCache;
- }
- }
- BimUserInfoItemRespVO userInfoItemRespVO = bimBusinessFacade.getUserInfoByUserToken(userToken);
- String sfzh = userInfoItemRespVO.getSfzh();
- log.info("认证结果返回人员身份证号:{}, ", sfzh);
- AuthUserContactDTO userInfo = authUserInfoFacade.getUserWithContactByIdcard(sfzh);
- SecurityUser securityUser = new SecurityUser();
- securityUser.setId(userInfo.getId());
- securityUser.setCode(userInfo.getPoliceNumber());
- securityUser.setUserName(userInfo.getIdcard());
- securityUser.setIdcard(userInfo.getIdcard());
- securityUser.setName(userInfo.getName());
- securityUser.setPoliceNo(userInfo.getPoliceNumber());
- securityUser.setSecurityOrg(userInfo.getOrgCode());
- securityUser.setSecurityOrgName(userInfo.getOrgName());
- securityUser.setManType(userInfo.getManType());
- securityUser.setSex(userInfo.getSex());
- securityUser.setTelephone(userInfo.getPhone());
- securityUser.setManId(userInfo.getId());
- securityUser.setDeptId(userInfo.getOrgId());
- securityUser.setMobile(StringUtils.isBlank(userInfo.getMobileWork()) ? userInfo.getMobilePrivate() : userInfo.getMobileWork());
- securityUser.setEmail(userInfo.getEmail());
- securityUser.setQq(userInfo.getQqAccount());
- securityUser.setWechat(userInfo.getWxAccount());
- securityUser.setUserType(userInfo.getUserType());
- securityUser.setSecurityOrgs(new String[]{userInfo.getOrgCode()});
- // 设置令牌扩展信息
- Map<String, Object> map = new HashMap<>(UserExtInfoEnum.values().length);
- map.put(UserExtInfoEnum.USER_TOKEN_ID.getValue(), userToken);
- map.put(UserExtInfoEnum.APP_TOKEN_ID.getValue(), appToken);
- securityUser.setExtendtions(map);
- log.info("人员身份证号:{}, 人员信息:{}", sfzh, JsonUtils.toJSONString(userInfo));
- //放入缓存
- if (cacheResolver != null) {
- cacheResolver.put(userToken, securityUser);
- }
- log.info("返回人员身份证号:{}, 登录人员信息:{}", sfzh, JsonUtils.toJSONString(securityUser));
- return securityUser;
- }
- }
|