zoukankan      html  css  js  c++  java
  • 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、使用拦截器配置 注意:这里controller 需要加上 

    @CrossOrigin  注解使用

    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);
        }
    }

     4、最后一种针对springboot 可行

    package com.fyun.tewebcore.filter;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    /**
     * @program: te
     * @description: 跨域配置
     * @author: Mr.zhourui
     * @create: 2020-05-13 14:30
     **/
    @Configuration
    public class CorsConfig {
        private CorsConfiguration buildConfig() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*"); //允许任何域名
            corsConfiguration.addAllowedHeader("*"); //允许任何头
            corsConfiguration.addAllowedMethod("*"); //允许任何方法
            return corsConfiguration;
        }
    
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", buildConfig()); //注册
            return new CorsFilter(source);
        }
    
    
    }
  • 相关阅读:
    老王python博客
    python中文分词
    python 字典(dict)get方法应用
    python yield和generators(生成器)
    python ASCII返回对应的值(chr)
    python 字符串特点
    python 包的定义,结构,导入过程
    fabric的安装和配置
    python 正则表达式re findall
    python unittest单元测试方法和用例
  • 原文地址:https://www.cnblogs.com/zrboke/p/12809440.html
Copyright © 2011-2022 走看看