Skip to content

Commit 9507080

Browse files
committed
fix #40
1 parent a87b9d8 commit 9507080

File tree

6 files changed

+84
-35
lines changed

6 files changed

+84
-35
lines changed

springboot-starter-security/src/main/java/com/codingapi/springboot/security/jwt/JWTSecurityConfiguration.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,15 @@ public SecurityJWTProperties securityJWTProperties() {
2121

2222
@Bean
2323
@ConditionalOnMissingBean
24-
public TokenGateway jwtTokenGateway(SecurityJWTProperties properties) {
25-
return new JWTTokenGatewayImpl(properties);
24+
public JwtTokenGateway jwtTokenGateway(SecurityJWTProperties properties) {
25+
return new JwtTokenGateway(properties);
26+
}
27+
28+
29+
@Bean
30+
@ConditionalOnMissingBean
31+
public TokenGateway jwtTokenGatewayImpl(JwtTokenGateway jwtTokenGateway) {
32+
return new JWTTokenGatewayImpl(jwtTokenGateway);
2633
}
2734

2835
}

springboot-starter-security/src/main/java/com/codingapi/springboot/security/jwt/JWTTokenGatewayImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@
77

88
public class JWTTokenGatewayImpl implements TokenGateway {
99

10-
private final Jwt jwt;
10+
private final JwtTokenGateway jwtTokenGateway;
1111

12-
public JWTTokenGatewayImpl(SecurityJWTProperties properties) {
13-
this.jwt = new Jwt(properties.getSecretKey(), properties.getValidTime(), properties.getRestTime());
12+
public JWTTokenGatewayImpl(JwtTokenGateway jwtTokenGateway) {
13+
this.jwtTokenGateway = jwtTokenGateway;
1414
}
1515

1616
@Override
1717
public Token create(String username, String password, List<String> authorities, String extra) {
18-
return jwt.create(username, password, authorities, extra);
18+
return jwtTokenGateway.create(username, password, authorities, extra);
1919
}
2020

2121
@Override
2222
public Token parser(String sign) {
23-
return jwt.parser(sign);
23+
return jwtTokenGateway.parser(sign);
2424
}
2525
}

springboot-starter-security/src/main/java/com/codingapi/springboot/security/jwt/Jwt.java renamed to springboot-starter-security/src/main/java/com/codingapi/springboot/security/jwt/JwtTokenGateway.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212
import java.nio.charset.StandardCharsets;
1313
import java.util.List;
1414

15-
public class Jwt {
15+
public class JwtTokenGateway {
1616

1717
private final SecretKey key;
1818
private final int validTime;
1919
private final int restTime;
2020

21-
public Jwt(String secretKey, int validTime, int restTime) {
22-
this.key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));
23-
this.validTime = validTime;
24-
this.restTime = restTime;
21+
public JwtTokenGateway(SecurityJWTProperties properties) {
22+
this.key = Keys.hmacShaKeyFor(properties.getSecretKey().getBytes(StandardCharsets.UTF_8));
23+
this.validTime = properties.getValidTime();
24+
this.restTime = properties.getRestTime();
2525
}
2626

2727
public Token create(String username, List<String> authorities, String extra){

springboot-starter-security/src/main/java/com/codingapi/springboot/security/redis/RedisSecurityConfiguration.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@ public SecurityRedisProperties securityRedisProperties() {
2222

2323
@Bean
2424
@ConditionalOnMissingBean
25-
public TokenGateway redisTokenGateway(RedisTemplate<String, String> redisTemplate, SecurityRedisProperties properties) {
26-
return new RedisTokenGatewayImpl(redisTemplate, properties);
25+
public RedisTokenGateway redisTokenGateway(RedisTemplate<String, String> redisTemplate, SecurityRedisProperties properties) {
26+
return new RedisTokenGateway(redisTemplate, properties);
27+
}
28+
29+
@Bean
30+
@ConditionalOnMissingBean
31+
public TokenGateway redisTokenGatewayImpl(RedisTokenGateway redisTokenGateway) {
32+
return new RedisTokenGatewayImpl(redisTokenGateway);
2733
}
2834

2935
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.codingapi.springboot.security.redis;
2+
3+
import com.alibaba.fastjson2.JSONObject;
4+
import com.codingapi.springboot.security.gateway.Token;
5+
import org.springframework.data.redis.core.RedisTemplate;
6+
7+
import java.util.List;
8+
import java.util.Set;
9+
import java.util.UUID;
10+
import java.util.concurrent.TimeUnit;
11+
12+
public class RedisTokenGateway {
13+
14+
private final RedisTemplate<String, String> redisTemplate;
15+
private final int validTime;
16+
private final int restTime;
17+
18+
public RedisTokenGateway(RedisTemplate<String, String> redisTemplate, SecurityRedisProperties properties) {
19+
this.redisTemplate = redisTemplate;
20+
this.validTime = properties.getValidTime();
21+
this.restTime = properties.getRestTime();
22+
}
23+
24+
public Token create(String username, String iv, List<String> authorities, String extra) {
25+
Token token = new Token(username, iv, extra, authorities, validTime, restTime);
26+
String key = String.format("%s:%s", username, UUID.randomUUID().toString().replaceAll("-", ""));
27+
token.setToken(key);
28+
redisTemplate.opsForValue().set(key, token.toJson(), validTime, TimeUnit.MILLISECONDS);
29+
return token;
30+
}
31+
32+
public Token parser(String sign) {
33+
String json = redisTemplate.opsForValue().get(sign);
34+
if (json == null) {
35+
return null;
36+
}
37+
return JSONObject.parseObject(json, Token.class);
38+
}
39+
40+
public void removeToken(String token) {
41+
redisTemplate.delete(token);
42+
}
43+
44+
public void removeUsername(String username) {
45+
Set<String> keys = redisTemplate.keys(username + ":*");
46+
if (keys != null && !keys.isEmpty()) {
47+
redisTemplate.delete(keys);
48+
}
49+
}
50+
51+
52+
}
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,26 @@
11
package com.codingapi.springboot.security.redis;
22

3-
import com.alibaba.fastjson2.JSONObject;
43
import com.codingapi.springboot.security.gateway.Token;
54
import com.codingapi.springboot.security.gateway.TokenGateway;
6-
import org.springframework.data.redis.core.RedisTemplate;
75

86
import java.util.List;
9-
import java.util.UUID;
10-
import java.util.concurrent.TimeUnit;
117

128
public class RedisTokenGatewayImpl implements TokenGateway {
139

14-
private final RedisTemplate<String, String> redisTemplate;
15-
private final int validTime;
16-
private final int restTime;
10+
private final RedisTokenGateway redisTokenGateway;
1711

18-
public RedisTokenGatewayImpl(RedisTemplate<String, String> redisTemplate, SecurityRedisProperties properties) {
19-
this.redisTemplate = redisTemplate;
20-
this.validTime = properties.getValidTime();
21-
this.restTime = properties.getRestTime();
12+
public RedisTokenGatewayImpl(RedisTokenGateway redisTokenGateway) {
13+
this.redisTokenGateway = redisTokenGateway;
2214
}
2315

2416
@Override
2517
public Token create(String username, String iv, List<String> authorities, String extra) {
26-
Token token = new Token(username, iv, extra, authorities, validTime, restTime);
27-
String key = String.format("%s:%s", username, UUID.randomUUID().toString().replaceAll("-", ""));
28-
token.setToken(key);
29-
redisTemplate.opsForValue().set(key, token.toJson(), validTime, TimeUnit.MILLISECONDS);
30-
return token;
18+
return redisTokenGateway.create(username, iv, authorities, extra);
3119
}
3220

3321
@Override
3422
public Token parser(String sign) {
35-
String json = redisTemplate.opsForValue().get(sign);
36-
if (json == null) {
37-
return null;
38-
}
39-
return JSONObject.parseObject(json, Token.class);
23+
return redisTokenGateway.parser(sign);
4024
}
4125

4226
}

0 commit comments

Comments
 (0)