|
@ -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) {
|