11package com .codingapi .springboot .security .redis ;
22
33import com .alibaba .fastjson2 .JSONObject ;
4+ import com .codingapi .springboot .framework .crypto .AESUtils ;
45import com .codingapi .springboot .security .gateway .Token ;
6+ import lombok .SneakyThrows ;
57import org .springframework .data .redis .core .RedisTemplate ;
68
79import java .util .ArrayList ;
@@ -25,7 +27,8 @@ public RedisTokenGateway(RedisTemplate<String, String> redisTemplate, SecurityRe
2527
2628 public Token create (String username , String iv , List <String > authorities , String extra ) {
2729 Token token = new Token (username , iv , extra , authorities , validTime , restTime );
28- String key = String .format ("%s:%s" , username , UUID .randomUUID ().toString ().replaceAll ("-" , "" ));
30+ String usernameEncode = this .encodeUsername (username );
31+ String key = String .format ("%s:%s" , usernameEncode , UUID .randomUUID ().toString ().replaceAll ("-" , "" ));
2932 token .setToken (key );
3033 redisTemplate .opsForValue ().set (key , token .toJson (), validTime , TimeUnit .MILLISECONDS );
3134 return token ;
@@ -69,21 +72,29 @@ public void resetToken(Token token) {
6972 * @param username 用户名
7073 */
7174 public void removeUsername (String username ) {
72- Set <String > keys = redisTemplate .keys (username + ":*" );
75+ String usernameEncode = this .encodeUsername (username );
76+ Set <String > keys = redisTemplate .keys (usernameEncode + ":*" );
7377 if (!keys .isEmpty ()) {
7478 redisTemplate .delete (keys );
7579 }
7680 }
7781
7882
83+ @ SneakyThrows
84+ private String encodeUsername (String username ){
85+ return AESUtils .getInstance ().encode (username );
86+ }
87+
88+
7989 /**
8090 * 获取用户的所有token
8191 *
8292 * @param username 用户名
8393 * @return token列表
8494 */
8595 public List <String > getTokensByUsername (String username ) {
86- Set <String > keys = redisTemplate .keys (username + ":*" );
96+ String usernameEncode = this .encodeUsername (username );
97+ Set <String > keys = redisTemplate .keys (usernameEncode + ":*" );
8798 return new ArrayList <>(keys );
8899 }
89100
@@ -95,7 +106,8 @@ public List<String> getTokensByUsername(String username) {
95106 * @param predicate 条件
96107 */
97108 public void removeUsername (String username , Predicate <Token > predicate ) {
98- Set <String > keys = redisTemplate .keys (username + ":*" );
109+ String usernameEncode = this .encodeUsername (username );
110+ Set <String > keys = redisTemplate .keys (usernameEncode + ":*" );
99111 if (!keys .isEmpty ()) {
100112 for (String key : keys ) {
101113 Token token = getToken (key );
0 commit comments