# sc3 **Repository Path**: wangfengbj/sc3 ## Basic Information - **Project Name**: sc3 - **Description**: SpringBoot3 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-03 - **Last Updated**: 2025-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # flyingbear ## 简介 | 工具 | 版本 | |----|----| | SpringBoot | 3.5.X | | Spring Cloud | 2025.X | | JDK | 17+ | *** ## 服务和使用说明 ### common-redis-boot-starter 【SpringBoot3自定义启动器】 1. 创建配置类 2. 创建XXAutoConfiguration类 3. 如果有需要可以增加Condition条件注解,也可容易同时结合注解类 4. 配置AutoConfiguration.imports自动配置类 5. 这个例子里面自动装配RedissonClient ### server-eureka注册中心【端口8000】 1. [访问地址](http://localhost:8000) 2. spring-cloud-starter-eureka-server弃用,新spring-cloud-starter-netflix-eureka-server 3. 注册中心,安全security、负载LoadBalancer、缓存caffeine 4. 默认引入actuator、web、hystrix新版是Resilience4j、ribbon新版是spring-cloud-loadbalancer *** ### embedded-server【内嵌服务,仅研究测试使用】 1. redis() 2. kafka() *** ### test-starter 【端口10001,测试自定义starter】 1. [RedissonClient自动装配]http://localhost:10001/redis) *** ### zone-template【端口8100】 1. Eureka客户端 2. Jackson对null处理 *** #### termination-gateway 1. 网关整合security6.x采用webflux形式,数据库采用H2,测试地址项目下test.http。抽象类:AbstractAuthenticationToken,实现UsernamePasswordAuthenticationToken。 2. 认证(Authentication):Authentication对象来保存用户的身份信息,包括用户名、密码、角色等。 3. 授权(Authorization):SpringSecurity通过检查用户角色的权限来决定是否允许其访问特定资源。 4. 安全上下文(SecurityContext):安全上下文由SecurityContextHolder管理,并通过Authentication对象来存储用户的身份信息。 5. 过滤器链(FilterChain):SpringSecurity使用过滤器链来处理安全相关的请求。过滤器链中的每个过滤器都负责处理特定的安全任务,如身份验证、授权等。 6. FilterChainProxy属于Servlet级别的过滤器部SecurityFilterChain。 7. 认证成功处理类:AuthenticationSuccessHandler。 8. 认证失败处理类:AuthenticationFailureHandler。 9. SecurityContextPersistenceFilter、授权重要AuthorizationFilter又将授权逻辑交给AuthorizationManager去实现,这里默认实现是RequestMatcherDelegatingAuthorizationManager。 | webflux | MVC | 说明 | |-------------------------------|----------------------------------------|---------------------| | @EnableWebFluxSecurity | @EnableWebSecurity | 开启对SpringSecurity支持 | | ReactiveSecurityContextHolder | SecurityContextHolder | 上下文对象 | | AuthenticationWebFilter | AbstractAuthenticationProcessingFilter | 身份验证过滤器 | | AuthorizationWebFilter | FilterSecurityInterceptor | 权限过滤器 | | ReactiveAuthenticationManager | AuthenticationManager | 身份认证管理器 | | ReactiveAuthorizationManager | AccessDecisionManager | 访问决策管理器 | | WebFilter | FilterChainProxy | 请求拦截链式处理 | | ReactiveUserDetailsService | UserDetailsService | 加载用户信息 | | UserDetails | UserDetails | 用户信息 | ##### security6.x开发步骤 1. 构建一个新的AuthenticationFilter业务类,继承AbstractAuthenticationProcessingFilter抽象类,可参照UsernamePasswordAuthenticationFilter。 2. 构建一个新的AuthenticationToken业务类,实现AbstractAuthenticationToken抽象类,可参照UsernamePasswordAuthenticationToken。 3. 构建一个AuthenticationManager业务类,实现AuthenticationManager接口,实现authenticate方法,可参照ProviderManager,也可以直接使用ProviderManager,只是需要将自定义的AuthenticationProvider指定到该ProviderManager对象当中。 4. 构建一个AuthenticationProvider业务类,实现AuthenticationProvider接口,实现authenticate方法,可参照DaoAuthenticationProvider。 5. 构建两个Handle,一个是认证成功之后的处理器,实现AuthenticatonSuccessHandler接口,重写onAuthenticationSuccess方法,处理认证成功之后的逻辑处理,一个是认证失败之后的处理,实现AuthenticationFailureHandler接口,重写onAuthenticationFailure方法,处理认证失败之后的逻辑。 6. 构建一个UserDetailsService,实现UserDetailsService接口,实现loadUserByUsername方法,自定义加载用户信息的逻辑,可参照CachingUserDetailsService。 7. 构建一个UserDetails,实现UserDetails接口,自定义用户信息属性。 8. 构建JWT存储库,用来存储token。 9. 构建一个AuthenticationFilterConfigurer配置类,实现AuthenticationFilterConfigurer接口,自定义配置新的认证方式。 10. 构建配置类,注入SecurityFilterChain类。 ### 使用说明 1. H2ConsoleAutoConfiguration必须在servlet才能启动 ``` //, HandlerMappingIntrospector introspector // MvcRequestMatcher h2RequestMatcher = new MvcRequestMatcher(introspector, "/**"); // h2RequestMatcher.setServletPath("/h2-console"); // http.authorizeHttpRequests((authorize) -> authorize // .requestMatchers(h2RequestMatcher).permitAll() // // ... // ); // http.authorizeHttpRequests((authorize) -> authorize // .requestMatchers(PathRequest.toH2Console()).permitAll() // // ... // ); ```