原因:
CORS的默认策略和spring的具体方法优先原则导致;
释义:
CORS的默认策略是整个controller类;
Spring的“具体方法优先原则”:在具体方法和类上都加上相同注解,优先方法的注解生效;
问题描述:
现在@CrossOrigin注解没在controller类上加,只在controller中的某个方法上加;
刨析:
@CroessOrigin注解的默认策略是整个controller类,现在controller类上没有配置,所以没有采取@CroessOrigin的默认策略,即整个controller类受到跨域问题影响;
在controller中的某个方法上加,按照Spring的具体方法优先原则,会优先执行此方法上的注解配置,即具体方法覆盖类级别配置(类上有配置);
但目前是只有方法上有@CroessOrigin注解,而类上没有,所以整个controller中的所有方法会受到跨域问题影响,只在某个方法上加@CroessOrigin注解,按照spring中的“具体方法优先”原则,它要覆盖类级别配置,但是此时类上没有相关配置,所以导致具体方法上的@CroessOrigin注解失效。
解决办法:
controller类上加@CroessOrigin注解,指定具体属性;
如果想在某个方法上进行测试操作,controller类和此方法上都加@CroessOrigin,具体方法上的注解指定属性;