Skip to content

Commit a0e87cb

Browse files
committed
add security redis support
1 parent e65a0df commit a0e87cb

File tree

46 files changed

+420
-147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+420
-147
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
1818

1919
* springboot-starter | Springboot领域驱动框架
2020
* springboot-starter-data-fast | 快速数据呈现框架
21-
* springboot-starter-security-jwt | security&jwt权限框架
21+
* springboot-starter-security | security权限框架支持基于JWT的无状态权限认证与Redis的有状态权限认证
2222

2323
## SpringBoot DDD Architecture | SpringBoot DDD 框架图
2424

@@ -44,7 +44,7 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
4444
<!-- security&jwt权限框架 -->
4545
<dependency>
4646
<groupId>com.codingapi.springboot</groupId>
47-
<artifactId>springboot-starter-security-jwt</artifactId>
47+
<artifactId>springboot-starter-security</artifactId>
4848
<version>${last.version}</version>
4949
</dependency>
5050

docs/wiki/springboot-starter-security-jwt.md renamed to docs/wiki/springboot-starter-security.md

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
1-
springboot-starter-security-jwt 功能介绍
1+
springboot-starter-security 功能介绍
2+
3+
支持无状态的JWT和有状态的redis两种不同的token机制
24

35
配置文件,默认参数即说明
46
```properties
7+
# JWT开关
8+
codingapi.security.jwt.enable=true
59
# JWT密钥 需大于32位的字符串
6-
codingapi.security.jwt-secret=codingapi.security.jwt.secretkey
10+
codingapi.security.jwt.secret-key=codingapi.security.jwt.secretkey
11+
12+
# JWT 有效时间(毫秒) 15分钟有效期 1000*60*15=900000
13+
codingapi.security.jwt.valid-time=900000
14+
# JWT 更换令牌时间(毫秒) 10分钟后更换令牌 1000*60*10=600000
15+
codingapi.security.jwt.rest-time=600000
16+
717
# JWT AES密钥
818
codingapi.security.ase-key=QUNEWCQlXiYqJCNYQ1phc0FDRFgkJV4mKiQjWENaYXM=
919
# JWT AES IV
10-
codingapi.security.aes-iv=QUNYRkdIQEVEUyNYQ1phcw==
20+
codingapi.security.ase-iv=QUNYRkdIQEVEUyNYQ1phcw==
1121

12-
# JWT 有效时间(毫秒) 15分钟有效期 1000*60*15=900000
13-
codingapi.security.jwt-time=900000
14-
# JWT 更换令牌时间(毫秒) 10分钟后更换令牌 1000*60*10=600000
15-
codingapi.security.jwt-rest-time=600000
22+
# Redis开关
23+
#codingapi.security.redis.enable=true
24+
#spring.data.redis.host=localhost
25+
#spring.data.redis.port=6379
1626

1727
# Security 配置 请求权限拦截地址
1828
codingapi.security.authenticated-urls=/api/**
@@ -52,7 +62,7 @@ security默认的账户密码为admin/admin,可以通过重写UserDetailsServi
5262

5363
## 登录拦截
5464
可以通过重写SecurityLoginHandler来实现自定义登录拦截,preHandle登录前的拦截处理,postHandle登录后的拦截处理
55-
```java
65+
```
5666
@Bean
5767
public SecurityLoginHandler securityLoginHandler() {
5868
return new SecurityLoginHandler() {
@@ -74,15 +84,15 @@ security默认的账户密码为admin/admin,可以通过重写UserDetailsServi
7484
通过TokenContext获取当前用户信息
7585
```java
7686
@GetMapping("/user")
77-
public String user(){
78-
return TokenContext.current().getUsername();
79-
}
87+
public String user(){
88+
return TokenContext.current().getUsername();
89+
}
8090
```
8191

8292
可以通过Token的extra字段来存储用户的更多信息,然后通过TokenContext获取
8393
```java
8494
@GetMapping("/user")
85-
public String user(){
86-
return TokenContext.current().getExtra("user");
87-
}
95+
public String user(){
96+
return TokenContext.current().getExtra("user");
97+
}
8898
```

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>2.7.10</version>
15+
<version>2.8.0</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>
@@ -32,7 +32,7 @@
3232
<maven.gpg.plugin>3.1.0</maven.gpg.plugin>
3333
<codingapi.framework.version>${project.version}</codingapi.framework.version>
3434
<fastjson.version>2.0.42</fastjson.version>
35-
<jsonwebtoken.jjwt.version>0.12.3</jsonwebtoken.jjwt.version>
35+
<jsonwebtoken.jjwt.version>0.12.5</jsonwebtoken.jjwt.version>
3636
<commons-io.version>2.15.0</commons-io.version>
3737
<commons-dbutils.version>1.8.1</commons-dbutils.version>
3838
<commons-text.version>1.11.0</commons-text.version>
@@ -143,7 +143,7 @@
143143

144144
<dependency>
145145
<groupId>com.codingapi.springboot</groupId>
146-
<artifactId>springboot-starter-security-jwt</artifactId>
146+
<artifactId>springboot-starter-security</artifactId>
147147
<version>${codingapi.framework.version}</version>
148148
</dependency>
149149

@@ -249,7 +249,7 @@
249249
</activation>
250250
<modules>
251251
<module>springboot-starter</module>
252-
<module>springboot-starter-security-jwt</module>
252+
<module>springboot-starter-security</module>
253253
<module>springboot-starter-data-fast</module>
254254
</modules>
255255
</profile>
@@ -260,7 +260,7 @@
260260

261261
<modules>
262262
<module>springboot-starter</module>
263-
<module>springboot-starter-security-jwt</module>
263+
<module>springboot-starter-security</module>
264264
<module>springboot-starter-data-fast</module>
265265
</modules>
266266

@@ -309,7 +309,7 @@
309309

310310
<modules>
311311
<module>springboot-starter</module>
312-
<module>springboot-starter-security-jwt</module>
312+
<module>springboot-starter-security</module>
313313
<module>springboot-starter-data-fast</module>
314314
</modules>
315315

springboot-starter-data-fast/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>2.7.10</version>
8+
<version>2.8.0</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-security-jwt/src/main/resources/META-INF/spring.factories

Lines changed: 0 additions & 4 deletions
This file was deleted.

springboot-starter-security-jwt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 0 additions & 3 deletions
This file was deleted.

springboot-starter-security-jwt/pom.xml renamed to springboot-starter-security/pom.xml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>2.7.10</version>
9+
<version>2.8.0</version>
1010
</parent>
1111

12-
<artifactId>springboot-starter-security-jwt</artifactId>
12+
<artifactId>springboot-starter-security</artifactId>
1313

14-
<name>springboot-starter-security-jwt</name>
15-
<description>springboot-starter-security-jwt project for Spring Boot</description>
14+
<name>springboot-starter-security</name>
15+
<description>springboot-starter-security project for Spring Boot</description>
1616

1717
<properties>
1818
<java.version>8</java.version>
@@ -30,19 +30,28 @@
3030
<artifactId>spring-boot-starter-web</artifactId>
3131
</dependency>
3232

33+
<dependency>
34+
<groupId>org.springframework.boot</groupId>
35+
<artifactId>spring-boot-starter-data-redis</artifactId>
36+
<scope>provided</scope>
37+
</dependency>
38+
3339
<dependency>
3440
<groupId>io.jsonwebtoken</groupId>
3541
<artifactId>jjwt-api</artifactId>
42+
<scope>provided</scope>
3643
</dependency>
3744

3845
<dependency>
3946
<groupId>io.jsonwebtoken</groupId>
4047
<artifactId>jjwt-impl</artifactId>
48+
<scope>provided</scope>
4149
</dependency>
4250

4351
<dependency>
4452
<groupId>io.jsonwebtoken</groupId>
4553
<artifactId>jjwt-jackson</artifactId>
54+
<scope>provided</scope>
4655
</dependency>
4756

4857
<dependency>
Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import com.codingapi.springboot.security.controller.VersionController;
55
import com.codingapi.springboot.security.dto.request.LoginRequest;
66
import com.codingapi.springboot.security.filter.*;
7-
import com.codingapi.springboot.security.jwt.Jwt;
8-
import com.codingapi.springboot.security.jwt.Token;
9-
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
7+
import com.codingapi.springboot.security.gateway.Token;
8+
import com.codingapi.springboot.security.gateway.TokenGateway;
9+
import com.codingapi.springboot.security.properties.CodingApiSecurityProperties;
1010
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1111
import org.springframework.boot.context.properties.ConfigurationProperties;
1212
import org.springframework.context.annotation.Bean;
@@ -86,8 +86,8 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response,
8686

8787
@Bean
8888
@ConditionalOnMissingBean
89-
public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt, SecurityLoginHandler loginHandler,
90-
SecurityJwtProperties properties, AuthenticationTokenFilter authenticationTokenFilter) throws Exception {
89+
public SecurityFilterChain filterChain(HttpSecurity security, TokenGateway tokenGateway, SecurityLoginHandler loginHandler,
90+
CodingApiSecurityProperties properties, AuthenticationTokenFilter authenticationTokenFilter) throws Exception {
9191
//disable basic auth
9292
security.httpBasic().disable();
9393

@@ -96,7 +96,7 @@ public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt, SecurityL
9696
if (properties.isDisableCsrf()) {
9797
security.csrf().disable();
9898
}
99-
security.apply(new HttpSecurityConfigurer(jwt, loginHandler, properties, authenticationTokenFilter));
99+
security.apply(new HttpSecurityConfigurer(tokenGateway, loginHandler, properties, authenticationTokenFilter));
100100
security
101101
.exceptionHandling()
102102
.authenticationEntryPoint(new MyUnAuthenticationEntryPoint())
@@ -135,19 +135,13 @@ public AuthenticationProvider authenticationProvider(UserDetailsService userDeta
135135
}
136136

137137

138-
@Bean
139-
@ConditionalOnMissingBean
140-
public Jwt jwt(SecurityJwtProperties properties) {
141-
return new Jwt(properties.getJwtSecretKey(), properties.getJwtTime(), properties.getJwtRestTime());
142-
}
143-
144138

145139
@Bean
146-
public WebMvcConfigurer corsConfigurer(SecurityJwtProperties securityJwtProperties) {
140+
public WebMvcConfigurer corsConfigurer(CodingApiSecurityProperties securityProperties) {
147141
return new WebMvcConfigurer() {
148142
@Override
149143
public void addCorsMappings(CorsRegistry registry) {
150-
if (securityJwtProperties.isDisableCors()) {
144+
if (securityProperties.isDisableCors()) {
151145
registry.addMapping("/**")
152146
.allowedHeaders("*")
153147
.allowedMethods("*")
@@ -164,8 +158,8 @@ public void addCorsMappings(CorsRegistry registry) {
164158

165159
@Bean
166160
@ConfigurationProperties(prefix = "codingapi.security")
167-
public SecurityJwtProperties securityJwtProperties() {
168-
return new SecurityJwtProperties();
161+
public CodingApiSecurityProperties codingApiSecurityProperties() {
162+
return new CodingApiSecurityProperties();
169163
}
170164

171165

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.codingapi.springboot.security.filter.MyAuthenticationFilter;
55
import com.codingapi.springboot.security.filter.MyLoginFilter;
66
import com.codingapi.springboot.security.filter.SecurityLoginHandler;
7-
import com.codingapi.springboot.security.jwt.Jwt;
8-
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
7+
import com.codingapi.springboot.security.gateway.TokenGateway;
8+
import com.codingapi.springboot.security.properties.CodingApiSecurityProperties;
99
import lombok.AllArgsConstructor;
1010
import org.springframework.security.authentication.AuthenticationManager;
1111
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -14,16 +14,16 @@
1414
@AllArgsConstructor
1515
public class HttpSecurityConfigurer extends AbstractHttpConfigurer<HttpSecurityConfigurer, HttpSecurity> {
1616

17-
private final Jwt jwt;
17+
private final TokenGateway tokenGateway;
1818

1919
private final SecurityLoginHandler securityLoginHandler;
20-
private final SecurityJwtProperties securityJwtProperties;
20+
private final CodingApiSecurityProperties securityProperties;
2121
private final AuthenticationTokenFilter authenticationTokenFilter;
2222

2323
@Override
2424
public void configure(HttpSecurity security) throws Exception {
2525
AuthenticationManager manager = security.getSharedObject(AuthenticationManager.class);
26-
security.addFilter(new MyLoginFilter(manager, jwt,securityLoginHandler, securityJwtProperties));
27-
security.addFilter(new MyAuthenticationFilter(manager,securityJwtProperties,jwt,authenticationTokenFilter));
26+
security.addFilter(new MyLoginFilter(manager, tokenGateway,securityLoginHandler, securityProperties));
27+
security.addFilter(new MyAuthenticationFilter(manager,securityProperties,tokenGateway,authenticationTokenFilter));
2828
}
2929
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.codingapi.springboot.security.configurer;
22

3-
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
3+
import com.codingapi.springboot.security.properties.CodingApiSecurityProperties;
44
import lombok.AllArgsConstructor;
55
import org.springframework.context.annotation.Configuration;
66
import org.springframework.security.config.annotation.web.builders.WebSecurity;
@@ -10,12 +10,12 @@
1010
@AllArgsConstructor
1111
public class WebSecurityConfigurer implements WebSecurityCustomizer {
1212

13-
private final SecurityJwtProperties securityJwtProperties;
13+
private final CodingApiSecurityProperties securityProperties;
1414

1515
@Override
1616
public void customize(WebSecurity web) {
1717
//ignoring security filters request url
18-
web.ignoring().antMatchers(securityJwtProperties.getIgnoreUrls());
18+
web.ignoring().antMatchers(securityProperties.getIgnoreUrls());
1919
}
2020

2121
}

springboot-starter-security-jwt/src/main/java/com/codingapi/springboot/security/crypto/MyAES.java renamed to springboot-starter-security/src/main/java/com/codingapi/springboot/security/crypto/AESTools.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
import java.nio.charset.StandardCharsets;
77
import java.util.Base64;
88

9-
public class MyAES {
9+
public class AESTools {
1010

11-
private final static MyAES instance = new MyAES();
11+
private final static AESTools instance = new AESTools();
1212

1313
private AES aes;
1414

15-
private MyAES() {
15+
private AESTools() {
1616
}
1717

1818
void init(AES aes) {
1919
this.aes = aes;
2020
}
2121

22-
public static MyAES getInstance() {
22+
public static AESTools getInstance() {
2323
return instance;
2424
}
2525

Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
package com.codingapi.springboot.security.crypto;
22

33
import com.codingapi.springboot.framework.crypto.AES;
4-
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
4+
import com.codingapi.springboot.security.properties.CodingApiSecurityProperties;
55
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
66
import org.springframework.context.annotation.Bean;
77
import org.springframework.context.annotation.Configuration;
88

99
import java.util.Base64;
1010

1111
@Configuration
12-
public class MyCryptoConfiguration {
12+
public class SecurityCryptoConfiguration {
1313

1414
@Bean
1515
@ConditionalOnMissingBean
16-
public AES aes(SecurityJwtProperties properties) throws Exception {
16+
public AES aes(CodingApiSecurityProperties properties) throws Exception {
1717
AES aes = new AES(Base64.getDecoder().decode(properties.getAseKey().getBytes()),
1818
Base64.getDecoder().decode(properties.getAseIv()));
19-
MyAES.getInstance().init(aes);
19+
AESTools.getInstance().init(aes);
2020
return aes;
2121
}
22-
2322
}

0 commit comments

Comments
 (0)