springboot過濾器執(zhí)行兩次的解決及跨域過濾器問題
更新時間:2023年12月11日 10:35:47 作者:源人生之路
這篇文章主要介紹了springboot過濾器執(zhí)行兩次的解決及跨域過濾器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
springboot過濾器執(zhí)行兩次的解決及跨域過濾器
在進行springboot整合過濾器的過程中可能會遇到過濾器執(zhí)行兩次的問題
針對這個問題可能出現(xiàn)的一種原因就是因為在請求執(zhí)行完之后瀏覽器會再發(fā)一次請求.ico的請求
解決的方法就是在執(zhí)行過濾器方法之前再加一層判斷就好了.
HttpServletRequest request = (HttpServletRequest)servletRequest;
if (request.getRequestURL().toString().matches(".+.ico$")) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
// do something yourself
filterChain.doFilter(servletRequest, servletResponse);
}
在不使用框架提供的跨域的方案的情況下可以自己注冊一個通用的跨域請求過濾器,具體的代碼如下
首先先注冊一個過濾器
到springboot
@Bean
public FilterRegistrationBean corsFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
CorsFilter corsFilter = new CorsFilter();
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setFilter(corsFilter);
return filterRegistrationBean;
}
具體過濾器的代碼
如下
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (request.getRequestURL().toString().matches(".+.ico$")) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
String origin = request.getHeader("Origin");
// 簡單請求跨域,如果是跨域請求在響應頭里面添加對應的Origin
if (!StringUtils.isEmpty(origin)) {
response.addHeader("Access-Control-Allow-Origin", origin);
}
// 非簡單請求跨域
response.addHeader("Access-Control-Allow-Headers", "content-type");
// 允許跨域請求的方法
response.addHeader("Access-Control-Allow-Methods", "*");
// 預檢命令緩存 1小時
// response.addHeader("Access-Control-Max-Age", "3600");
// 攜帶cookie的跨域
response.addHeader("Access-Control-Allow-Credentials", "true");
// 放行方法
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus 主鍵策略之type=IdType.ASSIGN_ID等詳解
雪花算法(雪花)是微博開源的分布式ID生成算法其核心思想就是:使用一個64位的長型的數(shù)字作為全局唯一ID,這篇文章主要介紹了MybatisPlus 主鍵策略(type=IdType.ASSIGN_ID等詳解),需要的朋友可以參考下2024-04-04
JavaWeb應用實例:用servlet實現(xiàn)oracle 基本增刪改查
本篇文章主要介紹了JavaWeb應用實例:用servlet實現(xiàn)oracle 基本增刪改查,非常具有實用價值,需要的朋友可以參考下。2017-01-01
SpringBoot在Controller層接收參數(shù)的n種姿勢(超詳細)
這篇文章主要介紹了SpringBoot在Controller層接收參數(shù)的常用方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01

