SpringBoot中实现WebMvcConfigurer,配置跨域无效

跨域配置如下:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    /**
     * 跨域配置
     *  - Access-Control-Allow-Origin的介绍:
     *      - https://blog.csdn.net/MicroAnswer/article/details/102913571
     *  - SpringMVC路径匹配规则:
     *      - 1、https://wenku.baidu.com/view/508c0286b3717fd5360cba1aa8114431b90d8ec8.html
     *      - 2、https://www.cnblogs.com/selfchange/p/spring.html
     *
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许跨域访问的路径
                .allowedOrigins("http://localhost:8083") // 允许跨域访问的源
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许的请求方法类型
                .maxAge(168000) // 预检间隔时间
                .allow

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WebMvcConfigurer配置跨域可以通过以下步骤实现: 1. 创建一个类并实现WebMvcConfigurer接口。 2. 重写addCorsMappings方法并在其添加跨域配置。 3. 在跨域配置设置允许的请求来源、请求方法和响应头信息等。 示例代码如下: @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true) .maxAge(360); } } 以上代码,我们设置了允许所有来源的请求,允许的请求方法包括GET、POST、PUT和DELETE,允许所有请求头信息,允许携带凭证信息,缓存时间为360秒。 在Spring Boot应用,我们可以将该配置类注入到容器,即可实现跨域配置。 ### 回答2: 在Web开发跨域是一种常见的问题,例如前端的Ajax请求可能会需要访问不同域名下的服务器,而浏览器的同源策略会限制这样的访问。为了解决跨域问题,我们需要进行一些配置。 在Spring MVC,可以通过实现WebMvcConfigurer接口来配置跨域。其原理是在响应头加入一些跨域相关的信息,告诉浏览器允许该请求访问,例如Access-Control-Allow-Origin、Access-Control-Allow-Methods等。下面是一个示例: ``` @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); } } ``` 这段代码,我们使用@Configuration注解将该类标记为配置类,并实现WebMvcConfigurer接口。其addCorsMappings()方法用来添加跨域映射。在本例,我们允许所有的来源(allowedOrigins("*")),允许所有的HTTP方法(allowedMethods("*"))和HTTP头(allowedHeaders("*")),并支持Cookie跨域(allowCredentials(true))。同时,我们将跨域缓存时间设置为3600秒(maxAge(3600))。 另外,我们还可以在Controller方法使用@CrossOrigin注解来单独配置跨域,例如: ``` @RestController @RequestMapping("/api") @CrossOrigin(origins = "*", maxAge = 3600) public class ApiController { // ...other methods } ``` 这样,我们只需要在Controller类上添加@CrossOrigin注解即可。 总之,通过WebMvcConfigurer和@CrossOrigin注解,我们可以很方便地配置跨域,解决不同域名之间的访问问题。 ### 回答3: 跨域问题通常会在Web开发遇到,它是指在一个网站的页面使用不同于来源网站的资源,比如在A网站的页面请求B网站的数据,由于浏览器的同源策略限制,这种跨域请求通常会被拒绝。在实际的开发,我们需要配置一些参数来解决跨域问题,这里我们就以Spring MVCWebMvcConfigurer为例,来详细介绍如何配置跨域。 首先,我们需要在WebMvcConfigurer添加一个addCorsMappings方法,该方法用于添加允许跨域请求的路径和请求方法,示例代码如下: @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*"); } } 其,addMapping方法用于指定允许跨域请求的路径,上述示例,我们指定了/api/**表示所有以/api/开头的路径都允许跨域请求;allowedOrigins方法用于指定允许跨域请求的来源,*表示任意来源都允许;allowedMethods方法用于指定允许的请求方法,*表示任意请求方法都允许;allowedHeaders方法用于指定允许的请求头信息,*表示任意请求头信息都允许。 上述配置可以让前端在任意请求方式下,都可以访问我们定义的API,但这样会带来安全风险,因为不安全的请求也被允许了。因此,在实际生产环境,建议使用较为严格的策略,例如指定允许的来源、请求方法和请求头信息等。 除了在WebMvcConfigurer配置跨域,还可以通过在Controller添加@CrossOrigin注解来实现跨域请求,示例如下: @RestController @RequestMapping("/api") @CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST}) public class ApiController { @GetMapping("/data") public Map<String, Object> getData() { Map<String, Object> data = new HashMap<>(); data.put("name", "Tom"); data.put("age", 25); return data; } } 在上述示例,我们通过在Controller类上添加@CrossOrigin注解来允许跨域请求,origins表示允许跨域请求的来源,allowedHeaders表示允许的请求头信息,methods表示允许的请求方法。这种方式可以单独为某个API开启跨域请求,不会对其他API造成影响。但需要注意的是,这种方式只能在Controller类上添加跨域注解,而不能在方法上添加。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值