Springboot设置接口允许跨域

!!!前排提醒 ,如果nginx 设置了跨域相关配置,代码就不用设置了!!!

 No 'Access-Control-Allow-Origin' header is present on the requested resource.

跨域问题解决方案:

 

CORSInterceptor.java:

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author : JCccc
 * @CreateTime : 2019/11/13
 * @Description : 跨域设置拦截器
 **/
@Component
public class CORSInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //添加跨域CORS
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader("Access-Control-Max-Age", "3600");

        return true;
    }
}

 WebConfigurer.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Author : JCccc
 * @CreateTime : 2019/10/25
 * @Description : 拦截器配置总部
 *   普及:Tomcat(Filter->Servlet->Interceptor->Controller)
 **/
@Configuration
public class WebConfigurer implements WebMvcConfigurer {

    @Autowired
    private CORSInterceptor corsInterceptor;


    // 这个方法是用来配置静态资源的,比如html,js,css,等等
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {


    }

    // 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

         registry.addInterceptor(corsInterceptor);

    }


    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedMethods("GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedOrigins("*");
    }



}

解决。

### 配置CORS以允许请求 在Spring Boot应用程序中,可以通过多种方式来配置CORS(源资源共享),以便处理来自不同名的HTTP请求。 #### 使用`@CrossOrigin`注解 对于简单的场景,在控制器方法上使用`@CrossOrigin`注解是一种便捷的方式。这不需要额外的具体配置就能生效[^1]: ```java @RestController public class MyController { @CrossOrigin(origins = "http://example.com") @GetMapping("/hello") public String hello() { return "Hello World"; } } ``` 此代码片段展示了如何通过指定特定原点来限定哪些网站可以访问该端点;也可以设置为通配符(*)表示接受所有来源的请求。 #### 全局CORS配置 当需要更复杂的控制时,则应该考虑全局范围内的CORS策略定义。可以在应用启动类或任意@Configuration标记下的Java Config文件里实现WebMvcConfigurer接口并重写addCorsMappings方法: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 对所有的路径都有效 .allowedOrigins("*") // 允许任何来源发起请求 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); // 支持的方法列表 } } ``` 上述例子设置了开放式的CORS规则给整个API服务[^2]。 #### 结合Spring Security使用 如果有集成Spring Security框架的情况,还需要特别注意开启CORS支持。可在Security配置中加入如下XML声明: ```xml <http> <!-- 默认采用Spring MVC内置的CORS机制 --> <cors /> </http> ``` 或者基于Java Config的形式完成相同功能: ```java @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final CorsConfigurationSource corsConfigurationSource; @Bean CorsConfigurationSource corsConfigurationSource() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOriginPattern("*"); config.setMaxAge(3600L); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); return source; } @Override protected void configure(HttpSecurity http) throws Exception { http.cors().configurationSource(corsConfigurationSource).and() ... } } ``` 这段代码实现了更加细粒度的安全性和灵活性管理的同时也确保了CORS的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值