Cors實現(xiàn)java后端完全跨域?qū)嵗?/h1>
更新時間:2017年05月27日 09:23:51 作者:lifereader
本篇文章主要介紹了Cors實現(xiàn)java后端完全跨域?qū)嵗?,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
http://www.dbjr.com.cn/article/114838.htm這篇文章很詳細(xì)的介紹了JS的跨域,給出的解決方案是springboot的方式,假如不用spring boot 或者 spring版本低于4.2就需要自己實現(xiàn);
參考了spring boot的實現(xiàn)方式,并有所簡化,代碼如下:
package com.lvluo.web.filter.CorsFilter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
public class CorsFilter implements Filter {
public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
public static final String OPTIONS = "OPTIONS";
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
if (isCorsRequest(httpRequest)) {
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods",
"POST, GET, PUT, DELETE");
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
// response.setIntHeader("Access-Control-Max-Age", 1728000);
httpResponse
.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization");
if (isPreFlightRequest(httpRequest)) {
return;
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) {
}
public void destroy() {
}
public boolean isCorsRequest(HttpServletRequest request) {
return (request.getHeader(HttpHeaders.ORIGIN) != null);
}
/**
* Returns {@code true} if the request is a valid CORS pre-flight one.
*/
public boolean isPreFlightRequest(HttpServletRequest request) {
return (isCorsRequest(request) && OPTIONS.equals(request.getMethod()) && request
.getHeader(ACCESS_CONTROL_REQUEST_METHOD) != null);
}
}
接著在web.xml配置filter即可
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>com.lvluo.web.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
前端測試的JS代碼,其中客戶端的
$.ajax({
headers : {
'Authorization' :'Bearer iBoxSO9QdrHR0'
},
url: 'http://localhost:8080/service/api/ping',
type: 'GET',
dataType: 'json',
success : function(result){
$("#result").html(result.code);
}
})
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
-
解決HashMap多線程操作導(dǎo)致死循環(huán)問題
文章主要講述了在多線程環(huán)境下,HashMap的并發(fā)操作可能導(dǎo)致的死循環(huán)問題,包括鏈表/紅黑樹結(jié)構(gòu)破壞、擴(kuò)容過程中的混亂以及讀寫不一致等,為了解決這些問題,文章建議使用線程安全的ConcurrentHashMap替代HashMap,并介紹了其分段鎖機(jī)制和優(yōu)化方案 2025-01-01
-
springboot實現(xiàn)跨域的五種方式總結(jié)
在Spring Boot中實現(xiàn)跨域,可以采用全局跨域和局部跨域兩種方式,下面這篇文章主要給大家介紹了關(guān)于springboot實現(xiàn)跨域的五種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下 2024-01-01
-
java利用Future實現(xiàn)多線程執(zhí)行與結(jié)果聚合實例代碼
這篇文章主要給大家介紹了關(guān)于java利用Future實現(xiàn)多線程執(zhí)行與結(jié)果聚合的相關(guān)資料,Future模式的核心,去除了主函數(shù)的等待時間,并使得原本需要等待的時間段可以用于處理其他業(yè)務(wù)邏輯,需要的朋友可以參考下 2021-12-12
-
Java簡單使用EasyExcel操作讀寫excel的步驟與要點
相信現(xiàn)在很多搞后端的同學(xué)大部分做的都是后臺管理系統(tǒng),那么管理系統(tǒng)就肯定免不了Excel的導(dǎo)出導(dǎo)入功能,下面這篇文章主要給大家介紹了關(guān)于Java簡單使用EasyExcel操作讀寫excel的步驟與要點,需要的朋友可以參考下 2022-09-09
-
Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理
這篇文章主要介紹了Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教 2024-01-01
最新評論
http://www.dbjr.com.cn/article/114838.htm這篇文章很詳細(xì)的介紹了JS的跨域,給出的解決方案是springboot的方式,假如不用spring boot 或者 spring版本低于4.2就需要自己實現(xiàn);
參考了spring boot的實現(xiàn)方式,并有所簡化,代碼如下:
package com.lvluo.web.filter.CorsFilter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; public class CorsFilter implements Filter { public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method"; public static final String OPTIONS = "OPTIONS"; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; if (isCorsRequest(httpRequest)) { httpResponse.setHeader("Access-Control-Allow-Origin", "*"); httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE"); httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); // response.setIntHeader("Access-Control-Max-Age", 1728000); httpResponse .setHeader( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization"); if (isPreFlightRequest(httpRequest)) { return; } } chain.doFilter(request, response); } public void init(FilterConfig filterConfig) { } public void destroy() { } public boolean isCorsRequest(HttpServletRequest request) { return (request.getHeader(HttpHeaders.ORIGIN) != null); } /** * Returns {@code true} if the request is a valid CORS pre-flight one. */ public boolean isPreFlightRequest(HttpServletRequest request) { return (isCorsRequest(request) && OPTIONS.equals(request.getMethod()) && request .getHeader(ACCESS_CONTROL_REQUEST_METHOD) != null); } }
接著在web.xml配置filter即可
<filter> <filter-name>corsFilter</filter-name> <filter-class>com.lvluo.web.filter.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>corsFilter</filter-name> <url-pattern>/api/*</url-pattern> </filter-mapping>
前端測試的JS代碼,其中客戶端的
$.ajax({ headers : { 'Authorization' :'Bearer iBoxSO9QdrHR0' }, url: 'http://localhost:8080/service/api/ping', type: 'GET', dataType: 'json', success : function(result){ $("#result").html(result.code); } })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決HashMap多線程操作導(dǎo)致死循環(huán)問題
文章主要講述了在多線程環(huán)境下,HashMap的并發(fā)操作可能導(dǎo)致的死循環(huán)問題,包括鏈表/紅黑樹結(jié)構(gòu)破壞、擴(kuò)容過程中的混亂以及讀寫不一致等,為了解決這些問題,文章建議使用線程安全的ConcurrentHashMap替代HashMap,并介紹了其分段鎖機(jī)制和優(yōu)化方案2025-01-01springboot實現(xiàn)跨域的五種方式總結(jié)
在Spring Boot中實現(xiàn)跨域,可以采用全局跨域和局部跨域兩種方式,下面這篇文章主要給大家介紹了關(guān)于springboot實現(xiàn)跨域的五種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01java利用Future實現(xiàn)多線程執(zhí)行與結(jié)果聚合實例代碼
這篇文章主要給大家介紹了關(guān)于java利用Future實現(xiàn)多線程執(zhí)行與結(jié)果聚合的相關(guān)資料,Future模式的核心,去除了主函數(shù)的等待時間,并使得原本需要等待的時間段可以用于處理其他業(yè)務(wù)邏輯,需要的朋友可以參考下2021-12-12Java簡單使用EasyExcel操作讀寫excel的步驟與要點
相信現(xiàn)在很多搞后端的同學(xué)大部分做的都是后臺管理系統(tǒng),那么管理系統(tǒng)就肯定免不了Excel的導(dǎo)出導(dǎo)入功能,下面這篇文章主要給大家介紹了關(guān)于Java簡單使用EasyExcel操作讀寫excel的步驟與要點,需要的朋友可以參考下2022-09-09Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理
這篇文章主要介紹了Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01