首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >spring cloud gateway跨域冲突功能的开发

spring cloud gateway跨域冲突功能的开发

作者头像
星痕
发布于 2020-08-14 08:46:31
发布于 2020-08-14 08:46:31
92900
代码可运行
举报
文章被收录于专栏:JAVA后端开发JAVA后端开发
运行总次数:0
代码可运行

gateway可以实现支持跨域功能,但如果下游也支持跨域,会出现跨域冲突。 如何解决该问题,gateway对外输出相关跨域的httpheader,只要对重复的header去掉即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author starmark
 * @date 2020/5/11  下午9:29
 */
@Slf4j
public class GatewayCorsWebFilter implements WebFilter {
    @Autowired
    private IRouteService routeService;
    private final CorsProcessor processor;

    private static List<String> configHeaderNames = new ArrayList<>();
    static{
        configHeaderNames.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS);
        configHeaderNames.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS);
        configHeaderNames.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS);
        configHeaderNames.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN);
        configHeaderNames.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS);

    }

    public GatewayCorsWebFilter() {
        this.processor = new DefaultCorsProcessor();
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String url = request.getPath().value();
        if (url.contains("webjars") || url.contains("swagger-resources") || url.contains("/v2/api-docs") || url.contains("doc.html") || url.contains("swagger-ui.html") ||
                url.contains(".css") || url.contains(".ico") || url.contains(".js") || url.contains(".png") || url.contains(".jpg")) {
            //如果发现是css或者js文件,直接放行
            return chain.filter(exchange);
        }
        String projectCode = RequestHelper.getRequestProjectCode(request);
        Assert.hasText(projectCode, "工程编码不存在");
        CorsConfiguration corsConfiguration = routeService.getGatewayProjectCorsConfiguration(projectCode);
        boolean isValid = this.processor.process(corsConfiguration, exchange);

        if (!isValid || CorsUtils.isPreFlightRequest(request)) {
            return Mono.empty();
        }
        //解决跨域冲突的问题
        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(exchange.getResponse()) {

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders=    HttpHeaders.writableHttpHeaders(getDelegate().getHeaders());
                dedupe(httpHeaders);
                return httpHeaders;
            }
            void dedupe(HttpHeaders headers) {
                if (headers == null) {
                    return;
                }
                for (String name : configHeaderNames) {
                    dedupe(headers, name.trim());
                }
            }

            private void dedupe(HttpHeaders headers, String name) {
                List<String> values = headers.get(name);
                if (values == null || values.size() <= 1) {
                    return;
                }

                headers.set(name, values.get(values.size() - 1));

            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build());
    }



}

