欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實(shí)現(xiàn)token登錄的示例代碼

 更新時(shí)間:2022年03月25日 10:27:56   作者:C'z?x  
在進(jìn)行登錄驗(yàn)證時(shí),我們需要session或cookie會話進(jìn)行驗(yàn)證,當(dāng)我們脫離瀏覽器用app等向服務(wù)端發(fā)請求就沒有session和cookie機(jī)制,這時(shí)我們就需要使用token令牌進(jìn)行登錄驗(yàn)證,本文就詳細(xì)的介紹一下,感興趣的可以了解一下

為什么引入token機(jī)制?

在進(jìn)行登錄驗(yàn)證時(shí),我們需要session或cookie會話進(jìn)行驗(yàn)證,客戶端包括瀏覽器、app、微信小程序、公眾號,只有瀏覽器有session和cookie機(jī)制,當(dāng)我們脫離瀏覽器用app等向服務(wù)端發(fā)請求就沒有session和cookie機(jī)制,這時(shí)我們就需要使用token令牌進(jìn)行登錄驗(yàn)證。

代碼實(shí)現(xiàn)

先建個util包,并創(chuàng)建TokenUtil類用于生成token

TokenUtil類代碼 

package com.qcby.util;
 
import com.qcby.entity.User;
 
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
 
public class TokenUtil {
    /**
     * 創(chuàng)建map用于存儲所有的令牌
     *
     * token  -  User
     */
    private static Map<String, User> tokenMap=new HashMap<>();
 
    /**
     * 生成token,存儲token-user對應(yīng)關(guān)系
     * 返回token令牌
     * @param user
     * @return
     */
    public static String generateToken(User user){
        //生成唯一不重復(fù)的字符串
        String token = UUID.randomUUID().toString();
        tokenMap.put(token,user);
        return token;
    }
 
    /**
     * 驗(yàn)證token是否合法
     * @param token
     * @return
     */
    public static boolean verify(String token){
        return tokenMap.containsKey(token);
    }
 
    /**
     * 根據(jù)token獲取用戶信息
     * @param token
     * @return
     */
    public static User getUser(String token){
        return tokenMap.get(token);
    }
}

LoginInterceptor類代碼

package com.qcby.interceptor;
 
import com.qcby.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class LoginInterceptor  implements HandlerInterceptor {
 
   
    //Controller邏輯執(zhí)行之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle....");
        String uri = request.getRequestURI();
        System.out.println("當(dāng)前路徑"+uri);
 
        /**
         * HandlerMethod=>Controller中標(biāo)注@RequestMapping的方法
         *  需要配置靜態(tài)資源不攔截時(shí),添加這塊邏輯  => 前后端分離項(xiàng)目
         */
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
 
        String token=request.getHeader("qcby-token");
 
        if (!TokenUtil.verify(token)) {
            // 未登錄跳轉(zhuǎn)到登錄界面
            throw  new RuntimeException("no login!");
        } else {
            return true;
        }
    }
 
    //Controller邏輯執(zhí)行完畢但是視圖解析器還未進(jìn)行解析之前
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle....");
    }
 
    //Controller邏輯和視圖解析器執(zhí)行完畢
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("afterCompletion....");
    }
}

實(shí)現(xiàn)類

@RestController
@RequestMapping("user")
public class UserController { 
    @Autowired
    private UserService userService;
    @ApiOperation("用戶登錄接口")
    @RequestMapping(value="login",method = {RequestMethod.GET,RequestMethod.POST})
    public Map<String,Object>login(User user){
        Map<String,Object> map=new HashMap<>();
        map.put("code",0);
        if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPassword())){
            map.put("msg","用戶或密碼為空!");
            return map;
        }
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("username",user.getUsername())
                .eq("password",user.getPassword());
        User user1=userService.getOne(queryWrapper);
        if(user1!=null){
 
            String token= TokenUtil.generateToken(user1);
            map.put("cod",1);
            map.put("data",user1);
            map.put("token",token);
        }else {
            map.put("msg","用戶名或密碼錯誤!");
        }
        return map;
    }
}

攔截器類可以參考這篇文章,這個token驗(yàn)證就是在攔截器上改動的。

SpringBoot攔截器實(shí)現(xiàn)登錄攔截 

需要有postman驗(yàn)證

到此這篇關(guān)于SpringBoot實(shí)現(xiàn)token登錄的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot token登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 線程池ThreadPoolExecutor使用簡介與方法實(shí)例

    線程池ThreadPoolExecutor使用簡介與方法實(shí)例

    今天小編就為大家分享一篇關(guān)于線程池ThreadPoolExecutor使用簡介與方法實(shí)例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 簡單談?wù)凧ava中的棧和堆

    簡單談?wù)凧ava中的棧和堆

    堆和棧都是Java用來在RAM中存放數(shù)據(jù)的地方,下面這篇文章主要給大家介紹了關(guān)于Java中棧和堆的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • Sentinel熔斷規(guī)則原理示例詳解分析

    Sentinel熔斷規(guī)則原理示例詳解分析

    這篇文章主要介紹了Sentinel熔斷規(guī)則,采用了示例代碼的方式對Sentinel熔斷規(guī)則進(jìn)行了詳細(xì)的分析,以便廣大讀者朋友們更易理解,有需要的朋友可以參考下
    2021-09-09
  • Java的垃圾回收機(jī)制實(shí)例分析

    Java的垃圾回收機(jī)制實(shí)例分析

    這篇文章主要介紹了Java的垃圾回收機(jī)制,結(jié)合實(shí)例形式分析了垃圾回收機(jī)制的原理及相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • 解決swaggerUI頁面沒有顯示Controller方法的坑

    解決swaggerUI頁面沒有顯示Controller方法的坑

    這篇文章主要介紹了解決swaggerUI頁面沒有顯示Controller方法的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA切換JDK版本詳細(xì)教程(超管用)

    IDEA切換JDK版本詳細(xì)教程(超管用)

    在我們項(xiàng)目開發(fā)的過程中可能會遇到JDK版本過高或者過低導(dǎo)致一些程序無法啟動,不兼容的問題,所以我們需要切換JDK的版本號,這篇文章主要給大家介紹了關(guān)于IDEA切換JDK版本的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • 多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案

    多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案

    這篇文章主要介紹了多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 單例模式 分析代碼優(yōu)化方法

    單例模式 分析代碼優(yōu)化方法

    這篇文章主要介紹了單例模式 分析代碼優(yōu)化方法,需要的朋友可以參考下
    2015-04-04
  • 手工搭建Servlet實(shí)現(xiàn)

    手工搭建Servlet實(shí)現(xiàn)

    現(xiàn)在作為一個Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實(shí)現(xiàn)了Servlet接口,并把Servlet容器注冊到了Web容器中。本文主要介紹了Servlet手工搭建,感興趣的可以了解一下
    2021-07-07
  • swagger文檔增強(qiáng)工具knife4j使用圖文詳解

    swagger文檔增強(qiáng)工具knife4j使用圖文詳解

    這篇文章主要介紹了swagger文檔增強(qiáng)工具knife4j使用詳解,想要使用knife4j非常簡單,只要在Springboot項(xiàng)目中引入knife4j的依賴即可,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評論