Hessian Token权限认证

添加Token验证,如何生成Token,计算方式如下,采用不可逆转的方式生成[MD5加密]:
服务器端存储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你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了.
这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值