|
@@ -1,5 +1,6 @@
|
|
|
package thyyxxk.webserver.config.auth;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.auth0.jwt.JWT;
|
|
|
import com.auth0.jwt.JWTVerifier;
|
|
|
import com.auth0.jwt.algorithms.Algorithm;
|
|
@@ -13,6 +14,8 @@ import thyyxxk.webserver.config.exception.BizException;
|
|
|
import thyyxxk.webserver.config.exception.ExceptionEnum;
|
|
|
import thyyxxk.webserver.pojo.login.UserPojo;
|
|
|
import thyyxxk.webserver.service.LoginService;
|
|
|
+import thyyxxk.webserver.service.TokenService;
|
|
|
+import thyyxxk.webserver.websocket.WebSocketServer;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
@@ -22,9 +25,11 @@ import java.lang.reflect.Method;
|
|
|
@Component
|
|
|
public class AuthenticationInterceptor implements HandlerInterceptor {
|
|
|
private final LoginService userService;
|
|
|
+ private final TokenService tokenService;
|
|
|
|
|
|
- public AuthenticationInterceptor(LoginService userService) {
|
|
|
+ public AuthenticationInterceptor(LoginService userService, TokenService tokenService) {
|
|
|
this.userService = userService;
|
|
|
+ this.tokenService = tokenService;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -76,11 +81,17 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
|
|
|
try {
|
|
|
jwtVerifier.verify(token);
|
|
|
} catch (JWTVerificationException e) {
|
|
|
- log.error("验证令牌出错!");
|
|
|
- log.info("请求来源:{}", request.getRemoteAddr());
|
|
|
- log.info("请求路径: {}", request.getRequestURI());
|
|
|
- log.info("请求参数: {}", request.getQueryString());
|
|
|
- throw new BizException(ExceptionEnum.TOKEN_ERROR);
|
|
|
+ if (e.getMessage().contains("The Token has expired")) {
|
|
|
+ log.warn("【{}-{}】令牌已过期,自动刷新令牌", userPojo.getCode(), userPojo.getName());
|
|
|
+ token = tokenService.getToken(userPojo);
|
|
|
+ JSONObject message = new JSONObject();
|
|
|
+ message.put("name", "refreshToken");
|
|
|
+ message.put("token", token);
|
|
|
+ WebSocketServer.sendMessageByUserCode(userPojo.getCode(), message.toJSONString());
|
|
|
+ } else {
|
|
|
+ log.error("验证令牌出错!");
|
|
|
+ throw new BizException(ExceptionEnum.TOKEN_ERROR);
|
|
|
+ }
|
|
|
}
|
|
|
return true;
|
|
|
}
|