Java精品項(xiàng)目瑞吉外賣之登陸的完善與退出功能篇
上一篇:
一. 需求分析
員工登錄之后,頁(yè)面跳轉(zhuǎn)到后臺(tái)首頁(yè)(backend/index.html)此前會(huì)顯示用戶登錄的用戶名,點(diǎn)擊退出按鈕退出系統(tǒng)。
請(qǐng)求API:
說(shuō)明 | 值 |
請(qǐng)求地址URL | employee/loginout |
請(qǐng)求參數(shù) | 無(wú) |
返回參數(shù) | ({ "code": 1, "msg": null, "data": "退出成功", "map": {} } |
二.功能實(shí)現(xiàn)
只需要清除session即可,在controller中添加如下代碼:
/** * 后管登出 * @param request * @return */ @PostMapping("/logout") public R<String> loginOut(HttpServletRequest request){ // 去除session request.getSession().removeAttribute("employee"); return R.success("退出成功"); }
三.功能測(cè)試
登錄成功后是有session記錄的:
點(diǎn)擊頁(yè)碼按鈕退出后session清除,并返回登錄頁(yè)面就表示成功了。
四. 登錄功能完善
4.1 問(wèn)題分析
前面已經(jīng)完成了登錄功能的開(kāi)發(fā),但會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,就是員工不登錄情況下,依然能夠進(jìn)入到目標(biāo)頁(yè)面很顯然這并不是我們想看到的。
那如何實(shí)現(xiàn)呢?使用過(guò)濾器或者攔截器,在過(guò)濾器或者攔截器中判斷用戶是否是登錄狀態(tài),沒(méi)有登錄則跳轉(zhuǎn)到登錄頁(yè)面。
4.2 實(shí)現(xiàn)步驟
- 創(chuàng)建自定義過(guò)濾器LoginCheckFilter.java
- 啟動(dòng)類上加入@ServletComponentScan(這個(gè)不要忘記了)
- 完善過(guò)濾器處理邏輯
過(guò)濾器處理邏輯主要如下:
- 獲取本次處理請(qǐng)求的URL
- 判斷本次請(qǐng)求是否需要處理
- 若不需要,直接放行
- 判斷登陸狀態(tài),若已經(jīng)登陸直接放行
- 若未登陸則返回未登陸結(jié)果
流程圖如下:
4.3 代碼實(shí)現(xiàn)
package com.itheima.reggie.filter; import com.alibaba.fastjson.JSON; import com.itheima.reggie.common.R; import lombok.extern.slf4j.Slf4j; import org.springframework.util.AntPathMatcher; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author jektong * @date 2022/4/26 */ @WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*") @Slf4j public class LoginCheckFilter implements Filter { // 進(jìn)行路徑匹配,支持通配符 public static final AntPathMatcher ANT_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; //獲取本次處理請(qǐng)求的URL String requestURI = request.getRequestURI(); String[] urls = new String[]{ "/employee/login", "/employee/logout", "/backend/**", "/front/**" }; //判斷本次請(qǐng)求是否需要處理 boolean check = this.check(urls, requestURI); log.info("攔截到請(qǐng)求:{}", requestURI); //若不需要,直接放行 if (check){ log.info("請(qǐng)求無(wú)需登錄:{}", requestURI); filterChain.doFilter(request,response); return; } //判斷登陸狀態(tài),若已經(jīng)登陸直接放行 if(request.getSession().getAttribute("employee") != null){ log.info("用戶已登錄,id為:{}", request.getSession().getAttribute("employee")); filterChain.doFilter(request,response); return; } //若未登陸則返回未登陸結(jié)果 response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN"))); return; } /** * 進(jìn)行路徑匹配,檢查是否可以放行 * @param urls 不攔截的路徑 * @param requestURI 請(qǐng)求路徑 * @return */ public boolean check(String[] urls, String requestURI) { for(String url : urls){ boolean match = ANT_PATH_MATCHER.match(url,requestURI); if(match){ return true; } } return false; } }
前端代碼(request.js)會(huì)通過(guò)一個(gè)值("NOTLOGIN")來(lái)進(jìn)行攔截器響應(yīng)匹配后進(jìn)行頁(yè)面的跳轉(zhuǎn):
// 響應(yīng)攔截器 service.interceptors.response.use(res => { if (res.data.code === 0 && res.data.msg === 'NOTLOGIN') {// 返回登錄頁(yè)面 console.log('---/backend/page/login/login.html---') localStorage.removeItem('userInfo') window.top.location.href = '/backend/page/login/login.html' } else { return res.data } }
到此這篇關(guān)于Java精品項(xiàng)目瑞吉外賣之登陸的完善與退出功能篇的文章就介紹到這了,更多相關(guān)Java外賣系統(tǒng)登陸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java開(kāi)源工具iText生成PDF簡(jiǎn)單實(shí)例
這篇文章主要介紹了Java開(kāi)源工具iText生成PDF簡(jiǎn)單實(shí)例,本文給出了3段代碼實(shí)例,講解創(chuàng)建一個(gè)簡(jiǎn)單PDF文件,在PDF中添加表格以及在PDF中添加圖片,需要的朋友可以參考下2015-07-07java微信開(kāi)發(fā)API第二步 獲取和回復(fù)消息
這篇文章主要為大家詳細(xì)介紹了java微信開(kāi)發(fā)API第二步,獲取消息和回復(fù)消息,感興趣的小伙伴們可以參考一下2016-06-06rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法
本篇文章主要介紹了rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02java+testng+selenium的自動(dòng)化測(cè)試實(shí)例
這篇文章主要介紹了java+testng+selenium的自動(dòng)化測(cè)試實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11springboot?靜態(tài)方法中使用@Autowired注入方式
這篇文章主要介紹了springboot?靜態(tài)方法中使用@Autowired注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02java如何拷貝復(fù)制對(duì)象和集合問(wèn)題
這篇文章主要介紹了java如何拷貝復(fù)制對(duì)象和集合問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09java顯示當(dāng)前運(yùn)行時(shí)的參數(shù)(java運(yùn)行參數(shù))
這篇文章主要介紹了java顯示當(dāng)前運(yùn)行時(shí)參數(shù)的示例(java運(yùn)行參數(shù)),需要的朋友可以參考下2014-04-04解決springcloud-eureka注冊(cè)時(shí)的ip問(wèn)題
這篇文章主要介紹了解決springcloud-eureka注冊(cè)時(shí)的ip問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java Hibernate中的持久化類和實(shí)體類關(guān)系
Hibernate是一種Java對(duì)象關(guān)系映射框架,通過(guò)持久化類將Java對(duì)象映射到數(shù)據(jù)庫(kù)表中。持久化類需要實(shí)現(xiàn)無(wú)參構(gòu)造器、具有標(biāo)識(shí)屬性和使用注解或XML進(jìn)行映射。Hibernate通過(guò)Session來(lái)管理對(duì)象的狀態(tài),包括臨時(shí)狀態(tài)、持久化狀態(tài)和游離狀態(tài)2023-04-04