博客分类:

 
添加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你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了. 
这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿

最新文章

  1. JBPM
  2. .Net Framework 3.5, 3.5 sp1 中文版离线安装
  3. 用VMware9 安装 mac 10.8和10.9搜集的资料
  4. c#获取机器唯一识别码
  5. rabbitMQ 笔记
  6. Merge Sorted Array——LeetCode
  7. appledoc:Objective-C注释文档生成工具
  8. SubLime2 win + mac keygen
  9. Java中的return关键字
  10. JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户
  11. mysql5.7.17版本升级源码方式及恢复主主复制
  12. calss 类
  13. pyspider环境部署1--python3安装
  14. Laravel渴求式加载(比较容易理解理解load与with关系)
  15. python 的 format 函数
  16. Music in Car CodeForces - 746F (贪心,模拟)
  17. win10 oracle11g彻底删除
  18. js中if else switch 条件判断的替代方法
  19. 系统出现bootmgr is missing解决方式,戴尔dellserver装系统须要特别注意的问题
  20. Linux 普通进程 后台进程 守护进程(转)

热门文章

  1. Unity中调用Windows窗口选择文件
  2. 判断一个数组是否包含一个指定的值 includes-ES6
  3. mybatis源码探索笔记-2(构建SqlSession并获取代理mapper)
  4. codeforces- Shortest path of the king
  5. Linux kali安装chromium
  6. Android 华为推送库下载不了
  7. 「SDOI2009」Bill的挑战
  8. PAT T1021 Safe Fruit
  9. 无线渗透之ettercap
  10. Socket通信实现步骤