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)文章
java編程實現(xiàn)簡單的網(wǎng)絡爬蟲示例過程
這篇文章主要為大家介紹了如何使用java編程實現(xiàn)一個簡單的網(wǎng)絡爬蟲示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10
深入探究Java中的HashMap為什么會產(chǎn)生死循環(huán)
HashMap?死循環(huán)發(fā)生在?JDK?1.8?之前的版本中,這篇文章主要來和大家深入探究一下為什么Java中HashMap會產(chǎn)生死循環(huán),感興趣的小伙伴可以了解一下2023-05-05
Java中如何將String轉(zhuǎn)JSONObject
這篇文章主要介紹了Java中如何將String轉(zhuǎn)JSONObject,String類型轉(zhuǎn)JSONObject,下面有兩種方式可以進行轉(zhuǎn)換,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-05-05

