package com.dsh.guns.config;
|
|
import com.dsh.course.feignClient.auth.UserClient;
|
import com.dsh.course.feignClient.auth.model.RefreshTokenRequest;
|
import com.dsh.course.feignClient.auth.model.TokenResponse;
|
import com.dsh.guns.modular.system.util.JWTTokenUtils;
|
import com.dsh.guns.modular.system.util.TokenException;
|
import com.dsh.guns.modular.system.warpper.ParseToken;
|
import org.springframework.core.annotation.Order;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import javax.servlet.*;
|
import javax.servlet.annotation.WebFilter;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpSession;
|
import java.io.IOException;
|
|
/**
|
* 权限拦截器
|
*/
|
@Order(1)
|
@Component
|
@WebFilter()
|
public class AuthFilter implements Filter {
|
|
@Resource
|
private UserClient userClient;
|
|
private String[] resource = new String[]{"html", "js", "css","icon","ico","png","img","jpeg","jpg", "gif"};
|
|
private String[] releaseApi = new String[]{"/login", "/logout","/systemNotice/querySystemNoticeList","/systemNotice/queryNoReadNoticeNum"
|
,"/api/hotAddress/queryHotAddress"};
|
|
|
|
@Override
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
|
HttpServletRequest request = (HttpServletRequest) servletRequest;
|
HttpServletResponse response = (HttpServletResponse) servletResponse;
|
HttpSession session = request.getSession();
|
Object token = session.getAttribute("token");
|
String uri = request.getRequestURI().split("\\?")[0];
|
if(uri.lastIndexOf(".") > 0){
|
String substring = uri.substring(uri.lastIndexOf(".") + 1);
|
for (String s : resource) {
|
if (substring.contains(s)) {
|
filterChain.doFilter(request, response);
|
return;
|
}
|
}
|
}
|
for (String s : releaseApi) {
|
if (uri.contains(s)) {
|
filterChain.doFilter(request, response);
|
return;
|
}
|
}
|
if(null == token){//需要重新登录(跳转登录页) Authentication is required for continued access. Please proceed to the login page to authenticate.
|
response.sendRedirect(request.getContextPath() + "/login");
|
return;
|
}
|
TokenResponse tokenResponse = (TokenResponse) token;
|
try {
|
ParseToken parseToken = JWTTokenUtils.parseToken(tokenResponse.getToken());
|
} catch (TokenException e) {
|
if(e.getCode() == 10003){
|
RefreshTokenRequest refreshTokenRequest = new RefreshTokenRequest();
|
refreshTokenRequest.setToken(tokenResponse.getToken());
|
refreshTokenRequest.setRefresh_token(tokenResponse.getRefresh_token());
|
TokenResponse tokenResponse1 = userClient.refreshToken(refreshTokenRequest);
|
if(null == tokenResponse1){//需要重新登录(跳转登录页) Authentication is required for continued access. Please proceed to the login page to authenticate.
|
response.sendRedirect(request.getContextPath() + "/logout");
|
return;
|
}else{
|
session.setAttribute("token", tokenResponse1);
|
}
|
}else{
|
response.sendRedirect(request.getContextPath() + "/logout");
|
return;
|
}
|
}
|
filterChain.doFilter(request, response);
|
}
|
|
@Override
|
public void destroy() {
|
|
}
|
}
|