详解Spring Boot解决CORS跨域的三种方式
在Web应用程序中,我们经常需要解决CORS(跨域资源共享)问题。CORS是一种安全机制,用于限制跨域访问。本文将详细讲解Spring Boot解决CORS跨域的三种方式,并提供两个示例。
1. 添加依赖
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
在上面的代码中,我们添加了Spring Boot Web依赖。
2. 示例1:使用注解解决CORS跨域
以下是使用注解解决CORS跨域的基本流程:
- 在Controller类或方法上添加@CrossOrigin注解。
@RestController
public class MyController {
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上面的代码中,我们在MyController类上添加了@CrossOrigin注解,并指定了允许跨域访问的源地址。
- 运行应用程序,并访问跨域接口。
在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在Controller类上添加了@CrossOrigin注解,因此可以正常访问跨域接口。
3. 示例2:使用WebMvcConfigurer解决CORS跨域
以下是使用WebMvcConfigurer解决CORS跨域的基本流程:
- 创建一个名为CorsConfig的配置类,并实现WebMvcConfigurer接口。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
在上面的代码中,我们创建了一个名为CorsConfig的配置类,并实现了WebMvcConfigurer接口。我们重写了addCorsMappings方法,并使用CorsRegistry对象配置跨域访问的相关信息。
- 运行应用程序,并访问跨域接口。
在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在CorsConfig类中配置了跨域访问的相关信息,因此可以正常访问跨域接口。
4. 示例3:使用Filter解决CORS跨域
以下是使用Filter解决CORS跨域的基本流程:
- 创建一个名为CorsFilter的Filter类,并实现Filter接口。
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
res.setHeader("Access-Control-Allow-Headers", "*");
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Max-Age", "3600");
chain.doFilter(request, response);
}
}
在上面的代码中,我们创建了一个名为CorsFilter的Filter类,并实现了Filter接口。我们重写了doFilter方法,并使用HttpServletResponse对象设置跨域访问的相关信息。
- 在Spring Boot应用程序中注册CorsFilter。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Bean
public FilterRegistrationBean<CorsFilter> corsFilterRegistration() {
FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new CorsFilter());
registration.addUrlPatterns("/*");
registration.setName("corsFilter");
registration.setOrder(1);
return registration;
}
}
在上面的代码中,我们在Spring Boot应用程序中注册了CorsFilter,并设置了相关的配置信息。
- 运行应用程序,并访问跨域接口。
在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在CorsFilter类中设置了跨域访问的相关信息,因此可以正常访问跨域接口。
5. 总结
本文详细讲解了Spring Boot解决CORS跨域的三种方式,并提供了两个示例。在解决CORS跨域问题时,我们应根据实际需求选择合适的方式,并合理配置相关信息,以提高应用程序的可用性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解springboot解决CORS跨域的三种方式 - Python技术站