spring 跨域的几种方式

1、javaConfig方式

/**
 * @author francis
 * @version 2017/7/10.
 *
 * 下面2种方式,2选1都可以
 */
@Configuration
@EnableWebMvc
public class CrossConfig {
    
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://domain2.com")
                        .allowedMethods("PUT", "DELETE")
                        .allowedHeaders("header1", "header2", "header3")
                        .exposedHeaders("header1", "header2")
                        .allowCredentials(false)
                        .maxAge(3600);
            }
        };
    }

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

2、注解方式 @CrossOrigin

/**
 * @author francis
 * @version 2017/7/10.
 *
 * @CrossOrigin 可方法可类
 */
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class CrossController {

    @GetMapping("/{id}")
    public void retrieve(@PathVariable Long id) {
        // ...todo
    }

    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...todo
    }
}

3、Filter方式,新建Filter,在response里加上以下这些

  /**
 * @author francis
 * @version 2017/7/10.
 */
public class CrossFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With");
        res.addHeader("Access-Control-Allow-Origin", "http://domain2.com");
        res.addHeader("Access-Control-Max-Age", "1800");
        res.addHeader("Access-Control-Allow-Credentials", "true");
    }

    @Override
    public void destroy() {

    }
}

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 157,643评论 24 688
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,062评论 16 134
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 7,376评论 6 13
  • 人一辈子都活在欲望和信念之间, 只是有些欲望伪装得比较高大上, 连自己都难以置信, 比如帮助他人的欲望, 有时也仅...
    Looloo阅读 70评论 0 1
  • 荒芜的记忆 我们的故事已经过去好多年 流畅的思绪开始慢慢搁浅 熟悉的镜头泛起了陌生的死角 没有文字的记述 让我们渐...
    博雅恒通阅读 106评论 0 0