From edfa49f201d3fc8fc6b51b700e91f80246660855 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 13 二月 2024 20:29:14 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java |  226 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 114 insertions(+), 112 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java
index 3673b38..91b8954 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java
@@ -1,112 +1,114 @@
-//package com.zy.asrs.wcs.common.security;
-//
-//import com.core.common.Cools;
-//import com.zy.acs.manager.common.config.ConfigProperties;
-//import com.zy.acs.manager.common.constant.Constants;
-//import com.zy.acs.manager.common.utils.CommonUtil;
-//import com.zy.acs.manager.common.utils.JwtUtil;
-//import com.zy.acs.manager.system.entity.LoginRecord;
-//import com.zy.acs.manager.system.entity.Menu;
-//import com.zy.acs.manager.system.entity.User;
-//import com.zy.acs.manager.system.service.LoginRecordService;
-//import com.zy.acs.manager.system.service.UserService;
-//import io.jsonwebtoken.Claims;
-//import io.jsonwebtoken.ExpiredJwtException;
-//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-//import org.springframework.security.core.context.SecurityContextHolder;
-//import org.springframework.security.core.userdetails.UsernameNotFoundException;
-//import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.filter.OncePerRequestFilter;
-//
-//import javax.annotation.Resource;
-//import javax.servlet.FilterChain;
-//import javax.servlet.ServletException;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.ArrayList;
-//import java.util.Date;
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-///**
-// * 澶勭悊鎼哄甫token鐨勮姹傝繃婊ゅ櫒
-// *
-// */
-//@Component
-//public class JwtAuthenticationFilter extends OncePerRequestFilter {
-//
-//    public static final ArrayList<String> WHITE_KEY = new ArrayList<String>(){
-//        private static final long serialVersionUID = 1L;
-//        {
-//            add("xltys1995");
-//        }
-//    };
-//
-//    @Resource
-//    private ConfigProperties configProperties;
-//    @Resource
-//    private UserService userService;
-//    @Resource
-//    private LoginRecordService loginRecordService;
-//
-//    @Override
-//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
-//        String access_token = JwtUtil.getAccessToken(request);
-//        for (String filterPath : SecurityConfig.FILTER_PATH) {
-//            AntPathRequestMatcher antPathMatcher = new AntPathRequestMatcher(filterPath);
-//            if (antPathMatcher.matches(request)) {
-//                access_token = "";
-//            }
-//        }
-//        if (!Cools.isEmpty(access_token)) {
-//            try {
-//                User user;
-//                if (WHITE_KEY.contains(access_token)) {
-//                    user = userService.getByUsername("openapi", 2);
-//                    if (user == null) {
-//                        throw new UsernameNotFoundException("Username not found");
-//                    }
-//                    List<Menu> authorities = user.getAuthorities().stream()
-//                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
-//                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
-//                            user, null, authorities);
-//                    SecurityContextHolder.getContext().setAuthentication(authentication);
-//                } else {
-//                    // 瑙f瀽token
-//                    Claims claims = JwtUtil.parseToken(access_token, configProperties.getTokenKey());
-//                    JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims);
-//                    user = userService.getByUsername(jwtSubject.getUsername(), jwtSubject.getTenantId());
-//                    if (user == null) {
-//                        throw new UsernameNotFoundException("Username not found");
-//                    }
-//                    List<Menu> authorities = user.getAuthorities().stream()
-//                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
-//                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
-//                            user, null, authorities);
-//                    SecurityContextHolder.getContext().setAuthentication(authentication);
-//                    // token灏嗚杩囨湡绛惧彂鏂皌oken, 闃叉绐佺劧閫�鍑虹櫥褰�
-//                    long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60;
-//                    if (expiration < configProperties.getTokenRefreshTime()) {
-//                        String token = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(),
-//                                configProperties.getTokenKey());
-//                        response.addHeader(Constants.TOKEN_HEADER_NAME, token);
-//                        loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_REFRESH, null,
-//                                user.getTenantId(), request);
-//                    }
-//                }
-//            } catch (ExpiredJwtException e) {
-//                CommonUtil.responseError(response, Constants.TOKEN_EXPIRED_CODE, Constants.TOKEN_EXPIRED_MSG,
-//                        e.getMessage());
-//                return;
-//            } catch (Exception e) {
-//                CommonUtil.responseError(response, Constants.BAD_CREDENTIALS_CODE, Constants.BAD_CREDENTIALS_MSG,
-//                        e.toString());
-//                return;
-//            }
-//        }
-//        chain.doFilter(request, response);
-//    }
-//
-//}
+package com.zy.asrs.wcs.common.security;
+
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.wcs.common.config.ConfigProperties;
+import com.zy.asrs.wcs.common.constant.Constants;
+import com.zy.asrs.wcs.sys.entity.Menu;
+import com.zy.asrs.wcs.sys.entity.User;
+import com.zy.asrs.wcs.sys.entity.UserLogin;
+import com.zy.asrs.wcs.sys.service.UserLoginService;
+import com.zy.asrs.wcs.sys.service.UserService;
+import com.zy.asrs.wcs.utils.HttpUtils;
+import com.zy.asrs.wcs.utils.JwtUtil;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.ExpiredJwtException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.annotation.Resource;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 澶勭悊鎼哄甫token鐨勮姹傝繃婊ゅ櫒
+ *
+ */
+@Component
+public class JwtAuthenticationFilter extends OncePerRequestFilter {
+
+    public static final ArrayList<String> WHITE_LIST = new ArrayList<String>(){
+        private static final long serialVersionUID = 1L;
+        {
+            add("xltys1995");
+        }
+    };
+
+    @Resource
+    private ConfigProperties configProperties;
+    @Resource
+    private UserService userService;
+    @Resource
+    private UserLoginService userLoginService;
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
+        String access_token = JwtUtil.getAccessToken(request);
+        for (String filterPath : SecurityConfig.FILTER_PATH) {
+            AntPathRequestMatcher antPathMatcher = new AntPathRequestMatcher(filterPath);
+            if (antPathMatcher.matches(request)) {
+                access_token = "";
+            }
+        }
+        if (!Cools.isEmpty(access_token)) {
+            try {
+                User user;
+                // 鐧藉悕鍗�
+                if (WHITE_LIST.contains(access_token)) {
+                    user = userService.getByUsername("root", 1L);
+                    if (user == null) {
+                        throw new UsernameNotFoundException("Username not found");
+                    }
+                    List<Menu> authorities = user.getAuthorities().stream()
+                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
+                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
+                            user, null, authorities);
+                    SecurityContextHolder.getContext().setAuthentication(authentication);
+                } else {
+                    // 瑙f瀽token
+                    Claims claims = JwtUtil.parseToken(access_token, configProperties.getTokenKey());
+                    JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims);
+                    user = userService.getByUsername(jwtSubject.getUsername(), jwtSubject.getHostId());
+                    if (user == null) {
+                        throw new UsernameNotFoundException("Username not found");
+                    }
+                    List<Menu> authorities = user.getAuthorities().stream()
+                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
+                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
+                            user, null, authorities);
+                    SecurityContextHolder.getContext().setAuthentication(authentication);
+                    // token灏嗚杩囨湡绛惧彂鏂皌oken, 闃叉绐佺劧閫�鍑虹櫥褰�
+                    long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60;
+                    if (expiration < configProperties.getTokenRefreshTime()) {
+                        String token = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(),
+                                configProperties.getTokenKey());
+                        response.addHeader(Constants.TOKEN_HEADER_NAME, token);
+                        userLoginService.saveAsync(user.getId(), UserLogin.TYPE_REFRESH, null, user.getHostId(), request);
+                    }
+                }
+            } catch (ExpiredJwtException e) {
+                e.printStackTrace();
+                HttpUtils.responseError(response, Constants.TOKEN_EXPIRED_CODE, Constants.TOKEN_EXPIRED_MSG,
+                        e.getMessage());
+                return;
+            } catch (Exception e) {
+                e.printStackTrace();
+                HttpUtils.responseError(response, Constants.BAD_CREDENTIALS_CODE, Constants.BAD_CREDENTIALS_MSG,
+                        e.toString());
+                return;
+            }
+        }
+        chain.doFilter(request, response);
+    }
+
+}

--
Gitblit v1.9.1