zoukankan      html  css  js  c++  java
  • SpringBoot解决跨域访问及Session一致性

    方法1:使用 @CrossOrigin 注解,可以加在类上 也可以加在方法上;

    方法2:添加全局配置 (新增一个配置类)

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                    .maxAge(3600)
                    .allowCredentials(true);
        }
    }

    方法3:自定义Filter拦截器

    /**
     * 跨域请求拦截器
     */
    @Component
    public class CorsFilter implements Filter {
     
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            /* 自己的代码 */
            System.out.println("CorsFilter init...");
        }
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("CorsFilter doFilter...");
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
            //允许请求携带认证信息(cookie)
            res.setHeader("Access-Control-Allow-Credentials", "true");
            //指定允许其他域名访问
            res.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
            //允许请求的类型
            res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
            //允许的请求头字段
            res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            //设置预检请求的有效期
            //浏览器同源策略:出于安全考虑,浏览器限制跨域的http请求。怎样限制呢?通过发送两次请求:预检请求、用户请求。
            //1、预检请求作用:获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;如果不允许,则拦截第二次请求
            //2、单位:s,在此期间不用发送预检请求。
            //3、若为0:表示每次请求都发送预检请求,每个ajax请求之前都会先发送预检请求。
            res.setHeader("Access-Control-Max-Age", "3600");
            //OPTIONS Method表示浏览器发送的预检请求。
            if ("OPTIONS".equalsIgnoreCase(req.getMethod())) {
                res.setStatus(HttpServletResponse.SC_OK);
            } else {
                /* 自己的代码 */
                chain.doFilter(req, res);
            }
        }
     
        @Override
        public void destroy() {
            /* 自己的代码 */
            System.out.println("CorsFilter destroy...");
        }
    }

    参考自:https://blog.csdn.net/rongtaoup/article/details/89497471

      另外,我使用maven打jar包时,java -jar ... 总是启动失败,解压查看发现没有resources下的配置文件,原因是:resources 写错了,少了一个s。(尴尬ing,同时好奇为什么之前是可以的?)

     祝我们乘风破浪

    野蛮生长

  • 相关阅读:
    转载:MyBatis获取插入记录的自增长字段值
    006---抽象类
    005---组合
    004---继承与派生
    003---属性查找和绑定方法
    002---类与对象
    001---面向对象和面向过程的区别
    017---Django的中间件解决跨域
    10---git安装
    007---归并排序
  • 原文地址:https://www.cnblogs.com/wq-code/p/11439098.html
Copyright © 2011-2022 走看看