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

代碼實(shí)現(xiàn)
先建個(gè)util包,并創(chuàng)建TokenUtil類(lèi)用于生成token

TokenUtil類(lèi)代碼
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用于存儲(chǔ)所有的令牌
*
* token - User
*/
private static Map<String, User> tokenMap=new HashMap<>();
/**
* 生成token,存儲(chǔ)token-user對(duì)應(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類(lèi)代碼
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)類(lèi)
@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","用戶名或密碼錯(cuò)誤!");
}
return map;
}
}攔截器類(lèi)可以參考這篇文章,這個(gè)token驗(yàn)證就是在攔截器上改動(dòng)的。
SpringBoot攔截器實(shí)現(xiàn)登錄攔截
需要有postman驗(yàn)證



到此這篇關(guān)于SpringBoot實(shí)現(xiàn)token登錄的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot token登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot框架集成token實(shí)現(xiàn)登錄校驗(yàn)功能
- SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能
- SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼
- springboot+jwt+微信小程序授權(quán)登錄獲取token的方法實(shí)例
- SpringBoot整合token實(shí)現(xiàn)登錄認(rèn)證的示例代碼
- SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn)
- SpringBoot使用Sa-Token實(shí)現(xiàn)登錄認(rèn)證
- SpringBoot集成JWT實(shí)現(xiàn)Token登錄驗(yàn)證的示例代碼
- SpringBoot整合Mybatis-Plus、Jwt實(shí)現(xiàn)登錄token設(shè)置
相關(guān)文章
線程池ThreadPoolExecutor使用簡(jiǎn)介與方法實(shí)例
今天小編就為大家分享一篇關(guān)于線程池ThreadPoolExecutor使用簡(jiǎn)介與方法實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
解決swaggerUI頁(yè)面沒(méi)有顯示Controller方法的坑
這篇文章主要介紹了解決swaggerUI頁(yè)面沒(méi)有顯示Controller方法的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案
這篇文章主要介紹了多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
swagger文檔增強(qiáng)工具knife4j使用圖文詳解
這篇文章主要介紹了swagger文檔增強(qiáng)工具knife4j使用詳解,想要使用knife4j非常簡(jiǎn)單,只要在Springboot項(xiàng)目中引入knife4j的依賴即可,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

