java 令牌机制

1.Token.Java

 

[java] view plain copy
 
  1. package com.homelink.sales.module.newowner.util;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.UUID;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpSession;  
  8. /** 
  9.  * 令牌工具类,用来生成令牌及判断令牌是否一致 
  10.  * @authorbabyyage
  11.  * @version 1.0 新增 2015-10-29 
  12.  */  
  13. public class Token {  
  14.     public HashMap<String, Object> map = new HashMap<String, Object>();  
  15.   
  16.     public static String getUUID() {  
  17.         UUID uuid = UUID.randomUUID();  
  18.   
  19.         return uuid.toString();  
  20.     }  
  21.       
  22.     /** 
  23.      * session中保存令牌,并返回该令牌 
  24.      * @param session 
  25.      * @return 
  26.      */  
  27.     public static String add(HttpSession session) {  
  28.         String token = "";  
  29.   
  30.         if (session.getAttribute("_token") != null) {  
  31.             token = String.valueOf(session.getAttribute("_token"));  
  32.         }  
  33.   
  34.         String uuid = getUUID();  
  35.   
  36.         token = "," + uuid + token;  
  37.   
  38.         if (token.length() > 185) {  
  39.             token = token.substring(0, token.lastIndexOf(44));  
  40.         }  
  41.   
  42.         session.setAttribute("_token", token);  
  43.   
  44.         return uuid;  
  45.     }  
  46.       
  47.     /** 
  48.      * 将参数systoken与session中的令牌进行比较,是否一致 
  49.      * @param request 
  50.      * @param systoken 
  51.      * @return 
  52.      */  
  53.     public static Boolean check(HttpServletRequest request,String systoken) {  
  54.         HttpSession session = request.getSession();  
  55.   
  56.         //String uuid = request.getParameter("systoken");  
  57.         String uuid = systoken;  
  58.   
  59.         if (StringUtil.isNulls(new String[] { uuid })) {  
  60.             return Boolean.valueOf(false);  
  61.         }  
  62.   
  63.         String token = String.valueOf(session.getAttribute("_token"));  
  64.   
  65.         int index = -1;  
  66.   
  67.         if ((index = token.indexOf(uuid)) >= 0) {  
  68.             token = token.substring(0, index - 1) + token.substring(index + 36);  
  69.   
  70.             session.setAttribute("_token", token);  
  71.   
  72.             return Boolean.valueOf(true);  
  73.         }  
  74.   
  75.         return Boolean.valueOf(false);  
  76.     }  
  77.   
  78.     @Deprecated  
  79.     public static void remove(HttpServletRequest request) {  
  80.     }  
  81. }  


StringUtil.isNulls(String[])

 

 

[java] view plain copy
 
  1.   /** 
  2.    * 判断一个数组是否为空 
  3.    * @param values 数组 
  4.    * @return 
  5.    */  
  6. ublic static boolean isNulls(String[] values) {  
  7. if ((values == null) || (values.length == 0)) {  
  8.     return true;  
  9. }  
  10. for (String value : values) {  
  11.     if ((value == null) || (value.matches("\\s*"))) {  
  12.         return true;  
  13.     }  
  14.   
  15. }  
  16. return false;  


Struct的令牌机制,源码解析(参考:http://blog.sina.cn/dpool/blog/s/blog_59d78c8f0100bkgu.html?vt=4)

 

 

[java] view plain copy
 
  1. import javax.servlet.http.HttpServletRequest;  
  2. import javax.servlet.http.HttpSession;  
  3.   
  4. public class TokenUtil {  
  5.     public synchronized void saveToken(HttpServletRequest request) {  
  6.         HttpSession session = request.getSession();  
  7.         String token = generateToken(request);  
  8.         if (token != null) {  
  9.             session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);  
  10.         }  
  11.     }  
  12.   
  13.     protected String renderToken() {  
  14.         StringBuffer results = new StringBuffer();  
  15.         HttpSession session = pageContext.getSession();  
  16.         if (session != null) {  
  17.         String token =  
  18.         (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);  
  19.         if (token != null) {  
  20.         results.append('<input type=\'hidden\' name=\'');  
  21.         results.append(Constants.TOKEN_KEY);  
  22.         results.append('\' value=\'');  
  23.         results.append(token);  
  24.         if (this.isXhtml()) {  
  25.         results.append('\' />');  
  26.         } else {  
  27.         results.append('\'>');  
  28.         }  
  29.         }  
  30.         }  
  31.         return results.toString();r /> }  
  32.   
  33.     public synchronized boolean isTokenValid(HttpServletRequest request,  
  34.             boolean reset) {  
  35.         // Retrieve the current session for this request  
  36.         HttpSession session = request.getSession(false);  
  37.         if (session == null) {  
  38.             return false;  
  39.         }  
  40.         // Retrieve the transaction token from this session, and  
  41.         // reset it if requested  
  42.         String saved = (String) session  
  43.                 .getAttribute(Globals.TRANSACTION_TOKEN_KEY);  
  44.         if (saved == null) {  
  45.             return false;  
  46.         }  
  47.         if (reset) {  
  48.             this.resetToken(request);  
  49.         }  
  50.         // Retrieve the transaction token included in this request  
  51.         String token = request.getParameter(Constants.TOKEN_KEY);  
  52.         if (token == null) {  
  53.             return false;  
  54.         }  
  55.         return saved.equals(token);  
  56.     }  
  57.   
  58.     public synchronized void resetToken(HttpServletRequest request) {  
  59.         HttpSession session = request.getSession(false);  
  60.         if (session == null) {  
  61.             return;  
  62.         }  
  63.         session.removeAttribute(Globals.TRANSACTION_TOKEN_KEY);  
  64.     }  
  65. }  
posted @ 2017-08-04 15:00  babyyage  阅读(2274)  评论(0编辑  收藏  举报