SpringBoot解决跨域问题

SpringBoot解决跨域问题----使用Filter

  1. 创建一个拦截器
  2. 配置启动参数

创建一个Filter,配置相关的域信息

主要是`response.addHeader("Access-Control-Allow-Origin", "xxxx");`
package com.bigorang;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CrosFilter implements javax.servlet.Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        //支持所有域的跨域调用
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String origin = request.getHeader("Origin");
        if (origin != null && !"".equals(origin)) {
            response.addHeader("Access-Control-Allow-Origin", origin);
        }

        //前端自定义头header时,需要设置Access-Control-Allow-Headers
        //支持所有带头的跨域调用
        String headers = request.getHeader("Access-Control-Allow-Headers");
        if (headers != null && !"".equals(headers)) {
            response.addHeader("Access-Control-Allow-Headers", headers);
        }


        //带Cookie的时候,origin必须是全匹配,不能使用*,或者使用上方的获取后再设置,支持所有的域
//        response.addHeader("Access-Control-Allow-Origin","*");
        response.addHeader("Access-Control-Allow-Method", "GET");
//        response.addHeader("Access-Control-Allow-Headers","Content-Type");
        response.addHeader("Access-Control-Max-Age", "3600");
        response.addHeader("Access-Control-Allow-Credential", "true");


        filterChain.doFilter(servletRequest, response);
    }

    @Override
    public void destroy() {

    }
}

配置应用启动参数

```
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AjaxServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(AjaxServerApplication.class, args);
    }



@Bean
public FilterRegistrationBean registrationBean(){
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.addUrlPatterns("/*");
    bean.setFilter(new CrosFilter());
    return bean;
    }
}
```
posted @ 2018-11-04 20:14  BigOrang  阅读(693)  评论(0编辑  收藏  举报