上述是我跨域功能的代码,支持跨域功能及解决跨域冲突功能的问题。 上面有一个梗, exchange.getResponse().getHeaders()的header为只读,需要通过构造响应ServerHttpResponseDecorator 来解决只读的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[UWP]用Win2D实现镂空文字
后来试玩了Win2D,这次就用Win2D实现文字的镂空效果,配合PointLight做一个内敛不张扬的番茄钟。
dino.c
2019/11/27
7220
[UWP]使用AlphaMaskEffect提升故障艺术动画的性能(顺便介绍怎么使用性能探测器分析UWP程序)
前几天发布了抄抄《CSS 故障艺术》的动画这篇文章,在这篇文章里介绍了如何使用Win2D绘制文字然后配合BlendEffect制作故障艺术的动画。本来打算就这样收手不玩这个动画了,但后来又发现性能不符合理想。明明只是做做Resize动画和用BlendEffect混合,为什么性能会这么差呢?
dino.c
2020/04/02
7550
[UWP]使用Win2D的BorderEffect实现图片的平铺功能
在WPF中只要将ImageSource的TileMode属性设置为Tile即可实现图片的平铺,具体可见WPF的这些文档:
dino.c
2019/11/18
7770
[UWP]使用PointLight并实现动画效果
UWP中的Composition Light是一组可以创建3D光照的API,它明明十分好玩而且强大, 但博客园几乎没有相关文章(用UWP或pointlight做关键字只能找到我自己的文章),这篇文章就 来介绍Composition Lighting的入门知识。
dino.c
2019/11/07
8490
[UWP]使用PointLight并实现动画效果
[UWP]UIElement.Clip虽然残废,但它还可以这样玩
用了很久很久的WPF,但几乎没有主动用过它的Clip属性,我只记得它很灵活,可以裁剪出多种形状。在官方文档复习了一下,大致用法和效果如下:
dino.c
2019/12/02
8880
[UWP]使用CompositionLinearGradientBrush实现渐变画笔并制作动画
CompositionBrush(合成画笔)是操作可视化层时用于绘制 SpriteVisual 区域的画笔。
dino.c
2019/10/24
7910
[UWP]使用CompositionLinearGradientBrush实现渐变画笔并制作动画
dotnet C# 从控制台开始 关联 Win2D 和 WinUI 3 应用
本文将告诉大家如何从最简单的控制台开始搭建,让 Win2D 和 WinUI 3 关联起来,让 Win2D 可以将内容渲染到 WinUI 3 应用上
林德熙
2024/08/25
2540
dotnet C# 从控制台开始 关联 Win2D 和 WinUI 3 应用
[UWP]用Win2D和CompositionAPI实现文字的发光效果,并制作动画
献祭了周末的晚上,成功召唤出了上面的番茄钟。正当我在感慨“不愧是Shadow大人,这难道就是传说中的五彩斑斓的黑?”
dino.c
2019/11/28
1K0
[UWP]使用CompositionAPI的翻转动画
在 使用GetAlphaMask和ContainerVisual制作长阴影(Long Shadow) 这篇文章里我介绍了一个包含长阴影的番茄钟,这个番茄钟在状态切换时用到了翻转动画,效果如上所示,还用到了弹簧动画,可以看到翻转后有点回弹。本来打算自己这个动画效果写的,但火火已经写好了这个FlipSide控件,Github地址在这里,这篇文章就介绍下这个控件的部分原理。
dino.c
2019/11/14
8530
[UWP]通过自定义XamlCompositionBrushBase实现图片平铺
我早就想试试自定义XamlCompositionBrushBase,但一直没机会。上一篇文章介绍到使用Win2D的BorderEffect实现图片的平铺功能,原理很简单,但每次都要写这些代码很繁琐,正好就用这个作为例子试试XamlCompositionBrushBase。
dino.c
2019/11/20
7790
[UWP]通过自定义XamlCompositionBrushBase实现图片平铺
[UWP]使用SpringAnimation创建有趣的动画
最近用弹簧动画(SpringAnimation)做了两个番茄钟,关于弹簧动画官方文档已经介绍得够详细了,这篇文章就摘录一些官方文档核心内容。
dino.c
2019/11/12
9610
[UWP]使用SpringAnimation创建有趣的动画
WPF 使用 Composition API 做高性能渲染
在 WPF 中很多小伙伴都会遇到渲染性能的问题,虽然 WPF 的渲染可以甩浏览器渲染几条街,但是还是支持不了游戏级的渲染。在 WPF 使用的 DX 只是优化等级为 9 和 DX 9 差不多的性能,微软在很多开发者的提议开放了现代渲染方法 Composition API 这是 UI 应用的里程碑的技术
林德熙
2019/04/22
2.2K2
WPF 使用 Composition API 做高性能渲染
【荐】牛逼的WPF动画库:XamlFlair
XamlFlair库的目标是简化常见动画的实现,并允许开发人员使用几行Xaml轻松地添加单个或组合的动画集。
沙漠尽头的狼
2021/12/01
2.3K0
【荐】牛逼的WPF动画库:XamlFlair
win10 uwp 渲染原理 DirectComposition 渲染 例子创建工程如何写显示CompositionSurfaceBrush
本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制。
林德熙
2018/09/18
2.9K0
win10 uwp 渲染原理 DirectComposition 渲染
            例子创建工程如何写显示CompositionSurfaceBrush
[UWP]使用GetAlphaMask制作阴影
最近常常接触到GetAlphaMask,所以想写这篇文章介绍下GetAlphaMask怎么使用。其实GetAlphaMask的使用场景十分有限,Github上能搜到的内容都是用来配合DropShadow的,所以这篇文章也以介绍DropShadow为主。
dino.c
2019/10/31
8990
[UWP]抄抄《CSS 故障艺术》的动画
上个月看到CSS 故障艺术这篇文章,最近想转换心情于是开始抄它的动画了(顺便为博客园的UWP板块吊命)。CSS的mix-blend-mode好像很好用,这次用UWP中Win2D的BlendEffect模仿它的玩法。
dino.c
2020/03/27
8000
[UWP]抄抄《CSS 故障艺术》的动画
win10 uwp 毛玻璃 Compositor 创建毛玻璃win2D最简单方法
毛玻璃在UWP很简单,不会和WPF那样伤性能。 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃。
林德熙
2018/09/18
1.2K0
win10 uwp 毛玻璃
            Compositor 创建毛玻璃win2D最简单方法
[UWP]使用GetAlphaMask和ContainerVisual制作长阴影(Long Shadow)
前几年扁平化设计(Flat Design)十分流行,后来在扁平化的基础上又流行起了长阴影(Long Shadow)。长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感。长阴影快速发展为流行的设计趋势,并经常被应用到扁平设计方案的对象。它很适合用在较小的元素上,一时之间几乎应用的图标都加上了长阴影。(不过现在又不流行了)
dino.c
2019/11/04
4780
[UWP]CompositionLinearGradientBrush加BlendEffect,双倍的快乐
上一篇文章介绍了CompositionLinearGradientBrush的基本用法, 这篇文章再结合BlendEffec介绍一些更复杂的玩法。
dino.c
2019/10/29
5250
[UWP]CompositionLinearGradientBrush加BlendEffect,双倍的快乐
win10 uwp 进度条 WaveProgressControl
昨天看到了有个大神做出好看的进度条样式,于是我就去抄袭他的代码,但是发现看不懂,于是本文主要翻译就是大神说这个控件如何做。
林德熙
2018/09/18
8190
win10 uwp 进度条 WaveProgressControl
推荐阅读
相关推荐
[UWP]用Win2D实现镂空文字
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验