springboot中如何解决跨域问题呢?
下文笔者讲述SpringBoot中处理跨域问题的方法及示例分享
一、跨域简介
URL的组成:
//协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址
http://www.java265.com:8080/
只要协议,子域名,主域名,端口号这四项组成部分中有一项不同
就是不同域
访问不同域的东西,我们称之为"跨域"
二、SpringBoot解决跨域问题
方式1:
使用@CrossOrigin注解
当类或方法上添加@CrossOrigin注解
则这个方法或类下面的方法都允许跨域访问
方式2:
实现WebMvcConfigurer
方式3:
实现Fiter接口在请求中
添加一些Header来解决跨域
方式4:
使用nginx转发
例
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/test")
public Object test(){
return userService.list();
}
}
2、实现WebMvcConfigurer
@Configuration
class CORSConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
3、Filter
通过实现Fiter接口
在请求中添加一些Header来解决跨域的问题
@Component
public class CORSFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
response.getWriter().println("ok");
return;
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
4、Nginx
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
if ($request_method = 'OPTIONS') {
return 204;
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


