首页 > 其他分享 >网关失效前端请求一直报404

网关失效前端请求一直报404

时间:2024-10-20 21:31:48浏览次数:7  
标签:网关 exchange import springframework filter token 404 org 失效

这个问题是网关什么的我都配置的对但是前端页面请求过来就直接报404

问题原因

全局过滤器的使用
全局过滤器是作用于所有路由的过滤器,无需单独配置。在Spring Cloud Gateway中,全局过滤器可以用来实现一些统一化处理的业务需求,例如权限认证、IP访问限制等。然而,如果不正确使用全局过滤器,可能会导致一些问题。
解决方法:在使用全局过滤器时,需要注意不要对网关的内部路径进行过滤限制,以免影响网关的正常工作。另外,全局过滤器的使用应该谨慎,避免对其他服务造成影响。

原本配置

package com.heima.wemedia.gateway.filter;


import com.heima.wemedia.gateway.util.AppJwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * @author L
 */
@Component
@Slf4j
public class AuthorizeFilter implements Ordered, GlobalFilter {
    private final HttpHandler httpHandler;

    public AuthorizeFilter(HttpHandler httpHandler) {
        this.httpHandler = httpHandler;
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //1.获取request和response对象
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();

        //2.判断是否是登录
        if(request.getURI().getPath().contains("/login")) {
            //放行
            return chain.filter(exchange);
        }

        //3.获取token
        String token = request.getHeaders().getFirst("token");

        //4.判断token是否存在
        if(StringUtils.isBlank(token)){
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            return response.setComplete();
        }

        //5.判断token是否有效
        try {
            Claims claimsBody = AppJwtUtil.getClaimsBody(token);
            //是否是过期
            int result = AppJwtUtil.verifyToken(claimsBody);
            if(result == 1 || result  == 2){
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                return response.setComplete();
            }
            Object userId = claimsBody.get("id");
            //存放到请求头中
            ServerHttpRequest serverHttpRequest = request.mutate().headers(h -> {
                h.add("userId", userId + "");
            }).build();
            exchange.mutate().request(serverHttpRequest);

        } catch (Exception e) {
            e.printStackTrace();
        }

        //6.放行
        return chain.filter(exchange);
    }

    /**
     * 优先级设置  值越小  优先级越高
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

更改后配置

package com.heima.wemedia.gateway.filter;


import com.heima.wemedia.gateway.util.AppJwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * @author L
 */
@Component
@Slf4j
public class AuthorizeFilter implements Ordered, GlobalFilter {
//    private final HttpHandler httpHandler;

//    public AuthorizeFilter(HttpHandler httpHandler) {
//        this.httpHandler = httpHandler;
//    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //1.获取request和response对象
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();

        //2.判断是否是登录
        if(request.getURI().getPath().contains("/login")) {
            //放行
            return chain.filter(exchange);
        }

        //3.获取token
        String token = request.getHeaders().getFirst("token");

        //4.判断token是否存在
        if(StringUtils.isBlank(token)){
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            return response.setComplete();
        }

        //5.判断token是否有效
        try {
            Claims claimsBody = AppJwtUtil.getClaimsBody(token);
            //是否是过期
            int result = AppJwtUtil.verifyToken(claimsBody);
            if(result == 1 || result  == 2){
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                return response.setComplete();
            }
            Object userId = claimsBody.get("id");
            //存放到请求头中
            ServerHttpRequest serverHttpRequest = request.mutate().headers(h -> {
                h.add("userId", userId + "");
            }).build();
            exchange.mutate().request(serverHttpRequest);

        } catch (Exception e) {
            e.printStackTrace();
        }

        //6.放行
        return chain.filter(exchange);
    }

