xiejun
2023-09-18 7db3ee6e84714a868e0b57a61a033d050b1a61fc
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
@@ -11,6 +11,7 @@
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.ObjectUtil;
@@ -44,10 +45,15 @@
   // 通过服务注册中心获取网关的端口号
   @Autowired
   private DiscoveryClient discoveryClient;
   @Value("${user-info.pwd-free-tenant-id}")
   // 配置的免密登录的账号所属的租户id
   @Value("${password-free.pwd-free-tenant-id}")
   // 配置的token在redis中的生存时间
   private String pwdFreeTenantId;
   @Value("${password-free.token-redis-expire}")
   private Long tokenRedisExpire;
   @Autowired
   private BladeRedis bladeRedis;
   // 缓存名
   public static final String PWD_FREE_LOGIN_TOKEN = "pwdFreeLogin:Token:";
   private static JwtProperties jwtProperties;
@@ -68,20 +74,22 @@
   /**
    * 免密登录,改变当前webservice请求的header
    * @param username 账号
    * @param userName 账号
    * @return
    */
   @Override
   public boolean passwordFreeLogin(String username, ServletRequest servletRequest) throws AuthenticationException {
   public boolean passwordFreeLogin(String userName, ServletRequest servletRequest) throws AuthenticationException {
      //进来先判断缓存中是否存在token
      // 请求来自己哪个ip地址
      HttpServletRequest request = (HttpServletRequest) servletRequest;
      String ipAddr = request.getRemoteAddr();
      // 先尝试从缓存当中取,存在就直接从缓存中获取
      String authToken = bladeRedis.get(PWD_FREE_LOGIN_TOKEN+ipAddr);
      BladeUser user = null;
      String authToken = bladeRedis.get(PWD_FREE_LOGIN_TOKEN+ipAddr+":"+userName);
      // 解析token存放进attr中
      String token2 = JwtUtil.getToken(authToken);
      BladeUser user = this.getUser(token2);
      //不存在就请求
      if(Func.isEmpty(authToken)){
      if(Func.isEmpty(authToken) || Func.isEmpty(user)){
         // 免密登录接口地址
         String loginUrl = "http://localhost:"+this.getGatewayPort("ubcs-gateway")+"/ubcs-auth/oauth/token";
         // 请求ubcs-auth服务获取token,先设置请求头
@@ -91,7 +99,7 @@
         headers.set("Tenant-Id", pwdFreeTenantId);
         //设置请求体参数
         MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>();
         parameters.add("username",username);
         parameters.add("username",userName);
         parameters.add("grant_type", "passwordfree");
         parameters.add("scope", "all");
         parameters.add("type", "account");
@@ -112,11 +120,11 @@
         // 拼接token格式
         authToken = "bearer " + tokenUserObject.getAccess_token();
         // 将token存入缓存当中,过期时间为24小时
         bladeRedis.setEx(PWD_FREE_LOGIN_TOKEN+ipAddr,"bearer "+tokenUserObject.getAccess_token(),60*60*60*24L);
         bladeRedis.setEx(PWD_FREE_LOGIN_TOKEN+ipAddr+":"+userName,"bearer "+tokenUserObject.getAccess_token(),tokenRedisExpire);
         token2 = JwtUtil.getToken(authToken);
         user = this.getUser(token2);
      }
      // 解析token存放进attr中
      String token2 = JwtUtil.getToken(authToken);
      user = this.getUser(token2);
      //request.setAttribute("Blade-Auth",token);
      request.setAttribute("_BLADE_USER_REQUEST_ATTR_",user);
      return true;
@@ -181,11 +189,9 @@
      if (StringUtil.isNotBlank(authToken)) {
         token = JwtUtil.getToken(authToken);
      }
      if (StringUtil.isNotBlank(token)) {
         claims = parseJWT(token);
      }
      if (ObjectUtil.isNotEmpty(claims) && getJwtProperties().getState()) {
         tenantId = Func.toStr(claims.get("tenant_id"));
         String userId = Func.toStr(claims.get("user_id"));