springboot中如何解决跨域问题呢?

乔欣 SpringBoot 发布时间:2023-07-06 16:45:08 阅读数:4326 1
下文笔者讲述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;
   }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202307/7018.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者