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; } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。