java filter過濾器,SpringBoot添加過濾器

 2023-12-06 阅读 39 评论 0

摘要:問題描述 在Springboot中添加過濾器來進行請求攔截配置 解決方案: 1、在啟動類上加上@ServletComponentScan//掃描過濾器使用 2、創建filter包專業放過濾器 3、在該包中創建過濾器 @Slf4j @WebFilter(filterName = "loginCheckFilter",urlPatt

問題描述

在Springboot中添加過濾器來進行請求攔截配置


解決方案:

1、在啟動類上加上@ServletComponentScan//掃描過濾器使用

2、創建filter包專業放過濾器

3、在該包中創建過濾器

@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;//向上轉型HttpServletResponse response = (HttpServletResponse) servletResponse;log.info("攔截請求: {}",request.getRequestURI());//這個是日志信息,直接輸出攔截的請求//這里書寫業務邏輯!!!filterChain.doFilter(request,response);//放行}
}

4、然后在該類中書寫寫邏輯業務,這里以登錄攔截為例,配合前端vue的響應攔截器書寫的!

/*** 檢查用戶是否完成登錄* @author mrs* @create 2022-05-31 10:57*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")//先全部攔截
public class LoginCheckFilter implements Filter {//路徑匹配器public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;//向上轉型HttpServletResponse response = (HttpServletResponse) servletResponse;//1、獲取前端的本次請求的URIString requestURI = request.getRequestURI();String[] urls = new String[]{//列舉放行資源"/employee/login",//放行登錄請求"/employee/login",//放行注冊請求"/backend/**",//放行靜態資源和靜態頁面"/front/**"};//2、判斷本次請求是否需要處理boolean check = check(requestURI, urls);//3、如果不需要處理,則直接放行if(check){filterChain.doFilter(request,response);//放行return;}//4、判斷登錄狀態,如果已登錄,則直接放行if(request.getSession().getAttribute("employee") != null){filterChain.doFilter(request,response);//放行return;}//5、如果未登錄則返回未登錄結果,通過輸出流的方式向客戶端頁面響應數據// 這里響應的是backend/js/request.js中的響應攔截器response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));}/*** 路徑匹配,檢查本次請求是否放行* @param requetURI 從前端傳回的請求* @param urls 上面不用攔截的請求* @return 進行對比返回*/public boolean check(String requetURI,String[] urls){for (String url : urls) {boolean match = PATH_MATCHER.match(url, requetURI);//使用上面定義的路徑匹配器,進行比對if(match){return true;//匹配成功就返回true}}return false;//一個也沒匹配上,返回false}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/192231.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息