    /**
     * 优先级设置  值越小  优先级越高
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

HttpHandler 的问题
在 Spring Cloud Gateway 中,HttpHandler 通常不需要直接传入自定义过滤器。由于你在 AuthorizeFilter 中注入了 HttpHandler,这可能导致一些冲突。可以尝试移除 HttpHandler 的注入,或者查看它是否在其他地方被不当使用。

问题成功解决

标签:网关,exchange,import,springframework,filter,token,404,org,失效
From: https://www.cnblogs.com/freps/p/18487965

相关文章

  • 【华三】VXLAN典型组网-集中式网关EVPN实验
    【华三】VXLAN典型组网-集中式网关EVPN实验EVPN在VXLAN的应用EVPN的常用路由类型VXLAN的相关术语VXLAN隧道工作模式L2Gateway:二层转发模式IPGateway:三层转发模式VXLAN集中式网关实验需求拓扑R1R2R3R4SW1SW2PC测试检查报文分析(抓R2的G0/0接口即可)查看L2VPN的Tunnel......
  • pbootcms搬家后只有首页能打开 其他页面提示404错误
    确认伪静态规则是否正确配置PBootCMS依赖于伪静态规则来实现友好的URL。搬家后,服务器环境可能发生变化,导致原有的伪静态规则失效。需要根据当前服务器的类型(如Apache、Nginx等)重新配置伪静态规则。Apache服务器配置确保.htaccess文件存在于网站根目录,并且内容正确。......
  • pbootcms网站地图sitemap.xml打不开提示404错误
    当您在使用PBootCMS时遇到 sitemap.xml 地图打不开并提示404错误,通常是因为伪静态模式未开启或伪静态规则配置不正确。以下是详细的解决步骤:一、后台开启伪静态模式登录PBootCMS后台:使用管理员账号登录PBootCMS后台。导航到全局配置:导航到“系统”>“全......
  • PBOOTCMS网站访问页面提示:您访问的页面不存在,请核对后重试!如何改成自动404跳转页面
    当用户访问PbootCMS网站时,如果请求的页面不存在,系统会显示一个错误页面,提示“您访问的页面不存在,请核对后重试!”。为了提升用户体验,可以将这个错误页面设置为1秒后自动跳转到其他页面,例如首页或指定的404页面。步骤打开错误页面模板文件:进入PbootCMS根目录,找到 core/......
  • 常见的性能效率失效模式及原因
    目录一、在所有负载水平下响应缓慢二、中高负载下反应缓慢三、随着时间的推移,响应降低四、高负载或超高负载下出错处理不充分或粗暴五、高延迟六、低吞吐量七、资源耗尽八、负载下的稳定性差九、扩展性问题在动态测试过程中可以发现许多不同的性能效率失效模式,以下......
  • INT 404: Image and Video Processing
    Lab1–INT404:ImageandVideoProcessingStartDate:2024-10-09Deadline:2023-10-2315%ofthefinalmarksLateSubmissionPolicy:5%ofthetotalmarksavailablefortheassessmentshallbedeductedfromtheassessmentmarkforeachworkingdayaf......
  • 《ESP32从0到1》收官篇:wifi版温湿度蓝牙网关
            文章内容:以“wifi版温湿度蓝牙网关”这一具体项目为载体,对《ESP32从0到1》专辑前面所有内容的整合练习。        本篇设定为VIP可见,未开通VIP的可移至如下链接,每个组件功能之前均有单独发布,且涉及到的源码也已上传,可自行下载。《ESP32从0到1》快速......
  • Steam家庭共享为何总是自动失效?Steam家庭共享失效之谜原因、排查与修复全攻略
    Steam家庭共享功能作为Steam平台的一大特色,允许家庭成员或朋友在同一家庭网络下共享游戏库,享受更多元化的游戏体验。然而,许多用户在使用该功能时常常遇到自动失效的问题,这不仅影响了游戏体验,还可能带来不必要的困扰。本文将从原因、排查与修复三个方面,为你提供一份全面的Steam......
  • 数据驱动的未来:AI智能分析网关V4车辆违停算法与智慧城市交通管理
    在现代交通管理中,车辆违停问题一直是影响城市交通秩序和安全的重要因素。AI智能分析网关V4车辆违停算法则可以更高效地管理车辆违停现象。AI车辆违停算法通常基于计算机视觉技术。首先,通过摄像头采集道路上的图像或视频信息。这些摄像头可以安装在路口、路段等关键位置,以实现对不......
  • 数据驱动的未来:AI智能分析网关V4车辆违停算法与智慧城市交通管理
    在现代交通管理中,车辆违停问题一直是影响城市交通秩序和安全的重要因素。AI智能分析网关V4车辆违停算法则可以更高效地管理车辆违停现象。AI车辆违停算法通常基于计算机视觉技术。首先,通过摄像头采集道路上的图像或视频信息。这些摄像头可以安装在路口、路段等关键位置,以实现......