SpringBoot實(shí)現(xiàn)token登錄的示例代碼
為什么引入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)文章希望大家以后多多支持腳本之家!
- 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使用簡介與方法實(shí)例
今天小編就為大家分享一篇關(guān)于線程池ThreadPoolExecutor使用簡介與方法實(shí)例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03解決swaggerUI頁面沒有顯示Controller方法的坑
這篇文章主要介紹了解決swaggerUI頁面沒有顯示Controller方法的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案
這篇文章主要介紹了多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06swagger文檔增強(qiáng)工具knife4j使用圖文詳解
這篇文章主要介紹了swagger文檔增強(qiáng)工具knife4j使用詳解,想要使用knife4j非常簡單,只要在Springboot項(xiàng)目中引入knife4j的依賴即可,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08