以用户登录为例:

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. NSSM安装服务

    NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行.同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大.它的特点如下: 支持普通 ...

  2. 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

    目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...

  3. 基于 HTML5 的 WebGL 和 VR 技术的 3D 机房数据中心可视化

    前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ...

  4. 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)

    一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...

  5. Linux slave配置

    说明:master机器为Windows,现将一台Linux机器作为slave进行配置.这台Linux机器为CentOS. 1.在Linux slave上的配置 ①创建名为jenkins用户 #sudo ...

  6. centos值cron-计划任务

    一.crond简介 crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具.并且会自动启动cro ...

  7. springdataJAP的更新与保存的方法是同一个

    对于save方法的解释:如果执行此方法是对象中存在id属性,即为更新操作会先根据id查询,再更新    如果执行此方法中对象中不存在id属性,即为保存操作

  8. [模板] 二分图博弈 && BZOJ2463:[中山市选2009]谁能赢呢?

    二分图博弈 from BZOJ 1443 游戏(二分图博弈) - free-loop - 博客园 定义 1.博弈者人数为两人,双方轮流进行决策. 2.博弈状态(对应点)可分为两类(状态空间可分为两个集 ...

  9. 机器学习---线性回归(Machine Learning Linear Regression)

    线性回归是机器学习中最基础的模型,掌握了线性回归模型,有利于以后更容易地理解其它复杂的模型. 线性回归看似简单,但是其中包含了线性代数,微积分,概率等诸多方面的知识.让我们先从最简单的形式开始. 一元 ...

  10. 数据分析---《Python for Data Analysis》学习笔记【04】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...