zoukankan      html  css  js  c++  java
  • SpringBoot2.x整合Shiro出现cors跨域问题(踩坑记录)

    1. Springboot如何跨域?

    最简单的方法是:

    定义一个配置CorsConfig类即可(是不是简单且无耦合到令人发指)

    @Configuration
    public class CorsConfig {
     
        private CorsConfiguration buildConfig() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");        
            corsConfiguration.setMaxAge(3600L);         // 预检请求的有效期,单位为秒。
            corsConfiguration.setAllowCredentials(true);// 是否支持安全证书(必需参数)
            return corsConfiguration;
        }
     
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", buildConfig());
            return new CorsFilter(source);
        }
    }

    不要用WebMvcConfigurerAdapter继承的方法了,因为已经过时了,Springboot2.0已经不推荐此方法

    此处有一个比较坑的地方就是:

    corsConfiguration.setMaxAge(3600L);         // 预检请求的有效期,单位为秒。
    corsConfiguration.setAllowCredentials(true);// 是否支持安全证书(必需参数)

    这两句务必要加上,不然无论前端怎么做,也无论后台你对shiro的过滤器怎么重写,response请求返回状态都是302。

    网络上大家的代码都是copy来copy去,往往没有这2句,所以这个坑真是眼泪汪汪。

    2. 前端在发送请求是,是否需要加上跨域参数?(以下两句为跨域参数)

    crossDomain: true,                       
    xhrFields: {withCredentials: true},

    答案是肯定的。

    如果不加跨域参数,通过在ShiroConfig中配置某些URL不鉴权(匿名访问),倒也可以(但是不推荐,你不可能把所有的URL都设置为匿名访问,那要鉴权做什么?)。

    filterChainDefinitionMap.put("/login/**", "anon");   //类似于URL路径中含有login的不鉴权

    那么这两句的作用是什么?    -- 利用cookie维持session的会话跟踪。

    good luck!

    参考文章:https://blog.csdn.net/wangchsh2008/article/details/90324631

  • 相关阅读:
    iperf使用
    性能工具--vtune
    Android广告轮播图实现
    自定义控件学习——下拉刷新ListView
    JVM读书笔记
    自定义控件学习——仿qq侧滑栏
    初步使用RecyclerView实现瀑布流
    自定义Toast
    自定义对话框加状态选择器
    自定义组合控件
  • 原文地址:https://www.cnblogs.com/hxun/p/12101072.html
Copyright © 2011-2022 走看看