| 
					
				 | 
			
			
				@ -1,9 +1,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.gateway.filter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.fasterxml.jackson.databind.ObjectMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.netflix.zuul.ZuulFilter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				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.useragent.UserAgent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.ResultStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.web.Envelop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -26,6 +30,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Enumeration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Iterator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -46,6 +51,13 @@ public class BasicZuulFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private StringRedisTemplate redisTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BaseMethodLogService baseMethodLogService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BaseLoginLogService baseLoginLogService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private UserAgent userAgent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private RedisTokenStore redisTokenStore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String filterType() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -97,6 +109,7 @@ public class BasicZuulFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                || url.contains("/image/")) {//获取默认图片 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        System.out.println("进入token验证"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.authenticate(ctx, request, url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -108,7 +121,9 @@ public class BasicZuulFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private Object authenticate(RequestContext ctx, HttpServletRequest request, String path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        System.out.println("获取token"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String accessToken = this.extractToken(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        System.out.println("获取token"+accessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (null == accessToken) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this.forbidden(ctx, ResultStatus.NULL_TOKEN, "token can not be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -130,9 +145,10 @@ public class BasicZuulFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //获取所有token资源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String resourceIds[] = urls.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (String resourceId : resourceIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (resourceId.equals("/**")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                System.out.println("/**"+true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                this.checkTimeout(oAuth2AccessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (!resourceId.startsWith("/")) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -141,12 +157,34 @@ public class BasicZuulFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            path = path.toLowerCase(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (path.startsWith(resourceId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    && (path.length() == resourceId.length() || path.charAt(resourceId.length()) == '/')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                System.out.println("158"+true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                this.checkTimeout(oAuth2AccessToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String accessToken = request.getHeader(ACCESS_TOKEN_PARAMETER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (null == accessToken) { 
			 |