package com.medic.rest.province.base.home;

import java.util.HashMap;
import java.util.List;
import java.util.Random;
import com.medic.rest.province.BaseRestObject;
import com.medic.rest.province.RedisTool;
import com.medic.rest.province.base.management.UserRoleModel;
import com.zdzsoft.rest.RestContext;
import com.zdzsoft.rest.annotation.RestMethod;
import com.zdzsoft.rest.annotation.RestObject;
import com.zdzsoft.rest.annotation.RestParam;
import com.zdzsoft.rest.annotation.RestReturn;
import com.zdzsoft.rest.model.QueryDao;

@RestObject(name = "UserSecurity", alia = "", desc = "", path = "/province/base/home/User")
public class UserSecurity extends BaseRestObject {
private static Random rand = new Random(System.currentTimeMillis());
private static int token_seed = 0;

@RestMethod(name = "", alia = "登录", desc = "")
@RestReturn(name = "user", alia = "", type = "[<UserRole>]")
public Object login(RestContext context) {
QueryDao dao = getQueryDao();
dao.addWhereCondition(context, UserRoleModel.class);
HashMap<String, Object> result = new HashMap<String, Object>();
result.put("token", "");
result.put("user", "");
result.put("role", "");

List<?> list = dao.query(UserRoleModel.class, 0, 1);
if (list == null || list.isEmpty()) {
return result;
}
UserRoleModel user = (UserRoleModel) list.get(0);
String token = getNextToken();
String value = user.getUser_name() + ";" + user.getRole();
RedisTool.get().set(token, value, 15 * 60);

result.put("token", token);
result.put("user", user.getUser_name());
result.put("role", user.getRole());

return result;
}

@RestMethod(name = "", alia = "测试", desc = "")
@RestReturn(name = "user", alia = "", type = "[<UserRole>]")
public Object test(RestContext context,
@RestParam(name = "token", validate = "notnull") String token) {
HashMap<String, Object> result = new HashMap<String, Object>();
result.put("token", "");
result.put("user", "");
result.put("role", "");
if (token != null && token.length() > 0) {
String value = RedisTool.get().get(token);
if (value != null && value.length() > 0) {
String[] str = value.split(";");
if (str.length == 2) {
String name = str[0];
String role = str[1];
result.put("token", token);
result.put("user", name);
result.put("role", role);
RedisTool.get().expire(token, 15*60);

}
}
}
return result;
}

@RestMethod(name = "", alia = "退出", desc = "")
@RestReturn(name = "flag", alia = "执行结果", type = "")
public boolean logout(RestContext context,
@RestParam(name = "token", validate = "notnull") String token) {
if (token != null && token.length() > 0) {
RedisTool.get().delete(token);
}
return true;
}

public static boolean check(String token) {
if (token != null && token.length() > 0) {
String value = RedisTool.get().get(token);
if (value != null && value.length() > 0) {
return true;
}
}
return false;
}

public String getNextToken() {
String token = toString(rand.nextInt(9999));

synchronized (this) {
token += toString(token_seed);
token_seed = (token_seed + 1) % 9999;
}
return token;
}

private String toString(int value) {
String str = "" + value;
while (str.length() < 4) {
str = '0' + str;
}
return str;
}
}

登录生成令牌token存于redis的更多相关文章

  1. FastAPI 学习之路(五十六)将token存放在redis

    在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...

  2. RESTful登录设计(基于Spring及Redis的Token鉴权)

    转载自:http://www.scienjus.com/restful-token-authorization/ http://m.blog.csdn.net/article/details?id=4 ...

  3. 登录令牌 Token 介绍

     Token值介绍 token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串. 用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个 ...

  4. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  5. ASP.NET Web APIs 基于令牌TOKEN验证的实现(保存到DB的Token)

    http://www.cnblogs.com/niuww/p/5639637.html 保存到DB的Token 基于.Net Framework 4.0 Web API开发(4):ASP.NET We ...

  6. 令牌Token和会话Session原理与攻略

    本篇文章将从无到完整的登录框架或API详细讲述登录令牌原理.攻略等安全点. 有些协议或框架也喜欢把令牌叫票据(Ticket),不论是APP还是Web浏览器,很多框架或协议都用到了本文所说的这套类似的认 ...

  7. Web APIs 基于令牌TOKEN验证的实现

    Web APIs 基于令牌TOKEN验证的实现 概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但 ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-9.使用JWT生成用户Token回写客户端

    笔记 9.使用JWT生成用户Token回写客户端     简介:讲解用户授权登录后,需要生成登录凭证重定向到页面上 1.获取当前页面访问地址 2.根据User基本信息生成token 3.重定向到指定页 ...

  9. 【ASP.NET Core快速入门】(十一)应用Jwtbearer Authentication、生成jwt token

    准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...

随机推荐

  1. javascript中document.getElementsByClassName兼容性封装方法一

    var getElmsByClsName = function(className, results) { results = results || []; // 判断浏览器是否支持 getEleme ...

  2. thrift-go(golang)Server端笔记

      1.从thrift源码中拷贝go语言包(thrift\lib\go\thrift),放到go/src/下 2.新建go项目,实现server端服务接口   package main   impor ...

  3. 树、递归、广度优先搜索(BFS)————二叉树的最小深度

    解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加1 要确定的是,一定要保证初始输入的节点是有子节点的.因为可能出现只有单子树的情况,所以要先确认这种情况. 具体过程: 1.分析初始 ...

  4. D. Destruction of a Tree_dfs序_性质分析_思维题

    题意: 给定一棵树,每次可以拆掉一个树上度数为偶数的点,拆掉该点后,与该点所连的所有边都会被删掉.问,是否有一种删点顺序可以删掉所有的点.如果有,则输出任意一组解. 数据范围:线性做法 O(n)O(n ...

  5. 百度api使用说明

    .初始化地图,并设置地图中心点 复制代码 https://www.cnblogs.com/zqzjs/p/5293698.html var map = new BMap.Map("allma ...

  6. html5+css3相关知识

    一:HTML5 1.html中的meta标签 定义针对搜索引擎的关键词: <meta name="keywords" content="HTML, CSS, XML ...

  7. Python笔记27----时间解析

    1.将时间字符串解析成真正的时间 time.strptime http://www.runoob.com/python/att-time-strptime.html 代码: import time s ...

  8. MyBatis学习总结(19)——Mybatis传多个参数(三种解决方案)

    据我目前接触到的传多个参数的方案有三种. 第一种方案  DAO层的函数方法  Public User selectUser(String name,String area); 对应的Mapper.xm ...

  9. UVALIVE 4256 Salesmen

    Salesmen Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ...

  10. iis解析json

    一. windows XP 1. MIME设置:在IIS的站点属性的HTTP头设置里,选MIME 映射中点击”文件类型”-”新类型”,添加一个文件类型:关联扩展名:*.json内容类型(MIME):a ...