登陆令牌token生成算法,java token登录

  登陆令牌token生成算法,java token登录

  

目录

一、流程图二、令牌三、分析四、运行结果

 

  

一、流程图

 

  

二、Token

1、令牌是一种客户端认证机制,是一个经过加密的字符串,安全性强,支持跨域

 

  2、用户第一次登录,服务器通过数据库校验其使用者辩证码和密码合法,则再根据随机数字使用者辩证码当前时间戳再经过数据加密标准加密生成一个代币串

  当然具体生成代币的方式是开发自己定义的3、代币的生成一般是采用全局唯一识别保证唯一性,当用户登录时为其生成唯一的令牌,存储一般保存在数据库中

  代币过期时间采用把代币二次保存在甜饼干或会议里面,根据甜饼干和会议的过期时间去维护代币的过期时间4、代币是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回代币给前端。前端可以在每次请求的时候带上代币证明自己的合法地位

  5、令牌,就是令牌,最大的特点就是随机性,不可预测。一般黑客或软件无法猜测出来

  

三、分析

建立一个token令牌,在用户登录时候给用户一个独特得令牌值,登录时候嘚赋值这个令牌

 

  在SpringBoot项目中建立一个Util文件夹

  文件夹下建立TokenUtil.java文件

  public class token util { private static MapString,User token map=new HashMap();公共静态字符串generateToken(用户user){ //生成唯一不重复的字符串String token=UUID.randomUUID().toString();tokenMap.put(令牌,用户);返回令牌;} /** * 验证代币是否合法* @ param token * @ return */public static boolean verify(字符串令牌){ return token map。包含密钥(令牌);}公共静态用户代理用户(字符串标记){返回标记映射。get(token);} public static void main(String[]args){ for(int I=0;i 20I){系统。出去。println(uuid。randomuuid().toString());} } }用户登录得UserController.java

  @Api(tags={ 用户模块接口})@ rest控制器@请求映射(用户)公共类用户控制器{ @ auto wired private UserService UserService;@自动连线私有会话会话;@ApiOperation(登录接口)@RequestMapping(value=login ,method={RequestMethod .发布,请求方法.GET})公共映射字符串,对象登录(用户用户){ MapString,Object map=new HashMap();map.put(code ,0);if(字符串实用程序。isempty(用户。get username()) string utils。isempty(用户。get password()){ map。put( msg ,用户或者密码为空!);返回地图;}查询包装器用户查询包装器=新查询包装器();queryWrapper.eq(用户名,user.getUser

  name()) .eq("password",user.getPassword()); User userDb = userService.getOne(queryWrapper); if(userDb != null){ String token= TokenUtil.generateToken(userDb); map.put("code",1); map.put("data",userDb); map.put("token",token); session.setAttribute("username",userDb.getUsername()); }else{ map.put("msg","用户名或密码错误!"); } return map; } @ApiImplicitParams( { @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long"), @ApiImplicitParam(name = "name", value = "测试名字", dataType = "string") } ) @ApiOperation("根据id查询用户信息") @RequestMapping(value="getById",method ={RequestMethod.POST,RequestMethod.GET}) public User getById(Long id ,String name){ System.out.println(name); return userService.getById(id); } }在拦截器上操作 interceptor下面LoginInterceptor.java

  

public class LoginInterceptor implements HandlerInterceptor { @Autowired private HttpSession httpSession; //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的方法 * 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目 * */ // 是我们的conrtoller中的方法 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...."); }}

 

  

四、运行结果

http://localhost:8080/

 

  

 

  http://localhost:8080/user/login?username=admin&password=123456

  

 

  记住这个令牌

  

60227b0e-bdbb-47d9-9df4-f56163cb529d

 

  

在postman中

 

  

 

  写入令牌,输出成功

  

 

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: