最新springboot解决跨域的几种方式小结(springboot如何解决跨域问题)

网友投稿 383 2022-07-30


目录什么是跨域springboot解决跨域的几种方式方法一、SpringBoot的注解@CrossOrigin方式二:使用CorsFilter方式三:自定义过滤(web  filter)的方式 方式四:实现WebMvcConfigurer中addCorsMappings方法 方法五:采用nginx做动态代理

什么是跨域

跨域:指的是浏览器不能执⾏其他⽹站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。例如:a页⾯想获取b页⾯资源,如果a、b页⾯的协议、域名、端⼝、⼦域名不同,所进⾏的访问⾏动都是跨域的,⽽浏览器为了安全问题⼀般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这⼀点很重要同源策略:是指协议,域名,端⼝都要相同,其中有⼀个不同都会产⽣跨域;

springboot解决跨域的几种方式

方法一、SpringBoot的注解@CrossOrigin

直接在Controller方法或者类上增加@CrossOrigin注解,SpringMVC使用@CrossOrigin使用场景要求 jdk1.8+ Spring4.2+

@GetMapping("/hello")

@CrossOrigin

public String hdZFZGZiKLtello() {

return "hello:" + simpleDateFormat.format(new Date());

}

方式二:使用CorsFilter

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.cors.CorsConfiguration;

import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import org.springframework.web.filter.CorsFilter;

@Configuration

public class ConfigConfiguration {

@Bean

public CorsFilter CorsFilter() {

CorsConfiguration corsConfiguration = new CorsConfiguration();

corsConfiguration.addAllowedOriginPattern("*");

corsConfiguration.addAllowedHeader("*");

corsConfiguration.addAllowedMethod("*");

corsConfiguration.setAllowCredentials(true);

UrlBasedCorsConfigurationSource ub = new UrlBasedCorsConfigurationSource();

ub.registerCorsConfiguration("/**", corsConfiguration);

return new CorsFilter(ub);

}

}

方式三:自定义过dZFZGZiKLt滤(web  filter)的方式

@Component

public class CustomFilter implements Filter {

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletResponse res = (HttpServletResponse) servletResponse;

// 设置允许Cookie

res.addHeader("Access-Control-Allow-Credentials", "true");

// 允许http://xxx.com域(自行设置,这里只做示例)发起跨域请求

res.addHeader("Access-Control-Allow-Origin", "*");

// 设置允许跨域请求的方法

res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

// 允许跨域请求包含content-type

res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");

if (((HttpServletRequest) servletRequest).getMethod().equals("OPTIONS")) {

servletResponse.getWriter().println("ok");

return;

}

filterChain.doFilter(servletRequest, servletResponse);

}

}

方式四:实现WebMvcConfigurer中addCorsMappings方法

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component

public class MyWebMvcConfigurer implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**") // 匹配所有的路径

.allowCredentials(true) // 设置允许凭证

.allowedHeaders("*") // 设置请求头

.allowedMethods("GET", "POST", "PUT", "DELETE") // 设置允许的方式

.allowedOriginPatterns("*");

}

}

方法五:采用nginx做动态代理


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 中很好用的数据结构EnumSet
下一篇:java中VO和DTO之间的转换实现(vo和dto,对象转换)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~