spring boot三种方式设置跨域

1、如图单个处理器添加:

        responses.setHeader("Access-Control-Allow-Origin", "*");
        responses.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        responses.setHeader("Access-Control-Allow-Credentials","true");

2、使用javax下servlet的过滤器filter

a、自定义Myfilter实现filter接口

b、全局设置如下:

/**
 * @program: te
 * @description: 配置跨域问题
 * @author: Mr.zhourui
 * @create: 2020-04-29 15:08
 **/

public class Myfilter extends HttpServlet implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    //todo
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        // 添加参数,允许任意domain访问
        resp.setHeader("Access-Control-Allow-Origin", "*");
        // 这个allow-headers要配为*,这样才能允许所有的请求头 ---
        resp.setHeader("Access-Control-Allow-Headers", "*");
        resp.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        resp.setHeader("Access-Control-Allow-Credentials","true");

    }
}

3、使用拦截器配置

a、自定义拦截器MyInterceptor 实现springboot 的HandlerInterceptor 接口

/**
 * @author xuxueli 2015-12-12 18:09:04
 */

@Component
public class MyInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
        response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
        //浏览器会先发送一个试探请求OPTIONS,然后才会发送真正的请求,为了避免拦截器拦截两次请求,所以不能让OPTIONS请求通过
        if ("OPTIONS".equals(request.getRequestURI())){
            return false;
        }
        return true;


    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }

}

b、加入webmvc 的配置中 在上下文使用

/**
 * @program: te
 * @description:
 * @author: Mr.zhourui
 * @create: 2020-04-29 14:48
 **/


@Configuration
@EnableWebMvc
public class MyWebMvcConfigurerConfig extends WebMvcConfigurerAdapter {
    @Resource
    private MyInterceptor myInterceptor;
//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        super.addCorsMappings(registry);
//        registry.addMapping("/**")
//                .allowedOrigins("*")
//                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
//                .allowCredentials(true)
//                .allowedHeaders("*")
//                .maxAge(3600);
//
//    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //全部拦截
//        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
        registry.addInterceptor(myInterceptor).excludePathPatterns("/**");
        super.addInterceptors(registry);
    }
}

猜你喜欢

转载自www.cnblogs.com/zrboke/p/12809440.html