SpringBoot實現(xiàn)token登錄的示例代碼
為什么引入token機制?
在進行登錄驗證時,我們需要session或cookie會話進行驗證,客戶端包括瀏覽器、app、微信小程序、公眾號,只有瀏覽器有session和cookie機制,當我們脫離瀏覽器用app等向服務(wù)端發(fā)請求就沒有session和cookie機制,這時我們就需要使用token令牌進行登錄驗證。

代碼實現(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;
}
/**
* 驗證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("當前路徑"+uri);
/**
* HandlerMethod=>Controller中標注@RequestMapping的方法
* 需要配置靜態(tài)資源不攔截時,添加這塊邏輯 => 前后端分離項目
*/
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í)行完畢但是視圖解析器還未進行解析之前
@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....");
}
}實現(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驗證就是在攔截器上改動的。
需要有postman驗證



到此這篇關(guān)于SpringBoot實現(xiàn)token登錄的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot token登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot框架集成token實現(xiàn)登錄校驗功能
- SpringBoot JWT實現(xiàn)token登錄刷新功能
- SpringBoot整合Sa-Token實現(xiàn)登錄認證的示例代碼
- springboot+jwt+微信小程序授權(quán)登錄獲取token的方法實例
- SpringBoot整合token實現(xiàn)登錄認證的示例代碼
- SpringBoot登錄驗證token攔截器的實現(xiàn)
- SpringBoot使用Sa-Token實現(xiàn)登錄認證
- SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼
- SpringBoot整合Mybatis-Plus、Jwt實現(xiàn)登錄token設(shè)置
相關(guān)文章
SpringBoot對Druid配置SQL監(jiān)控功能失效問題及解決方法
這篇文章主要介紹了SpringBoot對Druid配置SQL監(jiān)控功能失效問題的解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
一文學(xué)會使用sa-token解決網(wǎng)站權(quán)限驗證
這篇文章主要為大家介紹了使用sa-token解決網(wǎng)站權(quán)限驗證方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
后端返回各種圖片形式在前端的轉(zhuǎn)換及展示方法對比
這篇文章主要給大家介紹了關(guān)于后端返回各種圖片形式在前端的轉(zhuǎn)換及展示方法對比的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-06-06
解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個文件無法傳輸多個問題
這篇文章主要介紹了解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個文件無法傳輸多個問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot實現(xiàn)跨域的幾種常用方式總結(jié)
跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,或者涉及到兩個不同域名的資源之間的交互,由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求,本文小編給大家分享了SpringBoot實現(xiàn)跨域的幾種常用方式,需要的朋友可以參考下2023-09-09
springBoot配置國產(chǎn)達夢數(shù)據(jù)庫的示例詳解
本文向大家介紹springBoot?配置國產(chǎn)達夢數(shù)據(jù)庫的相關(guān)知識,文章結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
Java編程技巧:if-else優(yōu)化實踐總結(jié)歸納
這篇文章主要介紹了Java中避免過多if-else的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2021-06-06
SpringBoot3讀取配置文件application.properties屬性值的幾種方式
這篇文章主要介紹了SpringBoot3讀取配置文件application.properties屬性值的幾種方式,文中通過代碼示例給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-11-11

