springboot 升级到2.4.0及最新版本问题汇总解决

当前项目springboot 版本 2.2.4.RELEASE ,尝试性升级到2.5.5
遇到以下问题
1.一些hibernate的validator引入类报错
2.启动报错,内容截取局部

When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using
allowedOriginPatterns" instead

里面还有swagger错误,这个其实和swagger没有关系

解决:

一些hibernate的validator引入类报错

发现是缺少这个依赖包,在2.2.4版本的时候是springboot自己的包含的,查看依赖管理后发现在
springboot2.5.5版本 应该是没有引入hibernate的validator的相关依赖了,
在springboot官方网站对依赖版本的要求,手动依赖就好了,
依赖查询地址:
https://docs.spring.io/spring-boot/docs/2.5.5/reference/html/dependency-versions.html#dependency-versions
,手动引入就好

        
            org.hibernate.validator
            hibernate-validator
            6.2.0.Final
        

启动报错 解决

可以看到报错内容和cors,也就是跨域相关,查看springboot2.5.5版本的官方手册.发现官方对crossorigin注解的参数进行限制和校验,如果参数allowCredentials = "true"(起到允许接收三方凭据) 则origins参数不允许为*.而corssorigin注解的origins参数不指定的话.则默认值就为*,校验则不通过,主动报出异常.
所以解决的话有两种方式,一种就是每个crossorigin 注解上再加一个 origins 参数指定允许访问的域名list.
第二种就是crossorigin注解不要设置任何参数,单独写个配置类继承WebMvcConfigurer,并Override addCorsMappings方法.代码如下

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("*")
                .allowedOrigins("https://domain2.com")
                .allowedMethods("PUT", "DELETE","GET","POST")
                .allowedHeaders("header1", "header2", "header3")
                .exposedHeaders("header1", "header2")
                .allowCredentials(true).maxAge(3600);
    }

为什么不要设置再在注解里设置任何参数,原因是局部设置会覆盖全局设置,所以如果觉得全局不合适可以再去单独设置,否则默认以全局配置就好了.
这个全局设置后是否生效还没校验,后期会通过debug源码的方式进行校验.
两种方法我都试过了,启动不会再报错.

总结

多看官方手册,耐心查看报错日志,仔细分析

你可能感兴趣的:(springboot 升级到2.4.0及最新版本问题汇总解决)