Springboot解锁部分跨域安全机制

跨域

定义

跨域是指在域名,端口,协议,三种任意一种不同,都会算作不同域,当想要访问的时候不同域,或者不同域之间请求资源,即是跨域。

为什么出现跨域

现在前后端分离的系统越来越多,前端和后端的端口不一致,前端想要访问测试环境中的后端服务等等,就会触发跨域。

流程

跨域是前端可以发送请求,后端也可以返回结果,但是浏览器拦截了返回结果,前端会显示CORS错误。
前端发送请求->服务端解析请求->服务端返回结果->浏览器拦截

解决方法

方法一

我是用的已解决办法是在Controller层中加入注解@CrossOrigin

@Controller
@CrossOrigin
public class AlarmRecordController {

}

注解CrossOrigin采用的是局部解锁跨域。也就是说在controller类或者是controller的方法上加入均可以。

未解决办法

以下几种方法,本人均使用,但是未成功。

全局配置

过滤器


/**过滤器
*/
@Configuration
public class GlobalCorsConfig {

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        FilterRegistrationBean<CorsFilter> corsFilterFilterRegistrationBean = new FilterRegistrationBean<>();
        //添加CORS配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //允许的域,不要写*,否则cookie就无法使用了
        corsConfiguration.addAllowedOrigin("*");
        //允许的头信息
        corsConfiguration.addAllowedHeader("*");
        //允许的请求方式
        corsConfiguration.setAllowedMethods(Arrays.asList("POST", "PUT", "GET", "OPTIONS", "DELETE"));
        //是否发送cookie信息
        corsConfiguration.setAllowCredentials(true);
        //预检请求的有效期,单位为秒
        corsConfiguration.setMaxAge(3600L);

        //添加映射路径,标识待拦截的请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration);

        corsFilterFilterRegistrationBean.setFilter(new CorsFilter(source));
        corsFilterFilterRegistrationBean.setOrder(-1);
        return corsFilterFilterRegistrationBean;
    }

}

拦截器


@Configuration
public class MyConfiguration implements WebMvcConfigurer {

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


使用环境

Springboot 2.7.0版本,以上一种方法,和本人版本不一致的可以尝试。

posted @   鱿鱼有宇  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示