博客分类:

 
添加Token验证,如何生成Token,计算方式如下,采用不可逆转的方式生成[MD5加密]: 
服务器端存储Token,采用线程安全的Map 
客户端在发送业务请求前,先去服务器端申请一个Token,然后发送请求时把token和业务类一起发送,这时会发送请求超时和权限验证,因为Token只有一次有效,废话不说,代码如下: 
Token接口:

  1. public interface TokenGenerator {
  2. public String generatorToken(String userName);
  3. public boolean validateToken(String token);
  4. }

Token实现类:

  1. public class TokenGeneratorImpl implements TokenGenerator {
  2. Map<String, Date> tokenStore = new ConcurrentHashMap<String, Date>();
  3. /**
  4. * 客户端发送请求得到token.
  5. * @param userName
  6. * @return
  7. */
  8. public String generatorToken(String userName){
  9. Date time = new Date();
  10. try {
  11. byte[] b =  (time + DigestUtils.md5Hex(userName)).getBytes("utf-8");
  12. String token = DigestUtils.md5Hex(b);
  13. tokenStore.put(token,time);//存储这个时间点的token
  14. return token;
  15. } catch (UnsupportedEncodingException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. return userName;
  20. }
  21. /**
  22. * 服务器在接收到请求时验证token,并把刚才的Token设置为失效
  23. * @param token
  24. * @return
  25. */
  26. public boolean validateToken(String token){
  27. if(tokenStore.containsKey(token)){
  28. Date time= tokenStore.get(token);
  29. Date normal = new Date();
  30. if(normal.getTime() - time.getTime() > 100*1000){
  31. //日志进退时
  32. return false;
  33. }
  34. tokenStore.remove(token);
  35. }else{
  36. //日志,没有权限
  37. return false;
  38. }
  39. return true;
  40. }

服务器端权限判断:

  1. public String hello() {
  2. //Hessian的服务之间怎么交互,比如我这个服务要用到其他的服务
  3. if(tokenGenerator.validateToken(token)){
  4. return "hello "  + "欢迎学习Hessian";
  5. }else{
  6. return "你没有权限访问!";
  7. }
  8. }

客户端调用:

  1. String token = tokenGenerator.generatorToken("ycl");
  2. Hello hello = (Hello) context.getBean("helloServiceClient");
  3. //Spring2.5和hessian3.1果然可以结合.
  4. hello.setToken(token);
  5. //添加Token参数
  6. System.out.println(hello.hello());

这里测试很简单,你可以设置一个Token,然后调用,可以得到正确的数据,如果没有设置Token则返回没有权限,如果等待一分钟调用,则返回服务超时[程序未加提示,自己编写]. 
这里的Token你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了. 
这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿

Hessian Token权限认证的更多相关文章

  1. 权限认证 cookie VS token

    权限认证 cookie VS token 我前公司的应用都是 token 授权的,现公司都是维护一个 session 确认登录状态的.那么我在这掰扯掰扯这两种权限认证的方方面面. 工作流程 先说 co ...

  2. asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  3. 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权限认证 ...

  4. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  5. asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  6. JWT实现用户权限认证

    网上的java基础教程曾教会我们,将用户登录信息存在session(服务器端)中,需要验证的时候拿出来作对比以达到身份 验证的效果.但这种方式暴露的问题也是可想而知的: 1.Seesion:每次认证用 ...

  7. Shiro入门之一 -------- Shiro权限认证与授权

    一  将Shirojar包导入web项目 二 在web.xml中配置shiro代理过滤器 注意: 该过滤器需要配置在struts2过滤器之前 <!-- 配置Shiro的代理过滤器 -->  ...

  8. SpringBoot系列 - 集成JWT实现接口权限认证

    会飞的污熊 2018-01-22 16173 阅读 spring jwt springboot RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authenticati ...

  9. SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖: <properties> <shi ...

随机推荐

  1. 吴裕雄--天生自然TensorFlow2教程:损失函数及其梯度

    import tensorflow as tf x = tf.random.normal([2, 4]) w = tf.random.normal([4, 3]) b = tf.zeros([3]) ...

  2. 吴裕雄 python 神经网络——TensorFlow训练神经网络:卷积层、池化层样例

    import numpy as np import tensorflow as tf M = np.array([ [[1],[-1],[0]], [[-1],[2],[1]], [[0],[2],[ ...

  3. linux磁盘管理2-raid,lvm

    raid 多个磁盘合成一个“阵列”来提供更好的性能.冗余,或者两者都提供 提高IO能力 磁盘并行读写 提高耐用性 磁盘冗余来实现 级别:多块磁盘组织在一起的工作方式有所不同 RAID实现的方式 外接式 ...

  4. formValidation单个输入框值改变时校验

     $("#tv_form").data("formValidation").updateStatus("pay.vcAmount", &qu ...

  5. iOS 开发之 23种设计模式

    整理了 iOS 开发中用到的设计模式: iOS 开发之 设计模式[一]原型模式 (Prototype pattern) iOS 开发之 设计模式[二]工厂方法模式 iOS 开发之 设计模式[三]抽象工 ...

  6. C++11常用特性介绍——array容器

    std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array ...

  7. 指令——mdadm

    Mdadm命令详解 Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm ,mdadm是linux下用于创建和管 ...

  8. JDBC连接MySql例子

    1.注册MySql连接驱动 2.设置连接MySql连接字符串.用户名和密码 3.获取数据库连接 代码如下: // 加载驱动 Class.forName("com.mysql.jdbc.Dri ...

  9. Python - 模块中的"if __name__ == '__main__':"

    1.1 如果导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码. module1.py: def foo(): print('module 1') f ...

  10. python中的 dir()内置函数的作用以及使用方法

    dir() 内置函数的作用 python 内置方法有很多,无论是初学者还是精通python 的程序员都不能全部即住所有的方法,这时候 dir() 方法就非常有用了,使用 dir()函数可以查看对象内的 ...