Java开发中解决Js的跨域问题
主流方法有JSONP和CORS两种,这里记一下后者的方式,理论基础就是在请求的时候在http请求头中添加如下属性:
1 2
| Access-Control-Allow-Origin:http:
|
如果后端用Java开发,在返回请求中可以添加如下属性
1.在跨域问题中,如果不操作cookie,只需要在后端代码中添加如下代码就可以
1 2
| response.setHeader("Access-Control-Allow-Origin", "http://localhost:8989");
|
1
| @CrossOrigin(origins="http://localhost:8080")
|
这个注解就是对上边的代码的封装,源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CrossOrigin { @Deprecated String[] DEFAULT_ORIGINS = new String[]{"*"}; @Deprecated String[] DEFAULT_ALLOWED_HEADERS = new String[]{"*"}; @Deprecated boolean DEFAULT_ALLOW_CREDENTIALS = false; @Deprecated long DEFAULT_MAX_AGE = 1800L;
@AliasFor("origins") String[] value() default {};
@AliasFor("value") String[] origins() default {};
String[] allowedHeaders() default {};
String[] exposedHeaders() default {};
RequestMethod[] methods() default {};
String allowCredentials() default "";
long maxAge() default -1L; }
|
- @Deprecated:若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用。
2.如果跨域请求中涉及了对cookie的操作,就要添加一个属性,代码和注解分别为
1 2
| response.setHeader("Access-Control-Allow-Origin", "http://localhost:8989"); response.setHeader("Access-Control-Allow-Credentials", "true");
|
1
| @CrossOrigin(origins="http://localhost:8989",allowCredentials="true")
|