From a2f23bc97d133bcf7b950cd269eda577be4c0cac Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期一, 17 一月 2022 17:57:44 +0800
Subject: [PATCH] token优化
---
sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java | 130 ++++++++++++++++++++++++------------------
1 files changed, 74 insertions(+), 56 deletions(-)
diff --git a/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java b/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
index 9068f02..7c57d07 100644
--- a/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
+++ b/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
@@ -1,20 +1,17 @@
package com.sandu.common.security;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.sandu.common.enums.ResponseStatusEnums;
-import com.sandu.common.redis.online.OnlineUser;
-import com.sandu.common.redis.online.OnlineUserService;
import com.sandu.common.security.config.SecurityProperties;
-import com.sandu.common.security.jwt.JwtTokenProvider;
+import com.sandu.common.security.token.TokenProvider;
import com.sandu.common.util.ResponseUtil;
-import com.sandu.common.util.SpringContextHolder;
-import io.jsonwebtoken.ExpiredJwtException;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -25,70 +22,91 @@
@Component
public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
- @Autowired
- private JwtTokenProvider tokenProvider;
+ @Resource
+ private TokenProvider tokenProvider;
+ @Resource
+ private SecurityProperties properties;
@Override
public void commence(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
- String token = tokenProvider.getToken(request);
- SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+ String token = request.getHeader(properties.getHeader());
if (!StringUtils.hasText(token)) {
+ writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_NONE.getCode(), ResponseStatusEnums.TOKEN_NONE.getMessage()));
+ return;
+ }
+
+ LoginUserInfo loginUserInfo = tokenProvider.validateToken(token);
+
+ if (loginUserInfo == null) {
writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
return;
}
-
- Throwable exception = tokenProvider.getException(token);
-
- // jwt杩囨湡 鏇挎崲鏂扮殑jwt
- if (exception instanceof ExpiredJwtException) {
- String usernameForce = tokenProvider.getSubjectForce(token);
- if (properties.isCacheOnline()) {
- OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
- OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
- if (onlineUser == null || !token.equals(onlineUser.getToken())) {
- // redis涓婃病鏈� 鎴栬�呬笉鏄綋鍓嶇敤鎴风殑token 杩斿洖澶辨晥
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
- } else {
- // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
- String refreshToken = tokenProvider.refreshToken(token);
- onlineUser.setToken(refreshToken);
- onlineUserService.updateOne(onlineUser);
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), properties.getTokenStartWith() + refreshToken));
- }
- } else {
- // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
- String refreshToken = properties.getTokenStartWith() + tokenProvider.refreshToken(token);
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), null));
- }
- return;
+ if (!StrUtil.equals(loginUserInfo.getToken(), token)) {
+ writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
}
- // 鍏朵粬jwt瑙f瀽寮傚父
- if (exception != null) {
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
- } else {
- //jwt瑙f瀽姝e父 鐪嬬湅鏄笉鏄痳edis鐨勯棶棰�
- if (properties.isCacheOnline()) {
- String usernameForce = tokenProvider.getSubjectForce(token);
- OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
- OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
- if (onlineUser != null && !token.equals(onlineUser.getToken())) {
- // 鍜屾湇鍔″櫒淇濆瓨鐨則oken涓嶄竴鏍凤紝璇存槑鍦ㄥ叾浠栧湴鏂圭櫥褰�
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
- } else {
- // 鏈嶅姟鍣ㄦ病鏈夊湪绾跨敤鎴穞oken鎴栬�卼oken涓嶄竴鑷� 閮借繑鍥瀟oken澶辨晥
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
- }
- } else {
- writeResponse(response, ResponseUtil.error(ResponseStatusEnums.FAIL.getCode(), "璁よ瘉鍑洪敊"));
- }
- }
- return;
+
+// String token = tokenProvider.getToken(request);
+// SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+//
+// if (!StringUtils.hasText(token)) {
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+// return;
+// }
+//
+//
+// Throwable exception = tokenProvider.getException(token);
+//
+// // jwt杩囨湡 鏇挎崲鏂扮殑jwt
+// if (exception instanceof ExpiredJwtException) {
+// String usernameForce = tokenProvider.getSubjectForce(token);
+// if (properties.isCacheOnline()) {
+// OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
+// OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
+// if (onlineUser == null || !token.equals(onlineUser.getToken())) {
+// // redis涓婃病鏈� 鎴栬�呬笉鏄綋鍓嶇敤鎴风殑token 杩斿洖澶辨晥
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+// } else {
+// // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
+// String refreshToken = tokenProvider.refreshToken(token);
+// onlineUser.setToken(refreshToken);
+// onlineUserService.updateOne(onlineUser);
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), properties.getTokenStartWith() + refreshToken));
+// }
+// } else {
+// // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
+// String refreshToken = properties.getTokenStartWith() + tokenProvider.refreshToken(token);
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), null));
+// }
+// return;
+// }
+//
+// // 鍏朵粬jwt瑙f瀽寮傚父
+// if (exception != null) {
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+// } else {
+// //jwt瑙f瀽姝e父 鐪嬬湅鏄笉鏄痳edis鐨勯棶棰�
+// if (properties.isCacheOnline()) {
+// String usernameForce = tokenProvider.getSubjectForce(token);
+// OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
+// OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
+// if (onlineUser != null && !token.equals(onlineUser.getToken())) {
+// // 鍜屾湇鍔″櫒淇濆瓨鐨則oken涓嶄竴鏍凤紝璇存槑鍦ㄥ叾浠栧湴鏂圭櫥褰�
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
+// } else {
+// // 鏈嶅姟鍣ㄦ病鏈夊湪绾跨敤鎴穞oken鎴栬�卼oken涓嶄竴鑷� 閮借繑鍥瀟oken澶辨晥
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+// }
+// } else {
+// writeResponse(response, ResponseUtil.error(ResponseStatusEnums.FAIL.getCode(), "璁よ瘉鍑洪敊"));
+// }
+// }
+// return;
}
--
Gitblit v1.9.3