From 966c3ba46c253f0de2e51326a9a9f9d274b28585 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 23 八月 2024 11:31:36 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 96 insertions(+), 0 deletions(-) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java new file mode 100644 index 0000000..e45e977 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/filter/AuthFilter.java @@ -0,0 +1,96 @@ +package com.ruoyi.chargingPile.filter; + +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; +import io.jsonwebtoken.Claims; +import org.apache.logging.log4j.core.config.Order; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/8/23 11:22 + */ +@Order(-200) +@Component +public class AuthFilter implements WebFilter { + private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); + + @Lazy + @Resource + private AppUserClient appUserClient; + + @Lazy + @Resource + private SysUserClient sysUserClient; + + + @Override + public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + String token = getToken(request); + Claims claims = JwtUtils.parseToken(token); + String userid = JwtUtils.getUserId(claims); + String userType = JwtUtils.getUserType(claims); + //管理后台用户 + if ("system".equals(userType)) { + SysUser sysUser = sysUserClient.getSysUser(Long.valueOf(userid)).getData(); + if(null == sysUser || "2".equals(sysUser.getDelFlag())){ + log.error("[账户异常处理]请求账户id:{}", userid); + return unauthorizedResponse(exchange,"无效的账户"); + } + if("1".equals(sysUser.getStatus())){ + log.error("[账户异常处理]请求账户id:{}", userid); + return unauthorizedResponse(exchange,"账户已被停用,请联系系统管理员!"); + } + } + //小程序用户 + if ("applet".equals(userType)) { + TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData(); + if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){ + log.error("[账户异常处理]请求账户id:{}", userid); + return unauthorizedResponse(exchange,"无效的账户"); + } + if(2 == appUser.getStatus()){ + log.error("[账户异常处理]请求账户id:{}", userid); + return unauthorizedResponse(exchange,"账户已被冻结,请联系系统管理员!"); + } + } + return chain.filter(exchange); + } + + + private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) { + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED); + } + + + + /** + * 获取请求token + */ + private String getToken(ServerHttpRequest request) { + String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) { + token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); + } + return token; + } +} -- Gitblit v1.7.1