zoukankan      html  css  js  c++  java
  • 关于解决Springboot跨域请求的方法

    前言

    最近在项目中,由于前后分离,前台项目和后台项目部署的不在一台服务器,就产生了跨域的问题,特此记录下


    正文

    正常情况下,如果提示:

    就可以判断是没有解决跨域的问题了。

    在SSM中,我曾经这样解决过:

    在springmvc的配置文件中添加如下代码:
    <mvc:cors>  
            <mvc:mapping path="/**"
                allowed-origins="*"
                allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
                allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
                allow-credentials="true" />
    </mvc:cors>

    在springboot中,可以如下实现功能:

    创建一个配置类,继承 WebMvcConfigurerAdapter,实现跨域映射即可

    @Configuration
    public class WebAppConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**");
        }
    }

    到此已经可以解决跨域问题了!


    需要注意的是

     在springboot中,如果想要更加详细的控制跨域的请求的话有也可以对上面的方法进行细化控制,如下:

    @Configuration
    public class WebAppConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")        //可以跨域访问的路径
            .allowedOrigins("http://192.168.1.97") //允许访问的ip
            .allowedMethods("GET", "POST")      //允许的方法
            .allowCredentials(false).maxAge(3600); //用户证书验证,最大过期时间
        }
    }

    当然,如果你需要更加详细的控制跨域问题,那么可以在每个controller上进行设置并控制跨域(需要特别注意的是:必须指定方法,也就是methods ={RequestMethod.POST,RequestMethod.GET})

    @Api(value = "user", tags = "用户管理")
    @RestController("managerUser")
    @RequestMapping(value = "user")
    @CrossOrigin(origins = "http://192.168.1.97:8080", maxAge = 3600,methods = {RequestMethod.POST,RequestMethod.GET}) 
    public class UserController {}

    如果你需要更加详细的跨域控制,可以在方法上进行设置

    @RequestMapping(value = "AuditedUnitManager",method = RequestMethod.POST)
    @CrossOrigin(origins = "http://192.168.1.97:8080", maxAge = 3600) 
    public Map<String, Object> managerLogin() {}

    2018-07-30更新:

    目前项目跨域问题已经解决,但是前后分离的项目会导致一种情况:跨域会引起项目session的丢失,目前正在解决这个问题。晚点更新解决方案。

  • 相关阅读:
    Distributed Transaction Coordinator 服务因 3221229584 (0xC0001010) 服务性错误而停止 解决办法
    串行通信
    Sun下山后的IT格局 Oracle能抗衡IBM吗?
    串行通信比并行通信的速度更高
    ERP渠道商怨气冲天 自比“农民工”没有明天
    销售渠道
    甲骨文中国开始整合SUN中国 SUN市场部遭洗牌
    PHP 事件机制(2)
    (备忘)
    jquery键盘事件的更改
  • 原文地址:https://www.cnblogs.com/chenmc/p/9367255.html
Copyright © 2011-2022 走看看