亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java精品項(xiàng)目瑞吉外賣之登陸的完善與退出功能篇

 更新時(shí)間:2022年05月13日 09:05:33   作者:爪哇斗羅  
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為新增菜品和分頁(yè)查詢功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

上一篇:

后端登錄功能實(shí)現(xiàn)

一. 需求分析

員工登錄之后,頁(yè)面跳轉(zhuǎn)到后臺(tái)首頁(yè)(backend/index.html)此前會(huì)顯示用戶登錄的用戶名,點(diǎn)擊退出按鈕退出系統(tǒng)。

請(qǐng)求API:

說(shuō)明
請(qǐng)求地址URLemployee/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)文章

最新評(píng)論