SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼
如果我們不進(jìn)行登錄攔截的話,即使我們跳過登錄頁面直接去訪問任意一個(gè)頁面也能訪問成功,那么登錄功能就沒有意義,同時(shí)也會(huì)存在安全問題,因?yàn)橛行┎僮魇且脩舻卿浐蟛拍軋?zhí)行的,如果用戶沒有登錄,該接口就獲取不了當(dāng)前訪問的用戶也就不知道是哪個(gè)用戶執(zhí)行了該操作就會(huì)出錯(cuò)。所以我們要進(jìn)行登錄判斷,如果沒有登錄則訪問任意頁面都跳轉(zhuǎn)到登錄頁面。
代碼實(shí)現(xiàn)
- 創(chuàng)建自定義過濾器LoginCheckFilter
- 在啟動(dòng)類上加入注解@ServletComponentScan,才會(huì)去掃描過濾器
- 完善過濾器的處理邏輯
具體實(shí)現(xiàn)
使用過濾器或者攔截器,在過濾器或者攔截器中判斷用戶是否已經(jīng)完成登錄,如果沒有登錄則跳轉(zhuǎn)到登錄頁面。如果登錄了或者該請(qǐng)求不需要登錄攔截器直接放行,交由具體的controller進(jìn)行處理。
LoginCheckFilter
package com.zxy.filter; //urlPatterns配置攔截路徑,這里表示攔截所有 @WebFilter(filterName="loginCheckFilter",urlPatterns = "/*") @Slf4j public class LoginCheckFilter implements Filter { //路徑匹配器,支持通配符 public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher(); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //1.獲取本次請(qǐng)求的URI String requestURI = request.getRequestURI(); //定義不需要處理的請(qǐng)求路徑,下面的*只是字符串,并不是通配符,后面通過check判斷時(shí)*號(hào)就視為通配符了 String[] urls = new String[]{ "/employee/login", "/employee/logout", "/backend/**", "/front/**" }; //2.判斷本次請(qǐng)求是否需要處理 boolean check = check(urls,requestURI); //3.如果不需要處理,直接放行 if(check){ filterChain.doFilter(request,response); return; } //4.如果需要處理,判斷是否登錄 //登錄狀態(tài),不需要處理,直接放行 if(request.getSession().getAttribute("employee")!=null){ filterChain.doFilter(request,response); return; } //5.如果未登錄則返回未登錄結(jié)果,通過輸出流方式向客戶端頁面響應(yīng)數(shù)據(jù),因?yàn)槲覀兎祷氐氖莢oid,所以不能return R.error("NOTLOGIN") response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN"))); return; } public boolean check(String[] urls,String requestURI){ for(String url:urls){ boolean match = PATH_MATCHER.match(url,requestURI); if(match){ return true; } } return false; } }
到此這篇關(guān)于SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot 登錄攔截內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)
這篇文章主要介紹了Mybatis-plus使用TableNameHandler分表詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Java實(shí)現(xiàn)默認(rèn)目錄查看與修改的方法
本項(xiàng)目介紹了Java如何獲取和修改默認(rèn)目錄,并通過示例代碼展示了如何在默認(rèn)目錄下創(chuàng)建和操作文件,盡管Java無法直接更改全局默認(rèn)目錄,但可以通過System.setProperty間接影響部分API的默認(rèn)行為,需要的朋友可以參考下2025-03-03mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù)的思路詳解
這篇文章主要介紹了mybatis實(shí)現(xiàn)mapper配置并查詢數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04簡(jiǎn)單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解spring bean作用域?qū)傩詓ingleton和prototype的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Spring boot+VUE實(shí)現(xiàn)token驗(yàn)證的示例代碼
本文詳細(xì)介紹了使用Vue和SpringBoot實(shí)現(xiàn)token認(rèn)證的方法,包括前后端交互流程、后端依賴導(dǎo)入、token工具類、攔截器、跨域處理、前端路由守衛(wèi)、請(qǐng)求攔截器等內(nèi)容,具有一定的參考價(jià)值,感興趣的可以了解一下2024-10-10