| | |
| | | // 通过服务注册中心获取网关的端口号 |
| | | @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; |
| | |
| | | |
| | | /** |
| | | * 免密登录,改变当前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); |
| | | String authToken = bladeRedis.get(PWD_FREE_LOGIN_TOKEN+ipAddr+":"+userName); |
| | | BladeUser user = null; |
| | | //不存在就请求 |
| | | if(Func.isEmpty(authToken)){ |
| | |
| | | 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"); |
| | |
| | | // 拼接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); |
| | | } |
| | | // 解析token存放进attr中 |
| | | String token2 = JwtUtil.getToken(authToken); |