关于java防止csrf的问题()

目的

当前端在请求 时,需要发出403警告

"Origin":"网址"

同源策略

当前端和后端配置的不在同一源下时发错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进行配置,代码中是不支持,,

通配符
/*
逗号分割网址
————————

目的

当前端在请求 时,需要发出403警告

"Origin":"网址"

同源策略

当前端和后端配置的不在同一源下时发错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进行配置,代码中是不支持,,

通配符
/*
逗号分割网址