@CrossOrigin使用場景要求 jdk1.8+ spring4.2+
@Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CrossOrigin { String[] DEFAULT_ORIGINS = { "*" }; String[] DEFAULT_ALLOWED_HEADERS = { "*" }; boolean DEFAULT_ALLOW_CREDENTIALS = true; long DEFAULT_MAX_AGE = 1800; /** * 同origins屬性一樣 */ @AliasFor("origins") String[] value() default {}; /** * 所有支持域的集合,例如"http://baidu.com"。 * <p>這些值都顯示在請求頭中的Access-Control-Allow-Origin * "*"代表所有域的請求都支持 * <p>如果沒有定義,所有請求的域都支持 * @see #value */ @AliasFor("value") String[] origins() default {}; /** * 允許請求頭重的header,默認都支持 */ String[] allowedHeaders() default {}; /** * 響應頭中允許訪問的header,默認為空 */ String[] exposedHeaders() default {}; /** * 請求支持的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。 * 默認支持RequestMapping中設置的方法 */ RequestMethod[] methods() default {}; /** * 是否允許cookie隨請求發送,使用時必須指定具體的域 */ String allowCredentials() default ""; /** * 預請求的結果的有效期,默認30分鍾 */ long maxAge() default -1; }
使用
@RestController //實現跨域注解 //origin="*"代表所有域名都可訪問 //maxAge飛行前響應的緩存持續時間的最大年齡,簡單來說就是Cookie的有效期 單位為秒 //若maxAge是負數,則代表為臨時Cookie,不會被持久化,Cookie信息保存在瀏覽器內存中,瀏覽器關閉Cookie就消失 @CrossOrigin(origins = "*",maxAge = 3600) public class UserController { @Autowoird private IUserDao userDao; //@CrossOrigin(origins = "http:www.baidu.com",maxAge = 3600) 也可以寫在具體方法上 處理時會進行合並 @GetMapping("getUser") public User getUser(@RequestParam(value="id") Integer id){ } }
一定要在某類 或者某方法上 添加類似 method = RequestMethod.POST 的屬性
在某個方法上添加@CrossOrigin 注解時 origins 屬性需要寫ip號 如果輸入localhost有時會出現403錯誤