Hessian Token权限认证
服务器端存储Token,采用线程安全的Map
客户端在发送业务请求前,先去服务器端申请一个Token,然后发送请求时把token和业务类一起发送,这时会发送请求超时和权限验证,因为Token只有一次有效,废话不说,代码如下:
Token接口:
- public interface TokenGenerator {
- public String generatorToken(String userName);
- public boolean validateToken(String token);
- }
Token实现类:
- public class TokenGeneratorImpl implements TokenGenerator {
- Map<String, Date> tokenStore = new ConcurrentHashMap<String, Date>();
- /**
- * 客户端发送请求得到token.
- * @param userName
- * @return
- */
- public String generatorToken(String userName){
- Date time = new Date();
- try {
- byte[] b = (time + DigestUtils.md5Hex(userName)).getBytes("utf-8");
- String token = DigestUtils.md5Hex(b);
- tokenStore.put(token,time);//存储这个时间点的token
- return token;
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return userName;
- }
- /**
- * 服务器在接收到请求时验证token,并把刚才的Token设置为失效
- * @param token
- * @return
- */
- public boolean validateToken(String token){
- if(tokenStore.containsKey(token)){
- Date time= tokenStore.get(token);
- Date normal = new Date();
- if(normal.getTime() - time.getTime() > 100*1000){
- //日志进退时
- return false;
- }
- tokenStore.remove(token);
- }else{
- //日志,没有权限
- return false;
- }
- return true;
- }
服务器端权限判断:
- public String hello() {
- //Hessian的服务之间怎么交互,比如我这个服务要用到其他的服务
- if(tokenGenerator.validateToken(token)){
- return "hello " + "欢迎学习Hessian";
- }else{
- return "你没有权限访问!";
- }
- }
客户端调用:
- String token = tokenGenerator.generatorToken("ycl");
- Hello hello = (Hello) context.getBean("helloServiceClient");
- //Spring2.5和hessian3.1果然可以结合.
- hello.setToken(token);
- //添加Token参数
- System.out.println(hello.hello());
这里测试很简单,你可以设置一个Token,然后调用,可以得到正确的数据,如果没有设置Token则返回没有权限,如果等待一分钟调用,则返回服务超时[程序未加提示,自己编写].
这里的Token你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了.
这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿
Hessian Token权限认证的更多相关文章
- 权限认证 cookie VS token
权限认证 cookie VS token 我前公司的应用都是 token 授权的,现公司都是维护一个 session 确认登录状态的.那么我在这掰扯掰扯这两种权限认证的方方面面. 工作流程 先说 co ...
- asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- JWT实现用户权限认证
网上的java基础教程曾教会我们,将用户登录信息存在session(服务器端)中,需要验证的时候拿出来作对比以达到身份 验证的效果.但这种方式暴露的问题也是可想而知的: 1.Seesion:每次认证用 ...
- Shiro入门之一 -------- Shiro权限认证与授权
一 将Shirojar包导入web项目 二 在web.xml中配置shiro代理过滤器 注意: 该过滤器需要配置在struts2过滤器之前 <!-- 配置Shiro的代理过滤器 --> ...
- SpringBoot系列 - 集成JWT实现接口权限认证
会飞的污熊 2018-01-22 16173 阅读 spring jwt springboot RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authenticati ...
- SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖: <properties> <shi ...
随机推荐
- 关闭AnyConnect登录安全警告窗口
一.问题描述:使用AnyConnect client连接时,如何关闭的安全警告窗口? 二.原因分析: AnyConnect Server(ASA)和AnyConect client(PC)上没有受 ...
- easy flash &easy log
EASY FLASH: ENV 快速保存产品参数(k-v型no-sql数据库存储),支持 写平衡(磨损平衡) 及 掉电保护 功能 EasyFlash不仅能够实现对产品的 设定参数 或 运行日志 等信息 ...
- 各大厂商发力5G新机,未来全球手机市场或将呈现新格局
随着5G商用将正式于今年开启落地,运营商和手机厂商都在为新一代网络制式积极做好准备.对于运营商来说,它们在不断增加5G基站的建设,让5G信号覆盖更广泛的范围.而对于手机厂商来说,它们在努力推出旗下的5 ...
- vue 的模拟数据
首先分析需要什么数据,然后在build下 找到dev-server.js 在里面有一个var 项目名 = express() 在后面添加我们自己需要模拟的数据路由 // 自己添加路由 读取数据 sta ...
- JAVAWeb问题总结(持续更新)
1.在JSP页面头部,出现如下错误: 错误文本: Multiple annotations found at this line: - The superclass "javax.servl ...
- uniGUI之通过URL控制参数(25)
通过URL代入参数,在代码中读取,如: http://localhost:8077/?ServerPort=212&&ServerIP=192.168.31.12 procedure ...
- python脚本调用iftop 统计业务应用流量
因公司服务器上部署应用较多,在有大并发访问.业务逻辑有问题的情况下反复互相调用或者有异常流量访问的时候,需要对业务应用进行故障定位,所以利用python调用iftop命令来获取应用进程流量,结合zab ...
- 1.项目创建及集成git
1.创建项目 (1)创建完以后,打开Terminal命令行,输入"git init"用于初始化本地仓库 (2)打开对应的项目文件夹,“Ctrl+h”可以查看该文件夹里是否存在.gi ...
- np.ndarray与PIL.Image对象相互转换
Image对象有crop功能,也就是图像切割功能,但是使用opencv读取图像的时候,图像转换为了np.adarray类型,该类型无法使用crop功能,需要进行类型转换,所以使用下面的转换方式进行转换 ...
- python基础之省份三级菜单
菜单 menu = { #定义一个字典 '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家 ...