当前项目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源码的方式进行校验.
两种方法我都试过了,启动不会再报错.
总结
多看官方手册,耐心查看报错日志,仔细分析