Skip to content

Commit 59ec325

Browse files
authored
Merge pull request #41 from codingapi/3.x
3.x
2 parents c82ecc9 + 43b0693 commit 59ec325

File tree

46 files changed

+453
-168
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

+453
-168
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权限框架
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: 16 additions & 6 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
1020
codingapi.security.aes-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/**

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
<parent>
77
<groupId>org.springframework.boot</groupId>
88
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>3.1.8</version>
9+
<version>3.2.4</version>
1010
<relativePath/> <!-- lookup parent from repository -->
1111
</parent>
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>3.1.10</version>
15+
<version>3.2.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>
@@ -145,7 +145,7 @@
145145

146146
<dependency>
147147
<groupId>com.codingapi.springboot</groupId>
148-
<artifactId>springboot-starter-security-jwt</artifactId>
148+
<artifactId>springboot-starter-security</artifactId>
149149
<version>${codingapi.framework.version}</version>
150150
</dependency>
151151

@@ -251,7 +251,7 @@
251251
</activation>
252252
<modules>
253253
<module>springboot-starter</module>
254-
<module>springboot-starter-security-jwt</module>
254+
<module>springboot-starter-security</module>
255255
<module>springboot-starter-data-fast</module>
256256
</modules>
257257
</profile>
@@ -262,7 +262,7 @@
262262

263263
<modules>
264264
<module>springboot-starter</module>
265-
<module>springboot-starter-security-jwt</module>
265+
<module>springboot-starter-security</module>
266266
<module>springboot-starter-data-fast</module>
267267
</modules>
268268

@@ -311,7 +311,7 @@
311311

312312
<modules>
313313
<module>springboot-starter</module>
314-
<module>springboot-starter-security-jwt</module>
314+
<module>springboot-starter-security</module>
315315
<module>springboot-starter-data-fast</module>
316316
</modules>
317317

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>3.1.10</version>
8+
<version>3.2.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>3.1.10</version>
9+
<version>3.2.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>17</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: 46 additions & 46 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 jakarta.servlet.http.HttpServletRequest;
1111
import jakarta.servlet.http.HttpServletResponse;
1212
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -16,8 +16,10 @@
1616
import org.springframework.core.env.Environment;
1717
import org.springframework.security.authentication.AuthenticationProvider;
1818
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
19+
import org.springframework.security.config.Customizer;
1920
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2021
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
22+
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
2123
import org.springframework.security.core.userdetails.User;
2224
import org.springframework.security.core.userdetails.UserDetails;
2325
import org.springframework.security.core.userdetails.UserDetailsService;
@@ -60,23 +62,23 @@ public PasswordEncoder passwordEncoder() {
6062

6163
@Bean
6264
@ConditionalOnMissingBean
63-
public SecurityLoginHandler securityLoginHandler(){
64-
return new SecurityLoginHandler() {
65-
@Override
66-
public void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception {
65+
public SecurityLoginHandler securityLoginHandler() {
66+
return new SecurityLoginHandler() {
67+
@Override
68+
public void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception {
6769

68-
}
70+
}
6971

70-
@Override
71-
public void postHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler, Token token) {
72+
@Override
73+
public void postHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler, Token token) {
7274

73-
}
74-
};
75+
}
76+
};
7577
}
7678

7779
@Bean
7880
@ConditionalOnMissingBean
79-
public AuthenticationTokenFilter authenticationTokenFilter(){
81+
public AuthenticationTokenFilter authenticationTokenFilter() {
8082
return (request, response, chain) -> {
8183

8284
};
@@ -85,22 +87,29 @@ public AuthenticationTokenFilter authenticationTokenFilter(){
8587

8688
@Bean
8789
@ConditionalOnMissingBean
88-
public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt,SecurityLoginHandler loginHandler,
89-
SecurityJwtProperties properties,AuthenticationTokenFilter authenticationTokenFilter) throws Exception {
90+
public SecurityFilterChain filterChain(HttpSecurity security, TokenGateway tokenGateway, SecurityLoginHandler loginHandler,
91+
CodingApiSecurityProperties properties, AuthenticationTokenFilter authenticationTokenFilter) throws Exception {
9092
//disable basic auth
91-
security.httpBasic().disable();
93+
security.httpBasic(AbstractHttpConfigurer::disable);
9294

9395
//before add addCorsMappings to enable cors.
94-
security.cors();
95-
if(properties.isDisableCsrf() ){
96-
security.csrf().disable();
97-
}
98-
security.apply(new HttpSecurityConfigurer(jwt,loginHandler,properties,authenticationTokenFilter));
99-
security
100-
.exceptionHandling()
101-
.authenticationEntryPoint(new MyUnAuthenticationEntryPoint())
102-
.accessDeniedHandler(new MyAccessDeniedHandler())
103-
.and()
96+
security.cors(httpSecurityCorsConfigurer -> {
97+
if (properties.isDisableCors()) {
98+
httpSecurityCorsConfigurer.disable();
99+
}
100+
});
101+
102+
security.csrf(httpSecurityCsrfConfigurer -> {
103+
if (properties.isDisableCsrf()) {
104+
httpSecurityCsrfConfigurer.disable();
105+
}
106+
});
107+
108+
109+
security.with(new HttpSecurityConfigurer(tokenGateway, loginHandler, properties, authenticationTokenFilter), Customizer.withDefaults());
110+
security.exceptionHandling(httpSecurityExceptionHandlingConfigurer ->
111+
httpSecurityExceptionHandlingConfigurer.authenticationEntryPoint(new MyUnAuthenticationEntryPoint())
112+
.accessDeniedHandler(new MyAccessDeniedHandler()))
104113
.authorizeHttpRequests(
105114
registry -> {
106115
registry.requestMatchers(properties.getIgnoreUrls()).permitAll()
@@ -109,15 +118,13 @@ public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt,SecurityLo
109118
}
110119
)
111120
//default login url :/login
112-
.formLogin()
113-
.loginProcessingUrl(properties.getLoginProcessingUrl())
114-
.permitAll()
115-
.and()
121+
.formLogin(httpSecurityFormLoginConfigurer ->
122+
httpSecurityFormLoginConfigurer.loginPage(properties.getLoginProcessingUrl())
123+
)
116124
//default logout url :/logout
117-
.logout()
118-
.logoutUrl(properties.getLogoutUrl())
119-
.addLogoutHandler(new MyLogoutHandler())
120-
.logoutSuccessHandler(new MyLogoutSuccessHandler());
125+
.logout(httpSecurityLogoutConfigurer -> httpSecurityLogoutConfigurer.logoutUrl(properties.getLogoutUrl())
126+
.addLogoutHandler(new MyLogoutHandler())
127+
.logoutSuccessHandler(new MyLogoutSuccessHandler()));
121128

122129
return security.build();
123130
}
@@ -135,18 +142,11 @@ public AuthenticationProvider authenticationProvider(UserDetailsService userDeta
135142

136143

137144
@Bean
138-
@ConditionalOnMissingBean
139-
public Jwt jwt(SecurityJwtProperties properties) {
140-
return new Jwt(properties.getJwtSecretKey(), properties.getJwtTime(), properties.getJwtRestTime());
141-
}
142-
143-
144-
@Bean
145-
public WebMvcConfigurer corsConfigurer(SecurityJwtProperties securityJwtProperties) {
145+
public WebMvcConfigurer corsConfigurer(CodingApiSecurityProperties securityJwtProperties) {
146146
return new WebMvcConfigurer() {
147147
@Override
148148
public void addCorsMappings(CorsRegistry registry) {
149-
if(securityJwtProperties.isDisableCors()) {
149+
if (securityJwtProperties.isDisableCors()) {
150150
registry.addMapping("/**")
151151
.allowedHeaders("*")
152152
.allowedMethods("*")
@@ -163,14 +163,14 @@ public void addCorsMappings(CorsRegistry registry) {
163163

164164
@Bean
165165
@ConfigurationProperties(prefix = "codingapi.security")
166-
public SecurityJwtProperties securityJwtProperties() {
167-
return new SecurityJwtProperties();
166+
public CodingApiSecurityProperties codingApiSecurityProperties() {
167+
return new CodingApiSecurityProperties();
168168
}
169169

170170

171171
@Bean
172172
@ConditionalOnMissingBean
173-
public VersionController versionController(Environment environment){
173+
public VersionController versionController(Environment environment) {
174174
return new VersionController(environment);
175175
}
176176

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,27 @@
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;
11+
import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
1112
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
12-
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
13+
import org.springframework.security.web.DefaultSecurityFilterChain;
1314

1415
@AllArgsConstructor
15-
public class HttpSecurityConfigurer extends AbstractHttpConfigurer<HttpSecurityConfigurer, HttpSecurity> {
16+
public class HttpSecurityConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
1617

17-
private final Jwt jwt;
18+
private final TokenGateway tokenGateway;
1819

1920
private final SecurityLoginHandler securityLoginHandler;
20-
private final SecurityJwtProperties securityJwtProperties;
21+
private final CodingApiSecurityProperties securityJwtProperties;
2122
private final AuthenticationTokenFilter authenticationTokenFilter;
2223

2324
@Override
2425
public void configure(HttpSecurity security) throws Exception {
2526
AuthenticationManager manager = security.getSharedObject(AuthenticationManager.class);
26-
security.addFilter(new MyLoginFilter(manager, jwt,securityLoginHandler, securityJwtProperties));
27-
security.addFilter(new MyAuthenticationFilter(manager,securityJwtProperties,jwt,authenticationTokenFilter));
27+
security.addFilter(new MyLoginFilter(manager, tokenGateway,securityLoginHandler, securityJwtProperties));
28+
security.addFilter(new MyAuthenticationFilter(manager, securityJwtProperties, tokenGateway, authenticationTokenFilter));
2829
}
2930
}
Lines changed: 2 additions & 2 deletions
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,7 +10,7 @@
1010
@AllArgsConstructor
1111
public class WebSecurityConfigurer implements WebSecurityCustomizer {
1212

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

1515
@Override
1616
public void customize(WebSecurity web) {

0 commit comments

Comments
 (0)