From 3af20297ca45b2161bfe51cbd8fd918b293223c2 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 23 Nov 2020 14:55:55 +0800
Subject: [PATCH] 20201123
---
src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java | 43 ++++++++++++++++++++++++++++++++++++++-----
1 files changed, 38 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 68b0706..5ed6bcb 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, 3600);
} else {
log.info("token无法查询:{}", token);
SecurityContextHolder.clearContext();
@@ -79,6 +78,40 @@
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[] tokens = StrUtil.split(rsa.decryptStr(rsaToken, KeyType.PrivateKey), "_");
+
+ 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 +149,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