首页 > 其他分享 >Cors 自定义请求头问题

Cors 自定义请求头问题

时间:2023-02-20 01:55:05浏览次数:35  
标签:请求 自定义 Spring Cors Security response

背景

前后端分离,重理登录响应逻辑

问题

分离前的逻辑是,通过 spring security 校验每一次请求的授权,并且对于 未登录 和 权限不足 两种情况,又分别根据不同的请求类型做了两种响应

  • 对于普通请求,会重定向至登录页
  • 对于ajax请求,会返回一个 json 响应

当然现在前后端分离后端分离,后端的重定向肯定不能要,但是这个响应码看起来没问题
只是这儿有个逻辑判断

                    String xRequestedWith = request.getHeader("x-requested-with");
                    if ("XMLHttpRequest".equals(xRequestedWith)) {
                        response.setContentType("application/plain;charset=utf-8");
                        PrintWriter writer = response.getWriter();
                        writer.write(CommunityUtil.getJSONString(403, "你还没有登录哦!"));
                    } else response.sendRedirect(request.getContextPath() + "/login");

就是说必须要是 XHR 形式的请求,众所周知,ajax 是对 XHR 的封装,axios 也是
按理说没问题吧,但偏偏就获取不到了

设置跨域过滤器设置

response.addHeader("Access-Control-Expose-Headers","myHeader");

同时又发现 Spring Security 的拦截要早于我自己设置的跨域浏览器

继续

采用 Spring Security 自带的 CORS 支持却并没有生效

发现很奇怪的点就是,当我设置了两个自定义请求头

            headers:{
                'X-Requested-With': 'XMLHttpRequest',
                'aaaa':"cccccccccccccccccccccccc"
            }

X-Requested-With可以正常接收,而aaaa则会触发预检请求

我真的是搞不懂

结果

解决方案是调整自定义 Filter 的执行位置在 Spring Security 之前

                .and()
                .addFilterBefore(new CorsFilter(), ChannelProcessingFilter.class)

悬而未决的问题

  1. 不知道为什么设置的 Spring Security Cors 方案没有生效
  2. 似乎并不能保证除了X-Requested-With字段外其他自定义头字段的正常接收

标签:请求,自定义,Spring,Cors,Security,response
From: https://www.cnblogs.com/yaocy/p/17136053.html

相关文章