ServerHttpRequest(ServerWebExchange)修改请求参数修改请求头

这篇具有很好参考价值的文章主要介绍了ServerHttpRequest(ServerWebExchange)修改请求参数修改请求头。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题:Gateway Security配置白名单后,客户请求白名单接口但是url上拼了不可用的token,导致报错

解决:校验是否符合白名单接口,然后将请求头的Authorization和url中的access_token移除文章来源地址https://www.toymoban.com/news/detail-512857.html

http.addFilterAt((WebFilter) (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
            String access_token = request.getQueryParams().getFirst("access_token");
            for (String ignored : permitUrlProperties.getIgnored()) {
                //匹配白名单路径
                if (pathMatcher.match(ignored, exchange.getRequest().getPath().value())) {
//如果请求白名单接口,则移除Authorization的数据
                    ServerHttpRequest authorization = exchange.getRequest().mutate().headers(httpHeaders ->
                            httpHeaders.remove("Authorization")
                    ).build();
 //移除请求头,如果不.build()则是在原request上移除
                    exchange.mutate().request(authorization);                    
//如果请求白名单接口,queryParam还传入token则移除
                    if(access_token!=null) {
                        MultiValueMap<String, String> queryParams = request.getQueryParams();
                        if(queryParams.containsKey("access_token")){
                            URI oldUri = request.getURI();
                            String oldRequestUrI = oldUri.toString();
                            String oldRequestUrl = oldRequestUrI.substring(0,oldRequestUrI.indexOf("?"));
                            StringBuffer stringBuffer = new StringBuffer(oldRequestUrl);
                            String strparam = oldRequestUrI.substring(oldRequestUrI.indexOf("?")+1);
                            String[] split = strparam.split("&");
                            for (int i = 0 ; i < split.length ; i++){
                                String ssssss = split[i];
                                if (ssssss.contains("access_token")){
                                }else {
                                    if(i == 0){
                                        stringBuffer.append("?").append(ssssss);
                                    }else {
                                        stringBuffer.append("&").append(ssssss);
                                    }
                                }
                            }
                            URI uri1 = URI.create(stringBuffer.toString());
                            ServerHttpRequest newRequest = request.mutate().uri(uri1).build();
                            ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
                            return chain.filter(newExchange);
                        }
                    }
                }
            }
            if(access_token!=null) {
                exchange.getRequest().mutate().headers(httpHeaders ->
                        httpHeaders.add(
                                "Authorization",
                                OAuth2AccessToken.BEARER_TYPE+" "+request.getQueryParams().getFirst("access_token"))
                );
            }
            return chain.filter(exchange);
        }, SecurityWebFiltersOrder.FIRST);

到了这里,关于ServerHttpRequest(ServerWebExchange)修改请求参数修改请求头的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud Gateway 网关请求中body、query、header参数的获取和修改

          最近在开发中要改造一个普通SpringBoot接口服务为SpringCloud Gateway网关服务,并且需要在网关做验签,由于我们这个服务需要对外几个第三方平台提供接口,每家请求的传参形式都不同,有将签名信息放请求头、也有将签名信息放query参数、还有直接放body中的,请求头

    2024年01月23日
    浏览(74)
  • Gateway网关拦截器的ServerWebExchange

     ServerWebExcahnge的解释如下: Contract for an HTTP request-response interaction. Provides access to the HTTP request and response and also exposes additional server-side processing related properties and features such as request attributes. 大概是说:ServerWebExchange是一个HTTP请求-响应交互的契约。提供对HTTP请求和响应的访问

    2024年04月10日
    浏览(51)
  • ServerHttpRequest 和 HttpServletRequest区别以及获取IP

    1区别 根据Spring Docs: ServerHttpRequest 接口实现基于 HttpServletRequest 接口。 一个名为 ServletServerHttpRequest 的类实现了 ServerHttpRequest 接口,它还有公共方法 getServletRequest() 来获取实际的 HttpServletRequest 在使用springboot的websocket时,我们需要获取url中的参数往往需要装换: 在网关接口中

    2024年02月12日
    浏览(42)
  • axios同时使用查询参数(query)和请求体参数(body)发送请求

    当使用 axios.post 方法发送请求时,可以同时添加查询参数(query)和请求体参数(body)。具体的方法是将查询参数添加到URL中,并将请求体参数作为 data 属性传递给 axios.post 方法。 代码演示: 下面是一个示例,演示了如何将查询参数和请求体参数同时传递给 axios.post 方法:

    2024年03月11日
    浏览(56)
  • 使用HttpURLConnection发送POST请求并携带请求参数

    这里的param是请求参数,需要将其转换为字节数组后写入输出流。 这里的response是响应数据,需要将其读取为字符串后使用。 完整的示例代码如下所示: 需要注意的是,以上示例代码中的请求参数是以字符串形式传递的,如果需要传递复杂的请求参数,可以考虑使用JSON等格

    2024年02月04日
    浏览(57)
  • 【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题

    这个情况出现在,我需要进行验证码的校验,因此用户的请求首先需要被验证码过滤器校验,而验证码过滤器不需要设定为全局过滤器,因此我就单纯的把它设定为了一个局部过滤器,代码如下 然后我进行请求的时候,json参数如下 然后请求经过解析后会发现,字符串居然是

    2024年02月09日
    浏览(53)
  • SpringBoot——请求-Postman工具-6种常见请求参数接收

    前后端分离开发的情况下每开发一个功能都要对接口进行测试,通常都会去浏览器访问测试,但是这样子都是get请求,测试不了post请求。 postman可以模拟浏览器发起任何形式的http请求 ,下载完postman后登陆进去 创建一个workspace   这部分在Javaweb——Request通用方式获取请求参数

    2024年02月02日
    浏览(42)
  • Java 发送Http请求携带中文参数时 请求报400的错误请求

    在 Java 中,URL 中不能直接包含中文字符,因为 URL 规范要求 URL 必须是 ASCII 字符。如果需要在 URL 中传递中文参数,需要对中文参数进行 URL 编码,将其转换为浏览器中的参数形式。可以使用 java.net.URLEncoder 类来进行 URL 编码。

    2024年02月11日
    浏览(42)
  • 【Spring MVC学习】连接 && 接收请求参数 && 响应返回参数

    目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、@RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、@ResponseBody注解:表示返回的是数据 🌷 3、组合注解@RestController = @ResponseBody + @Controller 🌷4、支持Get请求的2种写法@GetMapping + @RequestMapp

    2024年02月16日
    浏览(42)
  • springcloud gateway中打印请求参数,请求路径和返回数据

    在平时前后端联调过程中,需要查询日志看到前端请求的接口,上送的参数,返回数据这样有利于我们定位问题;话不多说直接上代码。 在gateway模块中,新建一个filter的包,然后创建改类,即可在控制台和日志文件里面打印出请求参数,只写了常用的 post 和 get 请求的方式;

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包