以用户登录为例:

application-resources.yml:

#用户session在redis中保存的key
REDIS_STU_SESSION_KEY: REDIS_USER_SESSION #session过期时间
STU_SESSION_EXPIRE: 7200

StuService.java:

    //验证用户账号密码
CustomResult checkLogin(User user, HttpSession session); //获取token
CustomResult getStuByToken(String token);

StuServiceImpl.java:

    @Autowired
private RedisClient redisClient; @Autowired
private UserMapper userMapper; @Autowired
private TaskMapper taskMapper; @Value("${REDIS_STU_SESSION_KEY}")
private String REDIS_STU_SESSION_KEY;
@Value("${STU_SESSION_EXPIRE}")
private Integer STU_SESSION_EXPIRE; /**
* @return boolean
* @Description //验证用户是否存在
* @Date 2019-03-31 21:59
* @Param [user]
**/
@Override
public CustomResult checkLogin(User user,HttpSession session) {
CustomResult result = new CustomResult(); UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andUsernameEqualTo(user.getUsername());
criteria.andPasswordEqualTo(user.getPassword());
List<User> userList1 = userMapper.selectByExample(userExample); //HttpServletRequest request = null;
//HttpSession session = request.getSession();
if (userList1.isEmpty()) {
result.setMsg("账号或密码错误,请重试!");
//return 0;//用户不存在
return result;
} else {
criteria.andRoleEqualTo(2);
List<User> userList2 = userMapper.selectByExample(userExample);
if (userList2.isEmpty()){
result.setMsg("您已成功注册,请等待管理员审核!");
return result;
//return 1;//等待分配权限,管理员审核
}else{
System.out.println("===================="+userList2.get(0));
//登陆成功,设置session
session.setAttribute("stuInfo",userList2.get(0)); User userInfo = userList2.get(0);
//生成token
String token = UUID.randomUUID().toString();
userInfo.setPassword(null);
//用户信息写入redis(:使redis目录分层,更为简洁)
redisClient.set(REDIS_STU_SESSION_KEY + ":" + token, JsonUtil.objectToJson(userInfo));
//session过期时间
redisClient.expire(REDIS_STU_SESSION_KEY + ":" + token,STU_SESSION_EXPIRE);
//Object stu = redisClient.get("stu");
//System.out.println("========123"+stu);
//return 2;//用户存在,通过管理员审核
return CustomResult.ok(token);
} } } /**
* @Description //获取token
* @Date 2019-04-10 16:06
* @Param [token]
* @return com.sun123.springboot.CustomResult
**/
@Override
public CustomResult getStuByToken(String token) {
String json = (String)redisClient.get(REDIS_STU_SESSION_KEY + ":" + token);
//判断是否为空
if(StringUtils.isBlank(json)){
return CustomResult.build(400,"此session已经过期,请重新登录");
}
//若不为空,更新过期时间
redisClient.expire(REDIS_STU_SESSION_KEY + ":" + token,STU_SESSION_EXPIRE);
//返回用户信息
return CustomResult.ok(JsonUtil.jsonToPojo(json,User.class));
}

LoginController.java:

import com.sun123.springboot.CustomResult;
import com.sun123.springboot.entity.User;
import com.sun123.springboot.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpSession; /**
* @ClassName LoginController
* @Description TODO
* @Date 2019/3/31 20:27
* @Version 1.0
*/
@Controller
public class LoginController { @Autowired
private StuService stuService; @GetMapping("/login")
public String toLogin(){
return "students/login/stu-login";
} @PostMapping("/checkLogin")
@ResponseBody
public CustomResult checkLogin(User user, HttpSession session){
//int flag = stuService.checkLogin(user,session);
CustomResult result = stuService.checkLogin(user, session);
return result; } @GetMapping("/token/{token}")
@ResponseBody
public CustomResult getUserByToken(@PathVariable String token){
CustomResult stuByToken = stuService.getStuByToken(token);
return stuByToken; }
}

代码测试:

查看响应结果:

浏览器访问:http://localhost:8002/token/d6b4f83c-76df-4f99-b6f9-56e6ff9d6acb

token的设置与获取的更多相关文章

  1. 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调

    [源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...

  2. js设置、获取单值cookie和多值cookie

    js设置.获取单值cookie和多值cookie,代码如下: var CookieUtil = (function () { var Cookie = function () { // 获取单值coo ...

  3. 设置与获取Cookie

    自己编写的一个Cookie设置与获取函数,大家有什么感觉需要改进的地方,请告知与我,我一定虚心接受. JavaScript - Code: function setCookie(name,value, ...

  4. php设置和获取cookie

    php设置和获取cookie setcookie()调用只带有name参数的setcookie(); ()使失效时间为time()或time-; <?php setcookie(); PHP提供 ...

  5. js设置与获取Cookie

    /*设置与获取Cookie*/ var Cookie ={} Cookie.write = function(key, value, duration){ var d = new Date(); d. ...

  6. C#设置和获取系统环境变量

    C#设置和获取环境变量 1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是 32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改 ...

  7. 封装cookie设置和获取的简易方法

    (function() { var tool = { expires: "expires", // 过期时间expires path: "path", // 路 ...

  8. django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法

    django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...

  9. jQuery的DOM操作之设置和获取HTML、文本和值 html()text()val()

    1. html()方法: 此方法类似于JavaScript中的innerHTML属性,可以用来读取或者设置某个元素中的html内容. <html> <head> <met ...

随机推荐

  1. 《JAVA程序设计》_第三周学习总结

    20175217吴一凡 一.IDEA学生免费版申请后续 收到这个邮件,就说明你申请成功了,点这里进去就行了 点击接受 在下一个界面登录你之前注册的账号绑定许可证就行了,重新登录你的账号就有了一年的许可 ...

  2. HttpServletResponse简单理解

    Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,从客户端取数据用HttpServletRequest,向客户端 ...

  3. 如何解决一个从SkylineGlobe5版本升级到7版本遇到的小问题

    前些天,有朋友问,用Skyline5版本开发的WinForm程序,升级到7版本的时候,工程提示下面这样“创建组件AxHost失败”的错误,该如何解决呢? 后来经过百度搜索,找到了这样的答案, 测试发现 ...

  4. WebApi的版本控制

      using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using Sy ...

  5. Golang 入门系列(十一)Go语言实现webapi

    之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...

  6. aelf帮助C#工程师10分钟零门槛搭建DAPP&私有链开发环境

    aelf是一个可扩展的去中心化云计算区块链平台,支持高性能合约并行执行.原生多链数据交互.存储使用高性能分布式数据库. aelf整个系统可以在windows.osx及linux运行,团队在osx环境下 ...

  7. java遍历复杂json字符串获取想要的数据

    https://blog.csdn.net/qq_34309663/article/details/80508125 java如何解析复杂的json数据关于json处理的包有好几个,比如jackson ...

  8. 家庭记账本小程序之删(java web基础版四)

    实现删除消费账单 1.main_left.jsp中该部分,调用Servlet中delete方法 2.Servlet中delete方法,调用Dao层list方法,跳转到del.jsp页面 3.Dao层l ...

  9. Kubernetes(基础 一):进程

    容器其实是一种沙盒技术.顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术.这样,应用与应用之间,就因为有了边界而不至于相互干扰:而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 ...

  10. [转帖]Ansible批量远程管理Windows主机(部署与配置)

    2018-09-12 12:04:42 https://blog.51cto.com/7424593/2174156 一.测试环境介绍 Ansible管理主机: 系统:   CentOS6.8 IP ...