添加Token驗證,如何生成Token,計算方式如下,采用不可逆轉的方式生成[MD5加密]:
伺服器端存儲Token,采用線程安全的Map
用戶端在發送業務請求前,先去伺服器端申請一個Token,然後發送請求時把token和業務類一起發送,這時會發送請求逾時和權限驗證,因為Token隻有一次有效,廢話不說,代碼如下:
Token接口:
Java代碼
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
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你可以試着調用兩次試試,隻有一次會成功.因為調用完一次後就已經失效了.
這個代碼還未進行優化,隻是按照自己的構想實作了一把,嘿嘿