如何使用spring解决跨域问题呢?

本文详细介绍了Spring框架如何通过`@CrossOrigin`注解解决Web应用中的跨域问题,包括全局、局部和同时使用的情况,并强调了在SpringSecurity中启用CORS配置的重要性。
摘要由CSDN通过智能技术生成

Spring解决跨域请求问题

1、spring提供解决跨域问题的方式

  • springMvc4.2以上提供了解决跨域请求的注解@CrossOrigin
    2、@CrossOrigin的使用
  • 该注解提供了2个参数分别是:origins: 允许可访问的域列表 maxAge:准备响应前的缓存持续的最大时间(以秒为单位)
  • 该注解可以使用在整个Controller上,也可以单独使用到某接口上(也可以同时使用)
    注意:当单独使用在某个接口上时,代表将该接口加入白名单,则这接口不会被拦截,若将注解加载整个Controller上则代表将该Controller下的接口都加入白名单,外部请求不会被拦截。
    eg:
--全局的
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {


    @GetMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }


    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

--局部的
@RestController
@RequestMapping("/account")
public class AccountController {

    @CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
    @GetMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }

    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}
--同时使用
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {


    @CrossOrigin(origins = "http://domain2.com")
    @GetMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }


    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

3、Spring Security配置cors
注意: 请确保在Spring安全级别启用CORS,并允许它利用Spring MVC级别定义的配置

//启用cors
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()...
    }
}

全局配置cors

@Configuration
public class MyConfiguration {


    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://domain2.com")
                        .allowedMethods("PUT", "DELETE")
                        .allowedHeaders("header1", "header2", "header3")
                        .exposedHeaders("header1", "header2")
                        .allowCredentials(false).maxAge(3600);
            }
        };
    }
}
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值