`

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你可以试着调用两次试试,只有一次会成功.因为调用完一次后就已经失效了.
这个代码还未进行优化,只是按照自己的构想实现了一把,嘿嘿
分享到:
评论
3 楼 u148 2014-09-11  
今天终于解决我了一个很大的疑惑, Token只有一次有效, 多谢.
2 楼 a123159521 2014-01-13  
soltex 写道
你好,那每次验证token,他的失效时间是否更新呢 ?
在实际生产环境中,怎么操作呢。。


我这里没有做过多的说明, 如何使用忍者见忍。

this is just a method to validate token.
1 楼 soltex 2014-01-13  
你好,那每次验证token,他的失效时间是否更新呢 ?
在实际生产环境中,怎么操作呢。。

相关推荐

Global site tag (gtag.js) - Google Analytics