标题:SpringBoot跨域问题的解决方法实例
什么是跨域问题?
跨域问题指的是在Web开发中,资源请求的协议、域名、端口三者中任意一个不同,都会造成跨域,从而出现“跨域问题”。例如,在我们的前端网页向不同域名下的后台服务请求数据时,就会存在跨域问题。
SpringBoot跨域问题的产生原因
SpringBoot框架默认的安全策略为同源策略,如果浏览器端的请求与服务端不符合同源策略,就会发生跨域问题。
解决方法
1.使用注解
@CrossOrigin
注解为Controller中的方法设置Origin,allowedHeaders和allowedMethods属性允许客户端通过JavaScript XMLHttpRequest请求访问跨域资源时获取服务器端响应。
示例一:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/user/{id}")
@CrossOrigin(origins = "http://localhost:8081")
public User getUser(@PathVariable Long id){
return userService.getUser(id);
}
}
2.配置跨域过滤器
使用Filter可以更好地控制跨域的细节。新建一个CorsFilter
类并继承OncePerRequestFilter
类,实现跨域设置,最后将该类注册到Web容器中即可。
示例二:
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, Authorization");
filterChain.doFilter(request, response);
}
}
在application.yml文件中配置:
spring:
mvc:
dispatch-options-request: true
filter:
cors:
enabled: true
总结
以上就是解决SpringBoot跨域问题的两种方法:使用@CrossOrigin
注解和配置跨域过滤器。使用这两种方法可以让我们更好地掌控跨域请求,实现安全可靠的Web开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot跨域问题的解决方法实例 - Python技术站