Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解
上次給一個(gè)網(wǎng)站寫(xiě)網(wǎng)站 前后端分離 最后跪在ajax跨域上面了 自己在網(wǎng)上找了個(gè)方法 親試可用 記錄一下
寫(xiě)一個(gè)類 繼承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> <!--過(guò)濾所有請(qǐng)求,處理跨域請(qǐng)求問(wèn)題 --> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.util.CommonInterceptor" /> </mvc:interceptor> </mvc:interceptors>
這樣就可以了 不過(guò)有篇博客說(shuō)針對(duì)簡(jiǎn)單跨域沒(méi)問(wèn)題。但是針對(duì)post+json請(qǐng)求卻失敗,提示跨域失敗。所以下面記錄一下他的解決方式
建立一個(gè)類 繼承 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里面設(shè)置一下
<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版本可以用下面方式(無(wú)測(cè))
xml里面配置
<mvc:cors>
<mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,OPTIONS"/>
</mvc:cors>
PS:使用SpringMVC解決Ajax跨域問(wèn)題
package com.mengyao.system.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
/**
* CORSFilter 解決跨域問(wèn)題
* @author mengyao
*
*/
@Component
public class InitCORSFilter extends OncePerRequestFilter {
private Logger logger = LoggerFactory.getLogger(InitCORSFilter.class);
public InitCORSFilter() {
logger.info("==== 初始化系統(tǒng)允許跨域請(qǐng)求 ====");
}
/**
* 解決跨域:Access-Control-Allow-Origin,值為*表示服務(wù)器端允許任意Domain訪問(wèn)請(qǐng)求
*/
@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())) {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, sid, mycustom, smuser");
response.addHeader("Access-Control-Max-Age", "1800");//30 min
}
filterChain.doFilter(request, response);
}
}
好了,代碼到此結(jié)束!
總結(jié)
以上所述是小編給大家介紹的Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作
這篇文章主要介紹了在IDEA中 實(shí)現(xiàn)給main方法附帶參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
MySQL?MyBatis?默認(rèn)插入當(dāng)前時(shí)間方式
這篇文章主要介紹了MySQL?MyBatis?默認(rèn)插入當(dāng)前時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java動(dòng)態(tài)規(guī)劃方式解決不同的二叉搜索樹(shù)
二叉搜索樹(shù)作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹(shù)的原理與實(shí)現(xiàn),需要的可以參考一下2022-10-10
Flutter ListView 上拉加載更多下拉刷新功能實(shí)現(xiàn)方法
這篇文章主要介紹了Flutter ListView 上拉加載更多下拉刷新功能實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
java簡(jiǎn)單手寫(xiě)版本實(shí)現(xiàn)時(shí)間輪算法
這篇文章主要為大家詳細(xì)介紹了java簡(jiǎn)單手寫(xiě)版本實(shí)現(xiàn)時(shí)間輪算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Sharding-Proxy分庫(kù)分表和數(shù)據(jù)加密使用場(chǎng)景分析
這篇文章主要介紹了Sharding-Proxy分庫(kù)分表和數(shù)據(jù)加密使用經(jīng)驗(yàn)分享,通過(guò)場(chǎng)景模擬分析結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Spring Security+JWT實(shí)現(xiàn)認(rèn)證與授權(quán)的實(shí)現(xiàn)
本文主要介紹了Spring Security+JWT實(shí)現(xiàn)認(rèn)證與授權(quán)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存的問(wèn)題
Mybatis內(nèi)置的二級(jí)緩存在分布式環(huán)境下存在分布式問(wèn)題,無(wú)法使用,但是我們可以整合Redis來(lái)實(shí)現(xiàn)分布式的二級(jí)緩存,這篇文章給大家介紹MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存,感興趣的朋友跟隨小編一起看看吧2023-11-11
Spring事物基礎(chǔ)知識(shí)及AOP相關(guān)陷阱分析
這篇文章主要介紹了Spring事物基礎(chǔ)知識(shí)及AOP相關(guān)陷阱,在平時(shí)的實(shí)際開(kāi)發(fā)中經(jīng)常會(huì)遇到,只有深入了解了其中的原理,才會(huì)在工作中能夠有效應(yīng)對(duì)2021-09-09
java圖片縮放實(shí)現(xiàn)圖片填充整個(gè)屏幕
這篇文章主要介紹了java圖片縮放實(shí)現(xiàn)圖片填充整個(gè)屏幕,本文提供了兩種解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05

