From c635d78b479510ebe2556a420948effcd30a0731 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 21 十二月 2024 18:40:43 +0800 Subject: [PATCH] 新建德森项目分支 --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java | 266 ++++++++++++++++++++++++++-------------------------- 1 files changed, 133 insertions(+), 133 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java index 555abff..fbdeede 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java @@ -1,133 +1,133 @@ -package com.zy.asrs.wms.common.security; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.zy.asrs.common.domain.enums.LoginSystemType; -import com.zy.asrs.framework.common.Cools; -import com.zy.asrs.wms.common.config.ConfigProperties; -import com.zy.asrs.wms.common.constant.Constants; -import com.zy.asrs.wms.system.entity.Menu; -import com.zy.asrs.wms.system.entity.Role; -import com.zy.asrs.wms.system.entity.User; -import com.zy.asrs.wms.system.entity.UserLogin; -import com.zy.asrs.wms.system.service.UserLoginService; -import com.zy.asrs.wms.system.service.UserRoleService; -import com.zy.asrs.wms.system.service.UserService; -import com.zy.asrs.wms.utils.HttpUtils; -import com.zy.asrs.wms.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; - @Resource - private UserRoleService userRoleService; - - @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"); - } - boolean root = false; - List<Role> roles = userRoleService.listByUserId(user.getId()); - for (Role role : roles) { - if (role.getId() == 1) { - root = true; - break; - } - } - UserLogin userLogin = null; - if (root) { - userLogin = userLoginService.superFindByUserId(user.getId(), String.valueOf(LoginSystemType.WMS)); - } - - List<Menu> authorities = user.getAuthorities().stream() - .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList()); - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - userLogin == null ? user : userLogin, 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(), token, UserLogin.TYPE_REFRESH, user.getHostId(), null, 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); - } - -} +package com.zy.asrs.wms.common.security; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.asrs.common.domain.enums.LoginSystemType; +import com.zy.asrs.framework.common.Cools; +import com.zy.asrs.wms.common.config.ConfigProperties; +import com.zy.asrs.wms.common.constant.Constants; +import com.zy.asrs.wms.system.entity.Menu; +import com.zy.asrs.wms.system.entity.Role; +import com.zy.asrs.wms.system.entity.User; +import com.zy.asrs.wms.system.entity.UserLogin; +import com.zy.asrs.wms.system.service.UserLoginService; +import com.zy.asrs.wms.system.service.UserRoleService; +import com.zy.asrs.wms.system.service.UserService; +import com.zy.asrs.wms.utils.HttpUtils; +import com.zy.asrs.wms.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; + @Resource + private UserRoleService userRoleService; + + @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"); + } + boolean root = false; + List<Role> roles = userRoleService.listByUserId(user.getId()); + for (Role role : roles) { + if (role.getId() == 1) { + root = true; + break; + } + } + UserLogin userLogin = null; + if (root) { + userLogin = userLoginService.superFindByUserId(user.getId(), String.valueOf(LoginSystemType.WMS)); + } + + List<Menu> authorities = user.getAuthorities().stream() + .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList()); + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + userLogin == null ? user : userLogin, 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(), token, UserLogin.TYPE_REFRESH, user.getHostId(), null, 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