目的
当前端在请求 "Origin":"网址"
时,需要发出403警告
同源策略
当前端和后端配置的不在同一源下时发错403错误
- 使用
WebMvcConfigurer
中重写addCorsMappings
在allowedOriginPatterns
达成同源请求
但是只能选择一个网址,就需要配置多个域名。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 允许跨域访问的路径
//.allowedOrigins("*") // 允许跨域访问的源
.allowedOriginPatterns("同源网站")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
.maxAge(3600) // 预检间隔时间
.allowedHeaders("*") ; // 允许头部设置
}
}
- 使用过滤器实现
想法是过滤器获取请求头”Origin”的值是否包含同源网站,在进行过滤
但是在配置servletResponse.setHeader
后与前端的值不一致的情况下并不会触发403错误。
让后想法通过域名判断后把值给registry.allowedOriginPatterns
,但是经过日志打印顺序
发现CorsConfig的执行顺序再过滤器之前。因此这里就达不成子域名也能通过?
总结
如果以后要配多域名,可以在nginx进行配置,代码中是不支持通配符
,/*
,逗号分割网址
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278974.html