標籤:ret import filter row method app pac throw web.xml
上次給一個網站寫網站 前後端分離 最後跪在ajax跨域上面了 自己在網上找了個方法 親試可用 記錄一下
寫一個類 繼承HandlerInterceptorAdapter
package com.util;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class CommonInterceptor extends HandlerInterceptorAdapter {public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "*");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");response.setHeader("Access-Control-Allow-Credentials", "true"); // 是否允許瀏覽器攜帶使用者身份資訊(cookie)return true;}}
然後在xml裡面配置一下路徑
<mvc:interceptors><!--過濾所有請求,處理跨域請求問題 --><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.util.CommonInterceptor" /></mvc:interceptor></mvc:interceptors>
這樣就可以了 不過有篇部落格說針對簡單跨域沒問題。但是針對post+json請求卻失敗,提示跨域失敗。所以下面記錄一下他的解決方式
建立一個類 繼承 OncePerRequestFilter
public class CrossFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) { // CORS "pre-flight" request response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); response.addHeader("Access-Control-Allow-Headers", "Content-Type"); response.addHeader("Access-Control-Max-Age", "1800");//30 min } filterChain.doFilter(request, response); }}
web.xml裡面設定一下
<filter> <filter-name>cors</filter-name> <filter-class>cn.***.filter.CrossFilter</filter-class></filter><filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
然後就可以了 上述方式為spring3.0版本 如果是4.0版本可以用下面方式(無測)
xml裡面配置
<mvc:cors> <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,OPTIONS"/> </mvc:cors>
部分引用 飛昂之雪 的部落格 http://www.cnblogs.com/asfeixue/p/4363372.html
Springmvc ajax跨域請求處理