在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} }
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态