文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java怎么实现登录token令牌

2023-06-30 15:50

关注

本文小编为大家详细介绍“Java怎么实现登录token令牌”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现登录token令牌”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、流程图

Java怎么实现登录token令牌

二、Token

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

用户第一次登录,服务器通过数据库校验其UserId和Password合法,则再根据随机数字+userid+当前时间戳再经过DES加密生成一个token串

token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中

Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位

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

三、分析

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

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

文件夹下建立TokenUtil.java文件

public class TokenUtil {      private static Map<String, User> tokenMap = new HashMap<>();      public static String generateToken(User user){        //生成唯一不重复的字符串        String token = UUID.randomUUID().toString();        tokenMap.put(token,user);        return token;    }         public static  boolean verify(String token){        return tokenMap.containsKey(token);    }     public static User gentUser(String token){        return tokenMap.get(token);    }     public static void main(String[] args) {        for (int i = 0; i < 20; i++){            System.out.println(UUID.randomUUID().toString());        }    } }

用户登录得UserController.java

@Api( tags = {"用户模块接口"})@RestController@RequestMapping("user")public class UserController {    @Autowired    private UserService userService;     @Autowired    private HttpSession session;    @ApiOperation("登录接口")    @RequestMapping(value = "login",method ={RequestMethod.POST,RequestMethod.GET})    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 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);                // 是我们的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/

Java怎么实现登录token令牌

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

Java怎么实现登录token令牌

 记住这个令牌    

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

在postman中

Java怎么实现登录token令牌

写入令牌,输出成功

Java怎么实现登录token令牌

读到这里,这篇“Java怎么实现登录token令牌”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