zoukankan      html  css  js  c++  java
  • SpringBoot 跨域 Access-Control-Allow-Origin

    跨域(CORS)是指不同域名之间相互访问。

    跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于JavaScript所定义的安全限制策略。

    只要协议,子域名,主域名,端口号有一项不同,就属于跨域

    跨域的解决方法

      前端:

        使用jsonp

      后端:

        实现WebMvcConfigurer接口

        在需要跨域访问的类和方法中设置允许跨域访问(注解)

        服务端设置Response Header(Fiter)

    (1)实现WebMvcConfigurer接口

    通过实现WebMvcConfigurer接口中的addCorsMappings()方法来实现跨域

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer{
        //解决跨域问题
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowCredentials(true)
                    .allowedMethods("GET", "POST", "DELETE", "PUT")
                    .maxAge(3600);
        }
     } 

    (2)注解

    使用@CrossOrigin注解声明类和方法允许跨域访问

    该注解可以实现方法级别的细粒度的跨域控制。可以在类或者方添加该注解。

      如果在类上添加该注解,该类下的所有接口都可以通过跨域访问;

      如果在方法上添加注解,那么只限于加注解的方法可以访问。

    @CrossOrigin
    @RestController
    @RequestMapping("/api/ppt")
    public class PPTOperation {
    
        @PostMapping("/combine")
        public Result combine(@RequestBody JSONObject jsonParam) {
        
              ……
        }
    }

    (3)实现Fiter接口

    通过实现Fiter接口在请求中添加一些Header来解决跨域的问题

    @Component
    public class CorsFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletResponse res = (HttpServletResponse) response;
            res.addHeader("Access-Control-Allow-Credentials", "true");
            res.addHeader("Access-Control-Allow-Origin", "*");
            res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
            res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
            if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
                response.getWriter().println("ok");
                return;
            }
            chain.doFilter(request, response);
        }
        @Override
        public void destroy() {
        }
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    }
  • 相关阅读:
    Codeforces Round #415 (Div. 2) C. Do you want a date?
    Lifting the Stone 计算几何 多边形求重心
    计算几何 多边形面积 和 重心 的求法
    POJ 3304 segments 线段和直线相交
    LibreOJ #114. k 大异或和
    LibreOJ #113. 最大异或和
    对于各种各样平衡树的比较
    数组splay ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
    替罪羊树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
    红黑树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
  • 原文地址:https://www.cnblogs.com/baby123/p/10837026.html
Copyright © 2011-2022 走看看