解决OAth2.0的授权token放在header中,导致文件下载验证失效的问题

2023-05-16

1、项目背景

  项目是采用微服务架构,使用spring gateway作为网关,统一做校验权限

2、问题

  OAth2.0的授权token是放在请求头Authorization中的,如果使用浏览器直接下载文件,比如超链接直接下载,就会出现未授权错误。

3、解决办法

 如果能兼容把token放在url后面作为参数传递的话,问题是不是就可以解决了
 直接上代码:
@Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
        http.addFilterBefore((exchange, chain) -> {
                    ServerHttpRequest request = exchange.getRequest();
                    String token = request.getHeaders().getFirst("Authorization");
                    if (StringUtils.isEmpty(token)) {
                        Optional<Map.Entry<String, List<String>>> tokenParamsOp = request.getQueryParams().entrySet().stream()
                                .filter(entry -> "Authorization".equals(entry.getKey())).findFirst();

                        if (tokenParamsOp.isPresent()) {
                            String payload = tokenParamsOp.get().getValue().get(0);
                            request = exchange.getRequest().mutate()
                                    .header("Authorization", payload)
                                    .build();
                            exchange = exchange.mutate().request(request).build();
                        }
                    }
                    return chain.filter(exchange);
                }, SecurityWebFiltersOrder.HTTP_HEADERS_WRITER)
                .authorizeExchange()
                .pathMatchers(HttpMethod.OPTIONS).permitAll()
                //其他配置代码略……
                .and().csrf().disable();
        return http.build();
    }

