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() { } }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
深入探究Java中的HashMap為什么會產生死循環(huán)
HashMap?死循環(huán)發(fā)生在?JDK?1.8?之前的版本中,這篇文章主要來和大家深入探究一下為什么Java中HashMap會產生死循環(huán),感興趣的小伙伴可以了解一下2023-05-05