Commit e6c7197fd43fee96ee659ce38c07e4e15d5feb7a
1 parent
02fe2e57ca
Exists in
master
增加token
Showing 5 changed files with 285 additions and 1 deletions
parent/core.sdk/pom.xml
View file @
e6c7197
parent/core.sdk/src/main/java/com/lyms/util/TokenUtils.java
View file @
e6c7197
| 1 | +package com.lyms.util; | |
| 2 | + | |
| 3 | +import com.google.common.base.Charsets; | |
| 4 | +import com.google.common.hash.Hashing; | |
| 5 | +import org.apache.commons.lang.time.FastDateFormat; | |
| 6 | + | |
| 7 | +import java.util.Date; | |
| 8 | +import com.google.common.base.Charsets; | |
| 9 | +import com.google.common.hash.Hashing; | |
| 10 | +import org.apache.commons.lang.time.FastDateFormat; | |
| 11 | +/** | |
| 12 | + * Created by riecard on 15/9/21. | |
| 13 | + */ | |
| 14 | +public class TokenUtils { | |
| 15 | + | |
| 16 | + private static final String privateKey = "fdas34ljfr好sja@#8$%dfkl;js&4*daklfjsdl;jb1324"; | |
| 17 | + public static String getToken(String password, String date) { | |
| 18 | + return Hashing.md5().newHasher(). | |
| 19 | + putString(password, Charsets.UTF_8). | |
| 20 | + putString(privateKey, Charsets.UTF_8). | |
| 21 | + putString(date, Charsets.UTF_8).hash().toString(); | |
| 22 | + } | |
| 23 | + | |
| 24 | + public static String getToken(String password, Date date) { | |
| 25 | + return Hashing.md5().newHasher(). | |
| 26 | + putString(password, Charsets.UTF_8). | |
| 27 | + putString(privateKey, Charsets.UTF_8). | |
| 28 | + putString(getDate(date), Charsets.UTF_8).hash().toString(); | |
| 29 | + } | |
| 30 | + | |
| 31 | + public static String getToken(String password) { | |
| 32 | + return Hashing.md5().newHasher(). | |
| 33 | + putString(password, Charsets.UTF_8). | |
| 34 | + putString(privateKey, Charsets.UTF_8).putString(getDate(), Charsets.UTF_8).hash().toString(); | |
| 35 | + } | |
| 36 | + public static boolean validToken(String token, String password) { | |
| 37 | + String confirm = getToken(password); | |
| 38 | + if (confirm.equals(token)) { | |
| 39 | + return true; | |
| 40 | + } else { | |
| 41 | + return false; | |
| 42 | + } | |
| 43 | + } | |
| 44 | + public static String getDate() { | |
| 45 | + Date date = new Date(System.currentTimeMillis()); | |
| 46 | + return FastDateFormat.getInstance("yyyyMMddHH").format(date); | |
| 47 | + } | |
| 48 | + public static String getDate(Date now) { | |
| 49 | + | |
| 50 | + return FastDateFormat.getInstance("yyyyMMddHH").format(now); | |
| 51 | + } | |
| 52 | + public static String getNextHour(Date now) { | |
| 53 | + Date date = new Date(now.getTime()+60*60*1000); | |
| 54 | + | |
| 55 | + return FastDateFormat.getInstance("yyyyMMddHH").format(date); | |
| 56 | + } | |
| 57 | + | |
| 58 | +} |
parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenService.java
View file @
e6c7197
| 1 | +package com.lyms.hospital.service.token; | |
| 2 | +/** | |
| 3 | + * Created by riecard on 15/9/22. | |
| 4 | + */ | |
| 5 | +public interface TokenService | |
| 6 | +{ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 创建token | |
| 10 | + * | |
| 11 | + * @return | |
| 12 | + */ | |
| 13 | + String createToken(Integer userId); | |
| 14 | + | |
| 15 | + /** | |
| 16 | + * 创建token | |
| 17 | + * | |
| 18 | + * @return | |
| 19 | + */ | |
| 20 | + String createToken(Integer userId, Integer second); | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * 重置token有效时间(默认重置为7天) | |
| 24 | + * | |
| 25 | + * @param token | |
| 26 | + * @return | |
| 27 | + */ | |
| 28 | + boolean resetToken(String token); | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * 检查token是否存在 | |
| 32 | + * | |
| 33 | + * @param token | |
| 34 | + * @return | |
| 35 | + */ | |
| 36 | + boolean validToken(String token); | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * 检查token是否存在 | |
| 40 | + * | |
| 41 | + * @param token | |
| 42 | + * @return | |
| 43 | + */ | |
| 44 | + boolean validToken(String token, Integer second); | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 根据token取userId,失败返回null | |
| 48 | + * | |
| 49 | + * @param token | |
| 50 | + * @return | |
| 51 | + */ | |
| 52 | + Integer getUserId(String token); | |
| 53 | + | |
| 54 | + void deleteAllToken(Integer userId); | |
| 55 | + | |
| 56 | + void deleteAllToken(Integer userId, String prefix); | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * 销毁token | |
| 60 | + * | |
| 61 | + * @param token | |
| 62 | + */ | |
| 63 | + void deleteToken(String token); | |
| 64 | + | |
| 65 | +} |
parent/hospital.mac/src/main/java/com/lyms/hospital/service/token/impl/TokenServiceImpl.java
View file @
e6c7197
| 1 | +package com.lyms.hospital.service.token.impl; | |
| 2 | + | |
| 3 | +import com.lyms.hospital.service.token.TokenService; | |
| 4 | +import com.lyms.util.SerializeUtils; | |
| 5 | +import com.lyms.util.TokenUtils; | |
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 7 | +import org.springframework.beans.factory.annotation.Value; | |
| 8 | +import org.springframework.data.redis.core.RedisTemplate; | |
| 9 | +import org.springframework.stereotype.Service; | |
| 10 | + | |
| 11 | +import java.io.Serializable; | |
| 12 | +import java.util.ArrayList; | |
| 13 | +import java.util.List; | |
| 14 | +import java.util.UUID; | |
| 15 | + | |
| 16 | +/** | |
| 17 | + * Created by riecard on 15/9/22. | |
| 18 | + */ | |
| 19 | +@Service | |
| 20 | +public class TokenServiceImpl implements TokenService | |
| 21 | +{ | |
| 22 | + | |
| 23 | + static final Integer seconds = 7 * 24 * 60 * 60; | |
| 24 | + static final Integer ams_seconds = 60 * 60; | |
| 25 | + @Value("${}") | |
| 26 | + private String tokenPrefix; | |
| 27 | + | |
| 28 | + @Autowired | |
| 29 | + private RedisTemplate<Serializable, Serializable> redisTemplate; | |
| 30 | + | |
| 31 | + private String prefix = null; | |
| 32 | + | |
| 33 | + private String getPrefix() | |
| 34 | + { | |
| 35 | + return tokenPrefix; | |
| 36 | + } | |
| 37 | + | |
| 38 | + private Integer getSeconds() | |
| 39 | + { | |
| 40 | + if ("ams".equals(prefix)) | |
| 41 | + { | |
| 42 | + return ams_seconds; | |
| 43 | + } else | |
| 44 | + { | |
| 45 | + return seconds; | |
| 46 | + } | |
| 47 | + } | |
| 48 | + | |
| 49 | + @Override | |
| 50 | + public String createToken(Integer userId, Integer second) | |
| 51 | + { | |
| 52 | + String token = getPrefix() + TokenUtils.getToken(UUID.randomUUID().toString()); | |
| 53 | + | |
| 54 | + redisTemplate.opsForValue().set(token, userId, second); | |
| 55 | + | |
| 56 | + List<Serializable> list = new ArrayList<Serializable>(); | |
| 57 | + List<Serializable> delList = new ArrayList<Serializable>(); | |
| 58 | + String tempKey = getPrefix() + "_tokenlist_" + userId; | |
| 59 | + Object obj = redisTemplate.opsForValue().get(tempKey); | |
| 60 | + if (obj != null) | |
| 61 | + { | |
| 62 | + list = (List<Serializable>) obj; | |
| 63 | + } | |
| 64 | + for (Serializable key : list) | |
| 65 | + { | |
| 66 | + if (!redisTemplate.hasKey(key)) | |
| 67 | + { | |
| 68 | + delList.add(key); | |
| 69 | + } | |
| 70 | + } | |
| 71 | + list.removeAll(delList); | |
| 72 | + list.add(token); | |
| 73 | + redisTemplate.opsForValue().set(tempKey, SerializeUtils.serialize(list), second); | |
| 74 | + return token; | |
| 75 | + } | |
| 76 | + | |
| 77 | + @Override | |
| 78 | + public String createToken(Integer userId) | |
| 79 | + { | |
| 80 | + return createToken(userId, seconds); | |
| 81 | + } | |
| 82 | + | |
| 83 | + @Override | |
| 84 | + public boolean resetToken(String token) | |
| 85 | + { | |
| 86 | + Object obj = redisTemplate.opsForValue().get(token); | |
| 87 | + if (obj != null) | |
| 88 | + { | |
| 89 | + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), seconds); | |
| 90 | + return true; | |
| 91 | + } | |
| 92 | + return false; | |
| 93 | + } | |
| 94 | + | |
| 95 | + @Override | |
| 96 | + public boolean validToken(String token) | |
| 97 | + { | |
| 98 | + return validToken(token, seconds); | |
| 99 | + } | |
| 100 | + | |
| 101 | + @Override | |
| 102 | + public boolean validToken(String token, Integer second) | |
| 103 | + { | |
| 104 | + Object obj = redisTemplate.opsForValue().get(token); | |
| 105 | + if (obj != null) | |
| 106 | + { | |
| 107 | + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), second); | |
| 108 | + return true; | |
| 109 | + } | |
| 110 | + return false; | |
| 111 | + } | |
| 112 | + | |
| 113 | + @Override | |
| 114 | + public Integer getUserId(String token) | |
| 115 | + { | |
| 116 | + Object obj = redisTemplate.opsForValue().get(token); | |
| 117 | + if (obj != null) | |
| 118 | + { | |
| 119 | + redisTemplate.opsForValue().set(token, SerializeUtils.serialize(obj), getSeconds()); | |
| 120 | + return (Integer) obj; | |
| 121 | + } | |
| 122 | + return null; | |
| 123 | + } | |
| 124 | + | |
| 125 | + @Override | |
| 126 | + public void deleteToken(String token) | |
| 127 | + { | |
| 128 | + redisTemplate.delete(token); | |
| 129 | + } | |
| 130 | + | |
| 131 | + @Override | |
| 132 | + public void deleteAllToken(Integer userId) | |
| 133 | + { | |
| 134 | + String tempKey = getPrefix() + "_tokenlist_" + userId; | |
| 135 | + Object obj = redisTemplate.opsForValue().get(tempKey); | |
| 136 | + if (obj != null) | |
| 137 | + { | |
| 138 | + List<Serializable> list = (List<Serializable>) obj; | |
| 139 | + redisTemplate.delete(list); | |
| 140 | + redisTemplate.delete(tempKey); | |
| 141 | + } | |
| 142 | + } | |
| 143 | + | |
| 144 | + @Override | |
| 145 | + public void deleteAllToken(Integer userId, String prefix) | |
| 146 | + { | |
| 147 | + String tempKey = prefix + "_tokenlist_" + userId; | |
| 148 | + Object obj = redisTemplate.opsForValue().get(tempKey); | |
| 149 | + if (obj != null) | |
| 150 | + { | |
| 151 | + List<Serializable> list = (List<Serializable>) obj; | |
| 152 | + redisTemplate.delete(list); | |
| 153 | + redisTemplate.delete(tempKey); | |
| 154 | + } | |
| 155 | + } | |
| 156 | +} |
parent/pom.xml
View file @
e6c7197
| ... | ... | @@ -273,6 +273,11 @@ |
| 273 | 273 | <artifactId>qiniu-java-sdk</artifactId> |
| 274 | 274 | <version>${qiniu-java-sdk.version}</version> |
| 275 | 275 | </dependency> |
| 276 | + <dependency> | |
| 277 | + <groupId>com.google.guava</groupId> | |
| 278 | + <artifactId>guava</artifactId> | |
| 279 | + <version>19.0-rc2</version> | |
| 280 | + </dependency> | |
| 276 | 281 | </dependencies> |
| 277 | 282 | <build> |
| 278 | 283 | <finalName>${project.artifactId}</finalName> |