From 50d3d5e3e3282f757ea639f9ca1939d429c6fd5d Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Mon, 30 Nov 2020 11:02:07 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java | 44 +++++++++++++++++++++++++++++++++++++++----- 1 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java b/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java index 362eb8b..e98bac2 100644 --- a/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java +++ b/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java @@ -48,16 +48,16 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; - String token = resolveToken(request); + String token = resolveTokenOutCenter(request); if (!AppContants.TIME_OUT.equals(token)) { if (StrUtil.isNotBlank(token)) { String redisKey = ""; // 根据user-agent判断pc端还是app端 if (LoginUserUtils.isBrowser(request)) { - redisKey = AppContants.PC_LOGIN_PREFIX + token; + redisKey = token;; } else { - redisKey = AppContants.APP_LOGIN_PREFIX + token; + redisKey = token;; } String loginStr = (String) redisUtils.get(redisKey); @@ -65,7 +65,6 @@ MemberEntity loginUser = JSONObject.parseObject(loginStr, MemberEntity.class); Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser, token, new ArrayList<>()); SecurityContextHolder.getContext().setAuthentication(authentication); - redisUtils.expire(redisKey, 36000); } else { log.info("token无法查询:{}", token); SecurityContextHolder.clearContext(); @@ -79,6 +78,41 @@ SecurityContextHolder.clearContext(); } filterChain.doFilter(servletRequest, servletResponse); + } + + /** + * 解析前端传来的token,md5加密后的地址_设备iD_/api + * + * @param request + * @return + */ + private String resolveTokenOutCenter(HttpServletRequest request) { + try { + String bearerToken = request.getHeader(AppContants.TOKEN_HEADER); + //获取请求的完整路径 + StringBuffer requestURL = request.getRequestURL(); + + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(AppContants.TOKEN_START_WITH)) { + // 去掉令牌前缀 + String rsaToken = bearerToken.replace(AppContants.TOKEN_START_WITH, ""); + RSA rsa = new RSA(securityProperties.getPrivateKey(), null); + String decryptStr = rsa.decryptStr(rsaToken, KeyType.PrivateKey); + String[] tokens = StrUtil.split(decryptStr, "_"); + + if (StrUtil.isNotEmpty(requestURL) && requestURL.toString().contains(tokens[2])) { + return tokens[0]; + } else { +// log.info("前面token为{}", tokens[0]); +// log.info("时间为:{}, 当前时间为:{}", tokens[1], System.currentTimeMillis()); + return AppContants.TIME_OUT; + } + } +// log.info("bearerToken---->{}", bearerToken); + } catch (Exception e) { + log.error("#解析token异常#", e); + return null; + } + return null; } /** @@ -116,7 +150,7 @@ boolean isDebug = applicationProperties.isDebug(); if (!isDebug) { long currentTime = System.currentTimeMillis(); - return currentTime - time <= 10000; + return currentTime - time <= 30000; } return true; } -- Gitblit v1.9.1