Token的管理
代码:
RedisCommon
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;
using System.Configuration;
using ServiceStack.Redis.Generic;
using Newtonsoft.Json; namespace Rongzi.BZone.Common.Util
{
public class RedisCommon
{
private static readonly Lazy<RedisCommon> _instance = new Lazy<RedisCommon>(() => new RedisCommon());
private static readonly string redisUrl = ConfigurationManager.AppSettings["Redis_Server"];
private static readonly string redisPort = ConfigurationManager.AppSettings["Redis_Port"];
private RedisCommon()
{ }
public static RedisCommon getInstance
{
get
{
return _instance.Value;
}
} public RedisClient getRedisClient()
{
return new RedisClient(redisUrl, int.Parse(redisPort));
} #region string类型操作 /// <summary>
/// 根据key获取对应的对象T
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T GetObj<T>(string key)
{
T result;
try
{
using (var redis = this.getRedisClient())
{
result = redis.Get<T>(key);
}
}
catch (Exception)
{ result = default(T);
}
return result;
} /// <summary>
/// 根据key存储T对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="val"></param>
/// <param name="dateTime"></param>
/// <returns></returns>
public bool SetObj<T>(string key, T val, DateTime dateTime)
{
bool result = false;
try
{
using (var redis = this.getRedisClient())
{
result = redis.Set<T>(key, val, dateTime);
}
}
catch
{ result = false;
}
return result;
} /// <summary>
/// 根据key更新T
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="t"></param>
/// <returns></returns>
public bool UpdateObj<T>(string key, T t)
{
bool result = false;
using (var redis = this.getRedisClient())
{
var value = JsonConvert.SerializeObject(t);
result = redis.Set<string>(key, value);
}
return result;
} /// <summary>
/// 删除对应key的value
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool RemoveObj(string key)
{
bool result = false;
using (var redis = this.getRedisClient())
{
result = redis.Remove(key);
}
return result;
}
#endregion #region hash类型操作 /// <summary>
/// 从hash表获取数据
/// </summary>
public T Get<T>(string hashId, string key)
{
using (var redis = this.getRedisClient())
{
string value = redis.GetValueFromHash(hashId, key);
return JsonConvert.DeserializeObject<T>(value);
}
} /// <summary>
/// 获取整个hash的数据
/// </summary>
public List<T> GetAll<T>(string hashId)
{
using (var redis = this.getRedisClient())
{
var result = new List<T>();
var list = redis.GetHashValues(hashId);
if (list != null && list.Count > )
{
list.ForEach(x =>
{
var value = JsonConvert.DeserializeObject<T>(x);
result.Add(value);
});
}
return result;
}
} /// <summary>
/// 判断某个数据是否已经被缓存
/// </summary>
public bool Exist<T>(string hashId, string key)
{
bool result = false;
using (var redis = this.getRedisClient())
{
result = redis.HashContainsEntry(hashId, key);
}
return result;
} /// <summary>
/// 存储数据到hash表
/// </summary>
public bool Set<T>(string hashId, string key, T t)
{
bool result = false;
try
{
using (var redis = this.getRedisClient())
{
var value = JsonConvert.SerializeObject(t);
result = redis.SetEntryInHash(hashId, key, value);
}
}
catch
{ result = false;
}
return result;
} /// <summary>
/// 移除hash中的某值
/// </summary>
public bool Remove(string hashId, string key)
{
bool result = false;
try
{
using (var redis = this.getRedisClient())
{
result = redis.RemoveEntryFromHash(hashId, key);
}
}
catch
{
result = false;
}
return result;
} /// <summary>
/// 移除整个hash
/// </summary>
public bool RemoveAll(string hashId)
{
bool result = false;
using (var redis = this.getRedisClient())
{
result = redis.Remove(hashId);
}
return result;
} /// <summary>
/// 设置缓存过期
/// </summary>
public void SetExpire(string hashId, DateTime datetime)
{
using (var redis = this.getRedisClient())
{
redis.ExpireEntryAt(hashId, datetime);
}
} #endregion #region 保存到硬盘
/// <summary>
/// 保存数据DB文件到硬盘
/// </summary>
public void Save()
{
using (var redis = this.getRedisClient())
{
redis.Save();
}
} /// <summary>
/// 异步保存数据DB文件到硬盘
/// </summary>
public void SaveAsync()
{
using (var redis = this.getRedisClient())
{
redis.SaveAsync();
}
}
#endregion
}
}
TokenManager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Rongzi.BZone.Admin.Models;
using Rongzi.BZone.Common.Util;
using System.Configuration; namespace Rongzi.BZone.Admin.Functions
{
public class TokenManager
{
/// <summary>
/// 设置对象过期时间
/// </summary>
private static readonly int interval = Convert.ToInt32(ConfigurationManager.AppSettings["Redis_TimeInterval"]); /// <summary>
/// 存储对象val,获取对应的token
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static RedisOpearteResult getToken(Manage_UserInfo val)
{
string tokenID = Guid.NewGuid().ToString();
RedisOpearteResult result = new RedisOpearteResult
{
isok = RedisCommon.getInstance.SetObj<Manage_UserInfo>(tokenID, val, DateTime.Now.AddMinutes(interval)),
token = tokenID,
result = JsonConvert.SerializeObject(val)
};
return result;
} /// <summary>
/// 根据tokenID更新用户对象
/// </summary>
/// <param name="tokenID"></param>
/// <param name="val"></param>
/// <returns></returns>
public static RedisOpearteResult RefreshLoginTokenData(String tokenID, Manage_UserInfo val)
{
RedisOpearteResult result = new RedisOpearteResult
{
isok = RedisCommon.getInstance.SetObj<Manage_UserInfo>(tokenID, val, DateTime.Now.AddMinutes(interval)),
token = tokenID,
result = JsonConvert.SerializeObject(val)
};
return result;
} /// <summary>
/// 刷新用户token
/// </summary>
/// <param name="tokenID"></param>
public static RedisOpearteResult RefreshUserToken(string tokenID)
{
var obj = RedisCommon.getInstance.GetObj<Manage_UserInfo>(tokenID);
var isExist = obj != null;
RedisOpearteResult result = new RedisOpearteResult
{
isok = isExist,
token = tokenID,
result = "Token过期"
};
if (isExist)
{
result.result = "成功延迟";
RedisCommon.getInstance.SetObj<Manage_UserInfo>(tokenID, obj, DateTime.Now.AddMinutes(interval));
}
return result;
} /// <summary>
/// 退出
/// </summary>
/// <param name="tokenID"></param>
/// <returns></returns>
public static RedisOpearteResult LoginOff(string tokenID)
{
var obj = RedisCommon.getInstance.GetObj<Manage_UserInfo>(tokenID);
var isExist = obj != null;
RedisOpearteResult result = new RedisOpearteResult
{
isok = isExist,
token = tokenID,
result = "Token过期"
};
if (isExist)
{
result.result = "退出成功";
RedisCommon.getInstance.RemoveObj(tokenID);
}
return result;
} /// <summary>
/// 通过token 获取用户信息
/// </summary>
/// <param name="token">tokenID</param>
/// <returns></returns>
public static bool getUserByToken(string token, out Manage_UserInfo user)
{
bool isok = false;
user = null;
if (!string.IsNullOrEmpty(token) && RedisCommon.getInstance.GetObj<Manage_UserInfo>(token)!=null)
{
user = RedisCommon.getInstance.GetObj<Manage_UserInfo>(token);
isok = true;
}
return isok;
}
}
}
Token的管理的更多相关文章
- Token令牌管理权限
什么是token HTTP是一种无状态的协议,也就是HTTP没法保存客户端的信息,没办法区分每次请求的不同. Token是服务器生成的一串字符,作为客户端请求的令牌.当第一次登陆后,服务器会分发Ton ...
- JWT实现token-based会话管理
上文<3种web会话管理的方式>介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下.本文主要介绍这方面的内容.上文提到token-based的实现目前有一个 ...
- 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...
- Web APIs 基于令牌TOKEN验证的实现
Web APIs 基于令牌TOKEN验证的实现 概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但 ...
- 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 ...
- JWT实现token-based会话管理(转)
JWT实现token-based会话管理 阅读目录 认识JWT demo要点说明 小结 上文<3种web会话管理的方式>介绍了3种会话管理的方式,其中token-based的方式有必要 ...
- Node教程——封装一个token验证器
重要说明 这个轮子是 使用 express@5.0 + MongoDB构建起来的一个 node后台通用的验证器,里面主要讲的就是使用jwt,token进行验证,当然你想使用session也没问题,但是 ...
- Session、Cookie与Token
http协议是无状态协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到 ...
- linux pam 控制模式
工作类别(type).流程栈(stack)和控制模式(control) Linux-PAM 工作的"类别"(type) PAM 的具体工作主要有以下四种类别(type):accou ...
随机推荐
- ci文件缓存使用,可以用来实现多模板切换 改写URL辅助函数
//2015年2月28日15:13:41 $this->load->driver('cache', array('adapter' => 'file'));//加载适配器 //请注意 ...
- 【转】JavaScript顶级对象参考模型
- [ZZ] Maxwell 架构
http://digi.163.com/14/0218/23/9LDCTFON00162DSP.html [IT168 评测]随着一句“娘娘,封神啦(宝鸡口音)”,中国的观众迅速认识到了两个极其出彩的 ...
- PHP 对象和引用总结
PHP 中使用 简单变量 和 对象 时的区别: ① 很多数据类型都可以写时复制(copy-on-write),例: <?php $a = 'test1'; $b = $a; $b = 'test ...
- Linux 执行ThinkPHP 文件的计划任务
执行例如 http://192.168.1.32/index.php?s=/Home/Cron/yue 这样的 url 的计划任务 方式① */ * * * * curl http://192.168 ...
- javascript中的eval()函数应用以及要点
eval是干嘛用的?eval是直接将一段字符串作为参数,交给JS引擎预编译器进行动态分析并执行代码.如下: //调试台输出,你可以理解为console.log,再不理解就理解成alert也没事 var ...
- 初步理解Java的三大特性——封装、继承和多态
声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...
- php-fpm
install php-fpm # Ubuntu sudo apt-get install python-software-properties; sudo add-apt-repository pp ...
- kafka监控系统
Metrics-Java版的指标度量工具之一 Metrics-Java版的指标度量工具之二 JAVA Metrics 度量工具使用介绍1 JAVA Metrics度量工具 - Metrics Core ...
- (转)android 在电脑上显示真机屏幕
http://my.oschina.net/u/202293/blog/199954 方法一: 可以用360手机助手等实现. 方法二: 想把手机屏幕显示在电脑屏幕上时就需要使用Android Scre ...