From 08bae96ce03625f054f3977147a7e9861c51209d Mon Sep 17 00:00:00 2001 From: wuyouming666 <2265557248@qq.com> Date: 星期五, 28 六月 2024 08:21:52 +0800 Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes --- hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java | 80 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 80 insertions(+), 0 deletions(-) diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..1505d1b --- /dev/null +++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,80 @@ +package com.mes.common.filter; + +import com.mes.common.utils.JwtUtil; +import com.mes.common.utils.RedisUtil; +import com.mes.common.utils.UserInfoUtils; +import com.mes.userinfo.entity.LoginUser; +import com.mes.userinfo.service.SysUserService; +import io.jsonwebtoken.Claims; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +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.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author : zhoush + * @Date: 2024/4/10 9:42 + * @Description: + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { + // 姝ゅ瑙i噴涓轰粈涔堜笉鍘诲疄鐜癋ilter鎺ュ彛锛屽洜涓哄湪鏌愪簺鎯呭喌涓嬩細杩囨护涓ゆ锛屾墽琛屼袱娆ilter閲岄潰鐨勬柟娉曪紝鎵�浠ユ垜浠�夋嫨缁ф壙SpringSecurity涓殑OncePerRequestFilter + @Autowired + private RedisUtil redisUtil; + + @Resource + private SysUserService sysUserService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + //鑾峰彇token + String token = request.getHeader("token"); + if (!StringUtils.hasText(token)) { + //鏀捐 + filterChain.doFilter(request, response); + return; // 姝ゅ鍔犱笂return濂藉鏄悗闈㈢粨鏋滆繑鍥炵殑鏃跺�欏氨涓嶄細鍐嶈蛋涓�閬嶆杩囨护鍣ㄧ殑鏂规硶浜� + } + //瑙f瀽token + String userid; + try { + Claims claims = JwtUtil.getClaimByToken(token); + userid = claims.getSubject(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("token闈炴硶"); + } + //浠巖edis涓幏鍙栫敤鎴蜂俊鎭� + String redisKey = "login:" + userid; + LoginUser loginUser = redisUtil.getCacheObject(redisKey); + if (Objects.isNull(loginUser)) { + response.setHeader("token", ""); + throw new RuntimeException("鐢ㄦ埛鏈櫥褰�"); + } + //灏嗙敤鎴蜂俊鎭斁鍏ュ綋鍓嶇嚎绋� + UserInfoUtils.set(loginUser.getUser()); + //瀛樺叆SecurityContextHolder锛屼互渚涘悗闈㈢殑杩囨护鍣ㄤ娇鐢� + List<String> permissionKeyList = sysUserService.getUserAuthorityInfo(Long.parseLong(userid)); + List<GrantedAuthority> authorities = permissionKeyList.stream(). + map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(loginUser, null, authorities); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + //鏀捐 + filterChain.doFilter(request, response); + } +} \ No newline at end of file -- Gitblit v1.8.0