加入webFilter,从url参数中获取到token,然后放入请求头中
问题解决!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决OAth2.0的授权token放在header中,导致文件下载验证失效的问题 的相关文章

  • 安利一款开源(3w star)的ssh、shell、cmd、sftp软件tabby(功能多、美观好用、支持插件)

    github地址 xff1a Tabby 官网 xff1a Tabby sh 用了之后非常之喜爱 xff0c 给作者点了个start xff0c 大家一起给这样的好开源软件点星星 自定义登录后脚本 对自己的配置可以设置快捷键快速打开一个该配
  • 远程控制ubuntu10.04

    由非linux平台连接到linux box有很多种方法 ubuntu本身就提供了XDMP VNC xff0c RDP等远程桌面登陆的方式 这些方式的实现比较简单 xff0c 没有使用多少数据压缩的技术 xff0c 因而远程时会感到比较慢 x
  • win10无线网卡共享网络给有线网卡再共享给其他电脑

    背景 xff1a 因项目主机为只有有线网卡的Linux系统 xff0c 需要联网安装一些程序 xff0c 需要win10的笔记本共享网络给项目主机 xff0c 但是调试环境下笔记本又只有连接手机热点的无线网络 xff0c 需要实现 笔记本无
  • 【解决错误】ModuleNotFoundError: No module named ‘PIL‘

    一 报错 Traceback span class token punctuation span most recent call last span class token punctuation span span class toke
  • 树莓派VNC配置教程

    VNC可以实现连接到树莓派后 xff0c 用电脑直接控制树莓派 xff0c 下面是VNC配置教程 xff1a 首先在电脑端上安装VNC xff08 官网下载地址 xff09 xff1a xff08 选择对应的版本 xff0c 下载安装即可
  • 用VSCode优雅的写MySQL

    一 SQL的部署 首先是部署MySQL xff0c 本地的MySQL在官网上下载包后 xff0c 按照默认的安装即可 xff0c 我使用的腾讯云的 云MySQL xff0c 可以到腾讯云官网租用 在租好数据库后 xff0c 进入控制台 xf
  • 机器学习笔记 五:逻辑回归(Logistics Regression)及两个分类案例

    目录 1 前言2 实现过程2 1 数据可视化过程2 2 Sigmoid函数2 3 代价函数 xff08 costFunction xff09 2 4 其他设置2 5 梯度下降函数2 5 1 梯度下降结果 xff08 初始参数为0 xff09
  • 器:ubnutu系统完美克隆至新硬盘,系统备份迁移至新硬盘(机器)

    一切皆为文件 xff0c 这个理念真酷 xff01 很好 xff01 ubuntu16 04 系统备份还原迁移至新机器 亲测可用 xff0c 刚刚克隆完毕 1 打包整个系统 xff1a sudo su cd tar czvpf sys ba
  • tools:nerd font debian(ubuntu maybe the same)

    i get garbled in my nerdtree try to fix this bug down load this by yourself bug nerdtree 显示图标乱码 CSDN博客 download font by
  • Ubuntu 设置环境变量问题总结

    一 动态链接库问题 最近一直被 error while loading shared libraies 错误困扰 xff0c 于是简单的总结了一下Ubuntu 环境变量的设置问题 从下面几个方面来说 xff1a 1 系统默认库 1 xff0
  • Python之配置日志的几种方式(logging模块)

    作为开发者 xff0c 我们可以通过以下3种方式来配置logging 1 xff09 使用Python代码显式的创建loggers handlers和formatters并分别调用它们的配置函数 xff1b 2 xff09 创建一个日志配置
  • 硬盘分区、挂载及Ubuntu系统安装

    Linux发行版按照打包方式划分主要包括Debian系 基于Dpkg Red Hat系 基于RPM Slackware系等 xff0c 其中Debian系 Red Hat系是我们所常见的 xff0c 前者包括Ubuntu Debian GN
  • Ubuntu安装cuDNN

    一 官网下载与自己CUDA版本匹配的安装包 cudnn xff08 版本号 xff09 tgz 二 安装cuDNN tar xzvf cudnn xff08 版本号 xff09 tgz cuda Tab sudo cp cuda inclu
  • MySQL配置SSL访问-WEB配置JDBC支持SSL

    WEB配置JDBC支持SSL Connector J 可以使用 SSL 加密 JDBC 驱动程序和服务器之间通信的所有数据 xff08 初始握手除外 xff09 启用连接加密会带来性能损失 xff0c 其严重程度取决于多种因素 xff0c
  • MySQL配置SSL访问-ETL配置JDBC支持SSL

    创建用户 SSL TLS 选项 除了基于用户名和凭据的常规身份验证之外 xff0c MySQL 还可以检查 X 509 证书属性 要为 MySQL 帐户指定 SSL TLS 相关选项 xff0c 请使用REQUIRE指定一个或多个tls o
  • Python 使用docx库操作word文档中的表格单元格内容

    1 导入库 from docx import Document 2 加载word文档对象 doc 61 Document path 3 定位表格 获取所有表格对象 tables 61 doc tables 获取word中第一个表格对象 ta
  • 人工智能导论(6)——机器学习(Machine Learning)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记1 概述1 1 基本概念1 2 机器学习的分类 2 常见有监督学习算法2 1 线性回归2 2 多项式回归2 3 支持向量机2 4 k 最近邻分类2 5 朴素贝叶斯2 6 决策树2 7
  • Ubuntu 22.04 Anaconda和jupyter notebook安装问题

    安装Anaconda的安装问题是 xff1a conda command not found 在terminal 输入 vim bashrc conda 初始化在最末端 xff0c 把带 都删除即可 前提是 xff0c 安装时候已经设置了路
  • 人工智能导论(10)——机器人(Robot)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记机器人分类工业机器人服务机器人一般机器人智能机器人机器人与人工智能 一 概述 机器人是靠自身动力和控制能力来实现各种功能的一种机器 本文将人工智能 34 机器人 34 基础知识整理为
  • Numpy系列(八):函数库之5傅里叶变换函数

    Numpy系列目录 文章目录 一 简介二 思维导图三 傅里叶变换基础知识1 傅里叶级数2 复数形式傅里叶级数3 傅里叶变换4 离散傅里叶变换 四 Numpy快速傅里叶变换1 标准FFT1 1 一维离散FFT1 2 一维离散FFT反变换1 3

随机推荐