SpringBoot解决跨域请求拦截问题代码实例

网友投稿 482 2023-08-03

SpringBoot解决跨域请求拦截问题代码实例

前言

同源策略:判断是否是同源的,主要看这三点,协议,ip,端口。

同源策略就是浏览器出于网站安全性的考虑,限制不同源之间的资源相互访问的一种政策。

比如在域名https://baidu.com下,脚本不能够访问https://sina.com源下的资源,否则将会被浏览器拦截。

注意两点:

1.必须是脚本请求,比如AJAX请求。

但是如下情况不会产生跨域拦截

WEB1添加允许跨域请求,通过实现WebMvcConfigurer

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/hellohttp://");

}

}

再次访问将会返回正常数据

除了以上的配置外,还可以做更细致的限制

比如对请求的headers,请求的方法POST/GET...。请求的源进行限制。

同时还可以使用注解 @CrossOrigin来替换上面的配置。

@Slf4j

@RestController

public class Web1Controller {

@CrossOrigin

@RequestMapping("/hello")

public String hello(){

log.info("hello ");

return "hello," + new Date().toString();

}

}

注解可以用在类上,也可以用在方法上,但必须是控制器类

配置和上面一样,也是可以对方法,header,源进行个性化限制。

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface CrossOrigin {

/** @deprecated */

@Deprecated

String[] DEFAULT_ORIGINS = new String[]{"*"};

/** @deprecated */

@Deprecated

String[] DEFAULT_ALLOWED_HEADERS = new String[]{"*"};

/**hLpYivd @deprecated */

@Deprecated

boolean DEFAULT_ALLOW_CREDENTIALS = false;

/** @deprecated */

@Deprecated

long DEFAULT_MAX_AGE = 1800L;

@AliasFor("origins")

String[] value() default {};

@AliasFor("value")

String[] origins() default {};

String[] allowedHeaders() default {};

String[] exposedHeaders() default {};

RequhLpYivdestMethod[] methods() default {};

String allowCredentials() default "";

long maxAge() default -1L;

}

WEB1添加允许跨域请求,通过实现WebMvcConfigurer

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/hellohttp://");

}

}

再次访问将会返回正常数据。

除了以上的配置外,还可以做更细致的限制

比如对请求的headers,请求的方法POST/GET...。请求的源进行限制。

同时还可以使用注解 @CrossOrigin来替换上面的配置。

@Slf4j

@RestController

public class Web1Controller {

@CrossOrigin

@RequestMapping("/hello")

public String hello(){

log.info("hello ");

return "hello," + new Date().toString();

}

}

注解可以用在类上,也可以用在方法上,但必须是控制器类

配置和上面一样,也是可以对方法,header,源进行个性化限制。

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface CrossOrigin {

/** @deprecated */

@Deprecated

String[] DEFAULT_ORIGINS = new String[]{"*"};

/** @deprecated */

@Deprecated

String[] DEFAULT_ALLOWED_HEADERS = new String[]{"*"};

/**hLpYivd @deprecated */

@Deprecated

boolean DEFAULT_ALLOW_CREDENTIALS = false;

/** @deprecated */

@Deprecated

long DEFAULT_MAX_AGE = 1800L;

@AliasFor("origins")

String[] value() default {};

@AliasFor("value")

String[] origins() default {};

String[] allowedHeaders() default {};

String[] exposedHeaders() default {};

RequhLpYivdestMethod[] methods() default {};

String allowCredentials() default "";

long maxAge() default -1L;

}

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

上一篇:小程序框架开发方案设计
下一篇:Scala之Object的具体使用(小结)
相关文章

 发表评论

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