JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Spring Boot 优雅的实现CORS跨域,java异步请求原理

wys521 2024-11-27 12:13:27 精选教程 16 ℃ 0 评论

这种方法是springboot 自带的,使用比较简单,在需要支持的跨域的接口上加上这个注解就可以了。

比如在我们项目的demo 接口加上注解.就表示这个接口支持跨域,其中origins = “*”

表示所有的地址都可以访问这个接口,也可以写具体的地址,表示只有这个地址访问才能访问到接口。

@CrossOrigin(origins = “*”)

测试

我们也来测试一下,启动项目后,在浏览器上运行我们的测试的html文件。

发现localhost:9090/zlflovemm/ 是可以访问的。

说明跨域是支持的。大伙可以先将注解去掉测试一下,然后加上注解测试一下进行对比。

这种方式虽然很简单,但是缺点也不小,需要跨域的接口都需要加上这个注解,这对前后端分离的项目是不友好的,所以这种方式基本上用的很少。

重写WebMvcConfigurer的addCorsMappings 方法。

=====================================================================================================

这种方法在实际项目中也用的比较多,是一种全局支持跨域的方法。

我们创建一个CorsConfig 类。内容如下:

@Configuration

public class CorsConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**")//项目中的所有接口都支持跨域

.allowedOrigins("*")//所有地址都可以访问,也可以配置具体地址

.allowCredentials(true)

.allowedMethods("*")//“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS”

.maxAge(3600);// 跨域允许时间

}

}

加上@Configuration 表示是配置类,在项目启动的时候会加载。实现WebMvcConfigurer 接口并重写addCorsMappings 方法。代码比较简单,也有注释。

测试的话,大家可以自行测试,我测试都是通过的和上面一样测试就可以,这里就不占篇幅了。

Filter

=====================================================================

除了上面方法外,也可以使用过滤器。我们创建一个CorsFilter 类,内容如下:

@Slf4j

@Component

public class CorsFilter implements Filter {

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse)servletResponse;

response.setHeader(“Access-Control-Allow-Origin”, “*”);

response.setHeader(“Access-Control-Allow-Methods”, “POST, PUT, GET, OPTIONS, DELETE”);

response.setHeader(“Access-Control-Max-Age”, “3600”);

response.setHeader(“Access-Control-Allow-Headers”, “Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization”);

response.setHeader("C

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

ache-Control", “no-cache, no-store, must-revalidate”);

response.setHeader(“Pragma”, “no-cache”);

filterChain.doFilter(servletRequest,response);

}

}

上面代码中设置response.setHeader(“Access-Control-Allow-Origin”, “*”);表示所有的地址都可以访问项目接口。

番外

=================================================================

接下来我们再介绍一个常用的功能,前后端分离,在访问接口的时候,有的 公司往往会增加一下专属的后缀名才能访问。实际上没有什么太大的作用,能稍微增加一下系统的安全性。这里我就简单是实现一下。真个都非常简单。

一样的是实现WebMvcConfigurer 接口,重写configurePathMatch你方法和增加一个dispatcherServlet。

代码如下:

@Override

public void configurePathMatch(PathMatchConfigurer configurer) {

configurer.setUseRegisteredSuffixPatternMatch(true);

}

@Bean

public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) {

ServletRegistrationBean bean = new ServletRegistrationBean(dispatcherServlet);

bean.addUrlMappings("*.zlf");

return bean;

}

这个功能实现,就只用这个多代码,configurePathMatch方法中设置的configurer.setUseRegisteredSuffixPatternMatch(true); 主要是将index 和index.* 都指向我们controller 中配置的@RequestMapping("/index")。

下面的servletRegistrationBean 方法主要是增加自定义拦截器,只有后缀为“.zlf”的接口才放行

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表