From 616e257617a5f6bdcb01dc7207d6f03e58248d45 Mon Sep 17 00:00:00 2001 From: DevTTL Date: Wed, 20 Aug 2025 12:36:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7spring-boot=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC3.5.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/devttl/common/constant/Constants.java | 5 +- .../com/devttl/common/utils/DateUtils.java | 1 + .../com/devttl/common/utils/StringUtils.java | 1 + .../framework/config/SecurityConfig.java | 98 ++++++++----------- pom.xml | 10 +- 5 files changed, 52 insertions(+), 63 deletions(-) diff --git a/devttl-common/src/main/java/com/devttl/common/constant/Constants.java b/devttl-common/src/main/java/com/devttl/common/constant/Constants.java index 6bc78da..1d74eac 100644 --- a/devttl-common/src/main/java/com/devttl/common/constant/Constants.java +++ b/devttl-common/src/main/java/com/devttl/common/constant/Constants.java @@ -1,8 +1,9 @@ package com.devttl.common.constant; -import java.util.Locale; import io.jsonwebtoken.Claims; +import java.util.Locale; + /** * 通用常量信息 * @@ -158,7 +159,7 @@ public class Constants /** * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) */ - public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.devttl" }; + public static final String[] JSON_WHITELIST_STR = { "com.devttl" }; /** * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) diff --git a/devttl-common/src/main/java/com/devttl/common/utils/DateUtils.java b/devttl-common/src/main/java/com/devttl/common/utils/DateUtils.java index 8e58541..e9bd8c0 100644 --- a/devttl-common/src/main/java/com/devttl/common/utils/DateUtils.java +++ b/devttl-common/src/main/java/com/devttl/common/utils/DateUtils.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.time.DateFormatUtils; * * @author devttl */ +@SuppressWarnings("deprecation") public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String YYYY = "yyyy"; diff --git a/devttl-common/src/main/java/com/devttl/common/utils/StringUtils.java b/devttl-common/src/main/java/com/devttl/common/utils/StringUtils.java index e85cb87..a9bf7b1 100644 --- a/devttl-common/src/main/java/com/devttl/common/utils/StringUtils.java +++ b/devttl-common/src/main/java/com/devttl/common/utils/StringUtils.java @@ -15,6 +15,7 @@ import com.devttl.common.core.text.StrFormatter; * * @author devttl */ +@SuppressWarnings("deprecation") public class StringUtils extends org.apache.commons.lang3.StringUtils { /** 空字符串 */ diff --git a/devttl-framework/src/main/java/com/devttl/framework/config/SecurityConfig.java b/devttl-framework/src/main/java/com/devttl/framework/config/SecurityConfig.java index 27534c5..b961613 100644 --- a/devttl-framework/src/main/java/com/devttl/framework/config/SecurityConfig.java +++ b/devttl-framework/src/main/java/com/devttl/framework/config/SecurityConfig.java @@ -1,41 +1,33 @@ package com.devttl.framework.config; +import com.devttl.framework.config.properties.PermitAllUrlProperties; +import com.devttl.framework.security.filter.JwtAuthenticationTokenFilter; +import com.devttl.framework.security.handle.AuthenticationEntryPointImpl; +import com.devttl.framework.security.handle.LogoutSuccessHandlerImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.ProviderManager; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.logout.LogoutFilter; import org.springframework.web.filter.CorsFilter; -import com.devttl.framework.config.properties.PermitAllUrlProperties; -import com.devttl.framework.security.filter.JwtAuthenticationTokenFilter; -import com.devttl.framework.security.handle.AuthenticationEntryPointImpl; -import com.devttl.framework.security.handle.LogoutSuccessHandlerImpl; /** * spring security配置 - * + * * @author devttl */ @EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) @Configuration -public class SecurityConfig -{ - /** - * 自定义用户认证逻辑 - */ - @Autowired - private UserDetailsService userDetailsService; - +public class SecurityConfig { + /** * 认证失败处理类 */ @@ -53,7 +45,7 @@ public class SecurityConfig */ @Autowired private JwtAuthenticationTokenFilter authenticationTokenFilter; - + /** * 跨域过滤器 */ @@ -70,12 +62,8 @@ public class SecurityConfig * 身份验证实现 */ @Bean - public AuthenticationManager authenticationManager() - { - DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); - daoAuthenticationProvider.setUserDetailsService(userDetailsService); - daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder()); - return new ProviderManager(daoAuthenticationProvider); + public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); } /** @@ -94,46 +82,44 @@ public class SecurityConfig * authenticated | 用户登录后可访问 */ @Bean - protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception - { + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity - // CSRF禁用,因为不使用session - .csrf(csrf -> csrf.disable()) - // 禁用HTTP响应标头 - .headers((headersCustomizer) -> { - headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); - }) - // 认证失败处理类 - .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) - // 基于token,所以不需要session - .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - // 注解标记允许匿名访问的url - .authorizeHttpRequests((requests) -> { - permitAllUrl.getUrls().forEach(url -> requests.requestMatchers(url).permitAll()); - // 对于登录login 注册register 验证码captchaImage 允许匿名访问 - requests.requestMatchers("/login", "/register", "/captchaImage").permitAll() - // 静态资源,可匿名访问 - .requestMatchers(HttpMethod.GET, "/", "/*.html", "/**.html", "/**.css", "/**.js", "/profile/**").permitAll() - .requestMatchers("/swagger-ui.html", "/v3/api-docs/**", "/swagger-ui/**", "/druid/**").permitAll() - // 除上面外的所有请求全部需要鉴权认证 - .anyRequest().authenticated(); - }) - // 添加Logout filter - .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) - // 添加JWT filter - .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) - // 添加CORS filter - .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) - .addFilterBefore(corsFilter, LogoutFilter.class) - .build(); + // CSRF禁用,因为不使用session + .csrf(csrf -> csrf.disable()) + // 禁用HTTP响应标头 + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); + }) + // 认证失败处理类 + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + // 基于token,所以不需要session + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + // 注解标记允许匿名访问的url + .authorizeHttpRequests((requests) -> { + permitAllUrl.getUrls().forEach(url -> requests.requestMatchers(url).permitAll()); + // 对于登录login 注册register 验证码captchaImage 允许匿名访问 + requests.requestMatchers("/login", "/register", "/captchaImage").permitAll() + // 静态资源,可匿名访问 + .requestMatchers(HttpMethod.GET, "/", "/*.html", "/**.html", "/**.css", "/**.js", "/profile/**").permitAll() + .requestMatchers("/swagger-ui.html", "/v3/api-docs/**", "/swagger-ui/**", "/druid/**").permitAll() + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated(); + }) + // 添加Logout filter + .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) + // 添加JWT filter + .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) + // 添加CORS filter + .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) + .addFilterBefore(corsFilter, LogoutFilter.class) + .build(); } /** * 强散列哈希加密实现 */ @Bean - public BCryptPasswordEncoder bCryptPasswordEncoder() - { + public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } } diff --git a/pom.xml b/pom.xml index 9ca0f03..a8b97a5 100644 --- a/pom.xml +++ b/pom.xml @@ -20,14 +20,14 @@ 3.5.16 3.5.12 3.5.12 - 3.0.3 + 3.0.4 1.2.23 1.21 3.0.0 2.3.3 - 2.1.0 + 2.1.1 2.0.57 - 6.8.1 + 6.8.2 2.19.0 4.1.2 2.3 @@ -35,7 +35,7 @@ 8.2.0 2.3.1 6.0.0 - 2.6.0 + 2.8.9 @@ -46,7 +46,7 @@ org.springframework.boot spring-boot-dependencies - 3.3.5 + 3.5.4 pom import