vue proxyTable 介面跨域請求問題處理_vue跨域請求

來源:互聯網
上載者:User

1、前言
在使用vue開發移動端app時,使用http請求擷取介面資料時,出現vue proxyTable介面跨域請求問題
2、vue http請求代碼如下:

this.$http.post(this.URL + '/mobile/?base/getBaseInfo.do',{type:1})  .then(function (res) {     alert(res.data.name)})     .catch(function (error) {         this.$toast('擷取基本資料異常');});

java後台代碼如下:

@ResponseBody@RequestMapping("/getBaseInfo")public Map<String,Object> getBaseInfo(Integer type,HttpServletResponse response){    Map<String,Object> map = new HashMap<String,Object>();    map.put("name", "張三");    return map;}

vue報的錯如下:

Failed to load http://127.0.0.1:8080/mobile/?base/getBaseInfo.do: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9001' is therefore not allowed access.

2、解決方案
在背景處理方法前加上代碼

response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization"); response.setHeader("Access-Control-Allow-Credentials","true");

修改後的後台代碼如:

@ResponseBody@RequestMapping("/getBaseInfo")public Map<String,Object> getBaseInfo(Integer type,HttpServletResponse response){    response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization"); response.setHeader("Access-Control-Allow-Credentials","true");    Map<String,Object> map = new HashMap<String,Object>();    map.put("name", "張三");    return map;}

這樣處理後,vue前端就可以正常接收到背景請求響應了。
3、添加過濾器統一處理。
如果有多個請求,每一個後台方法處理都添加這樣一段代碼,很麻煩,實際上我們可以寫一個過濾器統一處理
MobileFilter.java

@WebFilter("/MobileFilter")@Componentpublic class MobileFilter implements Filter {/**  * Default constructor.   */ public MobileFilter() { }/**  * @see Filter#destroy()  */  public void destroy() {     TODO Auto-generated method stub  }/**  * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        HttpServletResponse response = (HttpServletResponse) servletResponse;        response.setHeader("Access-Control-Allow-Origin", "*");         response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");         response.setHeader("Access-Control-Max-Age", "3600");         response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");         response.setHeader("Access-Control-Allow-Credentials","true");        filterChain.doFilter(servletRequest, servletResponse);    }    /**     * @see Filter#init(FilterConfig)     */    public void init(FilterConfig fConfig) throws ServletException {    }}

filter在web.xml中的配製:

<filter>     <filter-name>mobileFilter</filter-name>     <filter-class>com.base.filter.MobileFilter</filter-class> </filter> <filter-mapping>       <filter-name>mobileFilter</filter-name>       <url-pattern>/mobile/*</url-pattern> </filter-mapping> 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.