您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“SpringBoot如何實現token登錄”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SpringBoot如何實現token登錄”這篇文章吧。
在進行登錄驗證時,我們需要session或cookie會話進行驗證,客戶端包括瀏覽器、app、微信小程序、公眾號,只有瀏覽器有session和cookie機制,當我們脫離瀏覽器用app等向服務端發請求就沒有session和cookie機制,這時我們就需要使用token令牌進行登錄驗證。
先建個util包,并創建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 { /** * 創建map用于存儲所有的令牌 * * token - User */ private static Map<String, User> tokenMap=new HashMap<>(); /** * 生成token,存儲token-user對應關系 * 返回token令牌 * @param user * @return */ public static String generateToken(User user){ //生成唯一不重復的字符串 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); } /** * 根據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邏輯執行之前 @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的方法 * 需要配置靜態資源不攔截時,添加這塊邏輯 => 前后端分離項目 */ if (!(handler instanceof HandlerMethod)) { return true; } String token=request.getHeader("qcby-token"); if (!TokenUtil.verify(token)) { // 未登錄跳轉到登錄界面 throw new RuntimeException("no login!"); } else { return true; } } //Controller邏輯執行完畢但是視圖解析器還未進行解析之前 @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("postHandle...."); } //Controller邏輯和視圖解析器執行完畢 @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("afterCompletion...."); } }
實現類
@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驗證就是在攔截器上改動的。
SpringBoot攔截器實現登錄攔截
需要有postman驗證
以上是“SpringBoot如何實現token登錄”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。