From e6c7197fd43fee96ee659ce38c07e4e15d5feb7a Mon Sep 17 00:00:00 2001 From: jiangjiazhi Date: Wed, 5 Apr 2017 11:51:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parent/core.sdk/pom.xml | 2 +- .../src/main/java/com/lyms/util/TokenUtils.java | 58 ++++++++ .../hospital/service/token/impl/TokenService.java | 65 +++++++++ .../service/token/impl/TokenServiceImpl.java | 156 +++++++++++++++++++++ parent/pom.xml | 5 + 5 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 parent/core.sdk/src/main/java/com/lyms/util/TokenUtils.java create mode 100644 parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenService.java create mode 100644 parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenServiceImpl.java diff --git a/parent/core.sdk/pom.xml b/parent/core.sdk/pom.xml index c5c38c7..8566bd0 100644 --- a/parent/core.sdk/pom.xml +++ b/parent/core.sdk/pom.xml @@ -27,7 +27,7 @@ httpmime ${httpclient.version} - + 1.0 diff --git a/parent/core.sdk/src/main/java/com/lyms/util/TokenUtils.java b/parent/core.sdk/src/main/java/com/lyms/util/TokenUtils.java new file mode 100644 index 0000000..24b2362 --- /dev/null +++ b/parent/core.sdk/src/main/java/com/lyms/util/TokenUtils.java @@ -0,0 +1,58 @@ +package com.lyms.util; + +import com.google.common.base.Charsets; +import com.google.common.hash.Hashing; +import org.apache.commons.lang.time.FastDateFormat; + +import java.util.Date; +import com.google.common.base.Charsets; +import com.google.common.hash.Hashing; +import org.apache.commons.lang.time.FastDateFormat; +/** + * Created by riecard on 15/9/21. + */ +public class TokenUtils { + + private static final String privateKey = "fdas34ljfr濂絪ja@#8$%dfkl;js&4*daklfjsdl;jb1324"; + public static String getToken(String password, String date) { + return Hashing.md5().newHasher(). + putString(password, Charsets.UTF_8). + putString(privateKey, Charsets.UTF_8). + putString(date, Charsets.UTF_8).hash().toString(); + } + + public static String getToken(String password, Date date) { + return Hashing.md5().newHasher(). + putString(password, Charsets.UTF_8). + putString(privateKey, Charsets.UTF_8). + putString(getDate(date), Charsets.UTF_8).hash().toString(); + } + + public static String getToken(String password) { + return Hashing.md5().newHasher(). + putString(password, Charsets.UTF_8). + putString(privateKey, Charsets.UTF_8).putString(getDate(), Charsets.UTF_8).hash().toString(); + } + public static boolean validToken(String token, String password) { + String confirm = getToken(password); + if (confirm.equals(token)) { + return true; + } else { + return false; + } + } + public static String getDate() { + Date date = new Date(System.currentTimeMillis()); + return FastDateFormat.getInstance("yyyyMMddHH").format(date); + } + public static String getDate(Date now) { + + return FastDateFormat.getInstance("yyyyMMddHH").format(now); + } + public static String getNextHour(Date now) { + Date date = new Date(now.getTime()+60*60*1000); + + return FastDateFormat.getInstance("yyyyMMddHH").format(date); + } + +} diff --git a/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenService.java b/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenService.java new file mode 100644 index 0000000..a4fd4b5 --- /dev/null +++ b/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenService.java @@ -0,0 +1,65 @@ +package com.lyms.hospital.service.token; +/** + * Created by riecard on 15/9/22. + */ +public interface TokenService +{ + + /** + * 创建token + * + * @return + */ + String createToken(Integer userId); + + /** + * 创建token + * + * @return + */ + String createToken(Integer userId, Integer second); + + /** + * 重置token有效时间(默认重置为7天) + * + * @param token + * @return + */ + boolean resetToken(String token); + + /** + * 检查token是否存在 + * + * @param token + * @return + */ + boolean validToken(String token); + + /** + * 检查token是否存在 + * + * @param token + * @return + */ + boolean validToken(String token, Integer second); + + /** + * 根据token取userId,失败返回null + * + * @param token + * @return + */ + Integer getUserId(String token); + + void deleteAllToken(Integer userId); + + void deleteAllToken(Integer userId, String prefix); + + /** + * 销毁token + * + * @param token + */ + void deleteToken(String token); + +} \ No newline at end of file diff --git a/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenServiceImpl.java b/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenServiceImpl.java new file mode 100644 index 0000000..7e4cf9b --- /dev/null +++ b/parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenServiceImpl.java @@ -0,0 +1,156 @@ +package com.lyms.hospital.service.token.impl; + +import com.lyms.hospital.service.token.TokenService; +import com.lyms.util.SerializeUtils; +import com.lyms.util.TokenUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Created by riecard on 15/9/22. + */ +@Service +public class TokenServiceImpl implements TokenService +{ + + static final Integer seconds = 7 * 24 * 60 * 60; + static final Integer ams_seconds = 60 * 60; + @Value("${}") + private String tokenPrefix; + + @Autowired + private RedisTemplate redisTemplate; + + private String prefix = null; + + private String getPrefix() + { + return tokenPrefix; + } + + private Integer getSeconds() + { + if ("ams".equals(prefix)) + { + return ams_seconds; + } else + { + return seconds; + } + } + + @Override + public String createToken(Integer userId, Integer second) + { + String token = getPrefix() + TokenUtils.getToken(UUID.randomUUID().toString()); + + redisTemplate.opsForValue().set(token, userId, second); + + List list = new ArrayList(); + List delList = new ArrayList(); + String tempKey = getPrefix() + "_tokenlist_" + userId; + Object obj = redisTemplate.opsForValue().get(tempKey); + if (obj != null) + { + list = (List) obj; + } + for (Serializable key : list) + { + if (!redisTemplate.hasKey(key)) + { + delList.add(key); + } + } + list.removeAll(delList); + list.add(token); + redisTemplate.opsForValue().set(tempKey, SerializeUtils.serialize(list), second); + return token; + } + + @Override + public String createToken(Integer userId) + { + return createToken(userId, seconds); + } + + @Override + public boolean resetToken(String token) + { + Object obj = redisTemplate.opsForValue().get(token); + if (obj != null) + { + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), seconds); + return true; + } + return false; + } + + @Override + public boolean validToken(String token) + { + return validToken(token, seconds); + } + + @Override + public boolean validToken(String token, Integer second) + { + Object obj = redisTemplate.opsForValue().get(token); + if (obj != null) + { + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), second); + return true; + } + return false; + } + + @Override + public Integer getUserId(String token) + { + Object obj = redisTemplate.opsForValue().get(token); + if (obj != null) + { + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), getSeconds()); + return (Integer) obj; + } + return null; + } + + @Override + public void deleteToken(String token) + { + redisTemplate.delete(token); + } + + @Override + public void deleteAllToken(Integer userId) + { + String tempKey = getPrefix() + "_tokenlist_" + userId; + Object obj = redisTemplate.opsForValue().get(tempKey); + if (obj != null) + { + List list = (List) obj; + redisTemplate.delete(list); + redisTemplate.delete(tempKey); + } + } + + @Override + public void deleteAllToken(Integer userId, String prefix) + { + String tempKey = prefix + "_tokenlist_" + userId; + Object obj = redisTemplate.opsForValue().get(tempKey); + if (obj != null) + { + List list = (List) obj; + redisTemplate.delete(list); + redisTemplate.delete(tempKey); + } + } +} \ No newline at end of file diff --git a/parent/pom.xml b/parent/pom.xml index e9d9be6..3cec51f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -273,6 +273,11 @@ qiniu-java-sdk ${qiniu-java-sdk.version} + + com.google.guava + guava + 19.0-rc2 + ${project.artifactId} -- 1.8.3.1