• Hessian Token权限认证


     

    博客分类:
     
    添加Token验证,如何生成Token,计算方式如下,采用不可逆转的方式生成[MD5加密]: 
    服务器端存储Token,采用线程安全的Map 
    客户端在发送业务请求前,先去服务器端申请一个Token,然后发送请求时把token和业务类一起发送,这时会发送请求超时和权限验证,因为Token只有一次有效,废话不说,代码如下: 
    Token接口: 
    Java代码  收藏代码
    1. public interface TokenGenerator {  
    2.   
    3.     public String generatorToken(String userName);  
    4.       
    5.     public boolean validateToken(String token);   
    6. }  

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

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


    客户端调用: 
    Java代码  收藏代码
    1. String token = tokenGenerator.generatorToken("ycl");  
    2.   
    3.             Hello hello = (Hello) context.getBean("helloServiceClient");  
    4.             //Spring2.5和hessian3.1果然可以结合.  
    5.               
    6.             hello.setToken(token);  
    7.             //添加Token参数  
    8.   
    9.             System.out.println(hello.hello());  

    这里测试很简单,你可以设置一个Token,然后调用,可以得到正确的数据,如果没有设置Token则返回没有权限,如果等待一分钟调用,则返回服务超时[程序未加提示,自己编写]. 
    这里的Token你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了. 
    这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿
  • 相关阅读:
    菜刀失效以后得到web的方法
    mimikatz使用
    hydra使用教程
    web安全学习-攻击会话管理
    web安全学习-验证机制存在的问题
    web安全学习-绕过客户端限制
    基于MaxCompute/Dataworks实现数据仓库管理与全链路数据体系
    tensorflow学习|基于TF-IDF的垃圾短信预测
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
    CentOS7下安装CDH,clouderamanager,hadoop
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4170862.html
Copyright © 2020-2023  润新知