|  | @ -1,9 +1,13 @@
 | 
												
													
														
															|  | package com.yihu.jw.gateway.filter;
 |  | package com.yihu.jw.gateway.filter;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import com.alibaba.fastjson.JSON;
 | 
												
													
														
															|  | 
 |  | import com.alibaba.fastjson.JSONObject;
 | 
												
													
														
															|  | import com.fasterxml.jackson.databind.ObjectMapper;
 |  | import com.fasterxml.jackson.databind.ObjectMapper;
 | 
												
													
														
															|  | import com.netflix.zuul.ZuulFilter;
 |  | import com.netflix.zuul.ZuulFilter;
 | 
												
													
														
															|  | import com.netflix.zuul.context.RequestContext;
 |  | import com.netflix.zuul.context.RequestContext;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.gateway.methlog.BaseLoginLogService;
 | 
												
													
														
															|  | import com.yihu.jw.gateway.methlog.BaseMethodLogService;
 |  | import com.yihu.jw.gateway.methlog.BaseMethodLogService;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.gateway.useragent.UserAgent;
 | 
												
													
														
															|  | import com.yihu.jw.restmodel.ResultStatus;
 |  | import com.yihu.jw.restmodel.ResultStatus;
 | 
												
													
														
															|  | import com.yihu.jw.restmodel.web.Envelop;
 |  | import com.yihu.jw.restmodel.web.Envelop;
 | 
												
													
														
															|  | import org.slf4j.Logger;
 |  | import org.slf4j.Logger;
 | 
												
											
												
													
														
															|  | @ -26,6 +30,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | import javax.servlet.http.HttpServletRequest;
 |  | import javax.servlet.http.HttpServletRequest;
 | 
												
													
														
															|  | import java.io.IOException;
 |  | import java.io.IOException;
 | 
												
													
														
															|  | 
 |  | import java.util.Arrays;
 | 
												
													
														
															|  | import java.util.Enumeration;
 |  | import java.util.Enumeration;
 | 
												
													
														
															|  | import java.util.Iterator;
 |  | import java.util.Iterator;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
											
												
													
														
															|  | @ -46,6 +51,13 @@ public class BasicZuulFilter extends ZuulFilter {
 | 
												
													
														
															|  |     private StringRedisTemplate redisTemplate;
 |  |     private StringRedisTemplate redisTemplate;
 | 
												
													
														
															|  |     @Autowired
 |  |     @Autowired
 | 
												
													
														
															|  |     private BaseMethodLogService baseMethodLogService;
 |  |     private BaseMethodLogService baseMethodLogService;
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private BaseLoginLogService baseLoginLogService;
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private UserAgent userAgent;
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private RedisTokenStore redisTokenStore;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     @Override
 |  |     @Override
 | 
												
													
														
															|  |     public String filterType() {
 |  |     public String filterType() {
 | 
												
											
												
													
														
															|  | @ -97,6 +109,7 @@ public class BasicZuulFilter extends ZuulFilter {
 | 
												
													
														
															|  |                 || url.contains("/image/")) {//获取默认图片
 |  |                 || url.contains("/image/")) {//获取默认图片
 | 
												
													
														
															|  |             return true;
 |  |             return true;
 | 
												
													
														
															|  |         }
 |  |         }
 | 
												
													
														
															|  | 
 |  |         System.out.println("进入token验证");
 | 
												
													
														
															|  |         return this.authenticate(ctx, request, url);
 |  |         return this.authenticate(ctx, request, url);
 | 
												
													
														
															|  |     }
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
											
												
													
														
															|  | @ -108,7 +121,9 @@ public class BasicZuulFilter extends ZuulFilter {
 | 
												
													
														
															|  |      * @return
 |  |      * @return
 | 
												
													
														
															|  |      */
 |  |      */
 | 
												
													
														
															|  |     private Object authenticate(RequestContext ctx, HttpServletRequest request, String path) {
 |  |     private Object authenticate(RequestContext ctx, HttpServletRequest request, String path) {
 | 
												
													
														
															|  | 
 |  |         System.out.println("获取token");
 | 
												
													
														
															|  |         String accessToken = this.extractToken(request);
 |  |         String accessToken = this.extractToken(request);
 | 
												
													
														
															|  | 
 |  |         System.out.println("获取token"+accessToken);
 | 
												
													
														
															|  |         if (null == accessToken) {
 |  |         if (null == accessToken) {
 | 
												
													
														
															|  |             return this.forbidden(ctx, ResultStatus.NULL_TOKEN, "token can not be null");
 |  |             return this.forbidden(ctx, ResultStatus.NULL_TOKEN, "token can not be null");
 | 
												
													
														
															|  |         }
 |  |         }
 | 
												
											
												
													
														
															|  | @ -130,9 +145,10 @@ public class BasicZuulFilter extends ZuulFilter {
 | 
												
													
														
															|  |         }
 |  |         }
 | 
												
													
														
															|  |         //获取所有token资源
 |  |         //获取所有token资源
 | 
												
													
														
															|  |         String resourceIds[] = urls.split(",");
 |  |         String resourceIds[] = urls.split(",");
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |         for (String resourceId : resourceIds) {
 |  |         for (String resourceId : resourceIds) {
 | 
												
													
														
															|  |             if (resourceId.equals("/**")) {
 |  |             if (resourceId.equals("/**")) {
 | 
												
													
														
															|  | 
 |  |                 System.out.println("/**"+true);
 | 
												
													
														
															|  | 
 |  |                 this.checkTimeout(oAuth2AccessToken);
 | 
												
													
														
															|  |                 return true;
 |  |                 return true;
 | 
												
													
														
															|  |             }
 |  |             }
 | 
												
													
														
															|  |             if (!resourceId.startsWith("/")) {
 |  |             if (!resourceId.startsWith("/")) {
 | 
												
											
												
													
														
															|  | @ -141,12 +157,34 @@ public class BasicZuulFilter extends ZuulFilter {
 | 
												
													
														
															|  |             path = path.toLowerCase();
 |  |             path = path.toLowerCase();
 | 
												
													
														
															|  |             if (path.startsWith(resourceId)
 |  |             if (path.startsWith(resourceId)
 | 
												
													
														
															|  |                     && (path.length() == resourceId.length() || path.charAt(resourceId.length()) == '/')) {
 |  |                     && (path.length() == resourceId.length() || path.charAt(resourceId.length()) == '/')) {
 | 
												
													
														
															|  | 
 |  |                 System.out.println("158"+true);
 | 
												
													
														
															|  | 
 |  |                 this.checkTimeout(oAuth2AccessToken);
 | 
												
													
														
															|  |                 return true;
 |  |                 return true;
 | 
												
													
														
															|  |             }
 |  |             }
 | 
												
													
														
															|  |         }
 |  |         }
 | 
												
													
														
															|  | 
 |  |         //判断用户操作间隔
 | 
												
													
														
															|  | 
 |  |         String userId = userAgent.getUID();
 | 
												
													
														
															|  | 
 |  |         System.out.println(userId);
 | 
												
													
														
															|  | 
 |  |         Boolean checkTimeOut = baseLoginLogService.checkTime(userId);
 | 
												
													
														
															|  | 
 |  |         System.out.println("即将进入验证操作时间接口");
 | 
												
													
														
															|  | 
 |  |         if (!checkTimeOut){
 | 
												
													
														
															|  | 
 |  |             tokenStore.removeAccessToken(oAuth2AccessToken);
 | 
												
													
														
															|  | 
 |  |             return this.forbidden(ctx, ResultStatus.OPERATE_TIME, "expired token");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  |         return this.forbidden(ctx, ResultStatus.NO_PERMI, "invalid token does not contain request resource " + path);
 |  |         return this.forbidden(ctx, ResultStatus.NO_PERMI, "invalid token does not contain request resource " + path);
 | 
												
													
														
															|  |     }
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private void checkTimeout(OAuth2AccessToken oAuth2AccessToken){
 | 
												
													
														
															|  | 
 |  |         //判断用户操作间隔
 | 
												
													
														
															|  | 
 |  |         String userId = userAgent.getUID();
 | 
												
													
														
															|  | 
 |  |         System.out.println(userId);
 | 
												
													
														
															|  | 
 |  |         Boolean checkTimeOut = baseLoginLogService.checkTime(userId);
 | 
												
													
														
															|  | 
 |  |         System.out.println("即将进入验证操作时间接口");
 | 
												
													
														
															|  | 
 |  |         if (!checkTimeOut){
 | 
												
													
														
															|  | 
 |  |             tokenStore.removeAccessToken(oAuth2AccessToken);
 | 
												
													
														
															|  | 
 |  |             redisTokenStore.removeAccessToken(oAuth2AccessToken.getValue());
 | 
												
													
														
															|  | 
 |  |             redisTokenStore.removeRefreshToken(oAuth2AccessToken.getRefreshToken().getValue());
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  |     private String extractToken(HttpServletRequest request) {
 |  |     private String extractToken(HttpServletRequest request) {
 | 
												
													
														
															|  |         String accessToken = request.getHeader(ACCESS_TOKEN_PARAMETER);
 |  |         String accessToken = request.getHeader(ACCESS_TOKEN_PARAMETER);
 | 
												
													
														
															|  |         if (null == accessToken) {
 |  |         if (null == accessToken) {
 |