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/TokenFilter.java | 57 +++++++++++++++++++++++----------------------------------
1 files changed, 23 insertions(+), 34 deletions(-)
diff --git a/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java b/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
index 0688d70..642a643 100644
--- a/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
+++ b/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
@@ -1,22 +1,19 @@
package com.sandu.common.security;
-import com.sandu.common.redis.online.OnlineUser;
-import com.sandu.common.redis.online.OnlineUserService;
+import cn.hutool.core.util.StrUtil;
import com.sandu.common.security.config.SecurityProperties;
-import com.sandu.common.security.jwt.JwtTokenProvider;
-import com.sandu.common.util.SpringContextHolder;
+import com.sandu.common.security.token.TokenProvider;
+import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.util.StringUtils;
-import org.springframework.web.filter.GenericFilterBean;
+import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
@@ -26,40 +23,32 @@
* @author chenjiantian
*/
@Slf4j
-public class TokenFilter extends GenericFilterBean {
+@AllArgsConstructor
+public class TokenFilter extends OncePerRequestFilter {
- private final JwtTokenProvider tokenProvider;
-
- public TokenFilter(JwtTokenProvider tokenProvider) {
- this.tokenProvider = tokenProvider;
- }
+ private final TokenProvider tokenProvider;
+ private final SecurityProperties properties;
@Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- throws IOException, ServletException {
- HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
- String token = tokenProvider.getToken(httpServletRequest);
- SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+ String token = request.getHeader(properties.getHeader());
+ if (token != null && token.startsWith(properties.getTokenStartWith())) {
+ token = token.substring(properties.getTokenStartWith().length());
+ }
- if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) {
- Authentication authentication = tokenProvider.getAuthentication(token);
- // 鏄惁浣跨敤redis缂撳瓨鐢ㄦ埛鍔熻兘
- if (!properties.isCacheOnline()) {
+ LoginUserInfo loginUserInfo = tokenProvider.validateToken(token);
+ if (loginUserInfo != null) {
+ if (StrUtil.equals(loginUserInfo.getToken(), token)) {
+ Authentication authentication = new UsernamePasswordAuthenticationToken(
+ loginUserInfo, null,
+ loginUserInfo.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
- } else {
- OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
- OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + ((UserDetails) authentication.getPrincipal()).getUsername());
- if (onlineUser != null) {
- // 鍖归厤涓婂綋鍓嶇敤鎴风殑token鎵嶅悎娉曪紝闃叉jwt涓嶅彈鎺у埗
- if (token.equals(onlineUser.getToken())) {
- SecurityContextHolder.getContext().setAuthentication(authentication);
- }
- }
}
}
- filterChain.doFilter(servletRequest, servletResponse);
+
+ filterChain.doFilter(request, response);
}
}
--
Gitblit v1.9.3