mitao
2025-01-17 afa0dbb4f54e7244835dd67ec33c3e545f122f71
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -1,5 +1,14 @@
package com.ruoyi.gateway.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.constant.SecurityConstants;
@@ -10,15 +19,6 @@
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties;
import io.jsonwebtoken.Claims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
@@ -46,29 +46,38 @@
    {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpRequest.Builder mutate = request.mutate();
        String url = request.getURI().getPath();
        log.info("requestUrl---"+url);
        String token = getToken(request);
        Claims claims = null;
        String userid = null;
        if(StringUtils.isNotBlank(token)){
            claims = JwtUtils.parseToken(token);
            if(claims!=null){
                userid = JwtUtils.getUserId(claims);
                addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
            }
        }
        // 跳过不需要验证的路径
        if (StringUtils.matches(url, ignoreWhite.getWhites()))
        {
            //附近商户获取
            if(url.contains("getNearbyShop")||url.contains("pageRecommendGoods")||url.contains("pageActivityGoods")||url.contains("getGoodsInfo")||url.contains("getShopInfo")||url.contains("pageAppActivityGoods")){
                String token = getToken(request);
                if(!StringUtils.isEmpty(token)){
                    Claims claims = JwtUtils.parseToken(token);
                    if(claims!=null){
                        String userid = JwtUtils.getUserId(claims);
                        String userkey = JwtUtils.getUserKey(claims);
                        String username = JwtUtils.getUserName(claims);
                        if(!StringUtils.isEmpty(userid)){
                            addHeader(mutate, SecurityConstants.USER_KEY, userkey);
                            addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
                            addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
                        }
                    }
                }
            }
            return chain.filter(exchange);
        }
        String token = getToken(request);
        log.info("requestToken---"+token);
        if (StringUtils.isEmpty(token))
        {
            return unauthorizedResponse(exchange, "需要先登录才能使用该功能");
        }
        Claims claims = JwtUtils.parseToken(token);
        if (claims == null)
        {
            return unauthorizedResponse(exchange, "需要先登录才能使用该功能!");
@@ -79,11 +88,13 @@
        {
            return unauthorizedResponse(exchange, "登录状态已过期");
        }
        String userid = JwtUtils.getUserId(claims);
        String username = JwtUtils.getUserName(claims);
        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
        {
            return unauthorizedResponse(exchange, "登录验证失败");
        }
        // 设置用户信息到请求
        addHeader(mutate, SecurityConstants.USER_KEY, userkey);
        addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);