首页 > 其他 > 详细

单点登陆(redis+cookie)

时间:2019-12-02 15:26:07      阅读:80      评论:0      收藏:0      [点我收藏+]

本文只是基于后台部分

大致思路:用户登录请求主登陆接口 生成token 存放redis 返回给浏览器

     后续有需要登录的页面 请求验证token接口 拿着token去redis中查询如果有证明登陆过没有则证明没有登录

     通过redis模拟session 因为是分布式的不同的服务器存储着不同的session 所以需要redis 

分为2个接口

1.主登陆    用户第一次登陆访问的

1     @RequestMapping("/testlogin")
2     @ResponseBody
3     public LoginResult testLogin(String username, String password, HttpServletRequest request,HttpServletResponse response){
4         return loginService.login(username,password,request,response);
5     }

1.2  a.先验证用户信息是否正确 

      b.在通过UUID随机数生成一个token

      c.将token最为key 用户信息作为value 并设置过期时间存储在redis

      d.通过Cookie工具类 设置token name 和有效时间 返回给浏览器

 1 public LoginResult login(String username, String password, HttpServletRequest request, HttpServletResponse response) {
 2         /**模拟数据库查询*/
 3         User user = new User();
 4         user.setUserName(username);
 5         user.setPassword(password);
 6         /**返回给前台的数据格式*/
 7         LoginResult loginResult = new LoginResult();
 8         if (user != null) {/**判断从数据查询出来是否为空*/
 9             loginResult.setStatus(200);
10             String key = UUID.randomUUID().toString();/**UUID.randomUUID().toString()*/
11             redisUtils.set(key, user);/**将token和用户信息放入redis种*/
12             redisUtils.expire(key, 60 * 60);/**设置过期时间为一小时*/
13             /**产生Cookie*/
14             CookieUtils.setCookie(request, response, "TT_TOKEN", key, 60 * 60);
15             /**response.addCookie(cookie);*/
16         } else {
17 
18             /**登录失败后*/
19             loginResult.setMsg("用户名或密码错误");
20 
21         }
22         return loginResult;
23     }

2.需要验证登陆的页面请求的接口 需要携带token

1     @RequestMapping("/testlogin/token/{token}")
2     @ResponseBody
3     public Object getUserInfo(@PathVariable("token") String token){
4         return loginService.getUserInfoByToken(token);
5     }
 1 public LoginResult getUserInfoByToken(String token) {
 2         LoginResult loginResult = new LoginResult();
 3         try {
 4            /**通过token去redis中查询
 5             * 查不到则抛出异常
 6             */
 7             String json = redisUtils.get(token).toString();
 8             loginResult.setStatus(200);
 9             loginResult.setMsg("OK");
10             loginResult.setData(json);
11         } catch (Exception e) {
12             loginResult.setMsg("获取用户失败失败");
13         } finally {
14 
15             return loginResult;
16         }
17 
18     }                

 

单点登陆(redis+cookie)

原文:https://www.cnblogs.com/ycnp/p/11970571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!