SpringBoot实现token登录的示例代码

网友投稿 448 2022-08-17


SpringBoot实现token登录的示例代码

为什么引入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 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

*/

NtWGzFo 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(http://"afterCompletion....");

}

}

实现类

@RestController

@RequestMapping("user")

public class UserController {

@Autowired

private UserService userService;

@ApiOperation("用户登录接口")

@RequestMapping(value="login",method = {RequestMethod.GET,RequestMethod.POST})

public Maplogin(User user){

Map&lhttp://t;String,Object> map=new HashMap<>();

map.put("code",0);

if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPassword())){

map.put("msg","用户或密码为空!");

return map;

}

QueryWrapper 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验证


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot如何通过@PropertySource加载自定义yml文件
下一篇:JDK9为何要将String的底层实现由char[]改成了byte[]
相关文章

 发表评论

暂时没有评论,来抢沙发吧~