@CrossOrigin 解決SpringBoot跨域


@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錯誤

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM