gitextract_kk74s25r/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.md │ │ ├── future.md │ │ └── qa.md │ └── workflows/ │ ├── maven-publish-4x.yml │ ├── maven-publish-5x.yml │ ├── pull_request.yml │ └── pull_request_5x.yml ├── .gitignore ├── .mvn/ │ └── wrapper/ │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── LICENSE ├── README.md ├── build.sh ├── changes.sh ├── hsweb-authorization/ │ ├── README.md │ ├── hsweb-authorization-api/ │ │ ├── README.md │ │ ├── custom-data-access.md │ │ ├── define.md │ │ ├── pom.xml │ │ ├── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── hswebframework/ │ │ │ │ │ └── web/ │ │ │ │ │ └── authorization/ │ │ │ │ │ ├── Authentication.java │ │ │ │ │ ├── AuthenticationHolder.java │ │ │ │ │ ├── AuthenticationManager.java │ │ │ │ │ ├── AuthenticationPredicate.java │ │ │ │ │ ├── AuthenticationRequest.java │ │ │ │ │ ├── AuthenticationSupplier.java │ │ │ │ │ ├── AuthenticationUtils.java │ │ │ │ │ ├── DefaultDimensionType.java │ │ │ │ │ ├── Dimension.java │ │ │ │ │ ├── DimensionProvider.java │ │ │ │ │ ├── DimensionType.java │ │ │ │ │ ├── Permission.java │ │ │ │ │ ├── ReactiveAuthenticationHolder.java │ │ │ │ │ ├── ReactiveAuthenticationInitializeService.java │ │ │ │ │ ├── ReactiveAuthenticationManager.java │ │ │ │ │ ├── ReactiveAuthenticationManagerProvider.java │ │ │ │ │ ├── ReactiveAuthenticationSupplier.java │ │ │ │ │ ├── Role.java │ │ │ │ │ ├── User.java │ │ │ │ │ ├── access/ │ │ │ │ │ │ ├── DataAccessConfig.java │ │ │ │ │ │ ├── DataAccessConfiguration.java │ │ │ │ │ │ ├── DataAccessController.java │ │ │ │ │ │ ├── DataAccessHandler.java │ │ │ │ │ │ ├── DataAccessType.java │ │ │ │ │ │ ├── DefaultDataAccessType.java │ │ │ │ │ │ ├── DimensionHelper.java │ │ │ │ │ │ ├── FieldFilterDataAccessConfig.java │ │ │ │ │ │ ├── OwnCreatedDataAccessConfig.java │ │ │ │ │ │ ├── ScopeDataAccessConfig.java │ │ │ │ │ │ └── UserAttachEntity.java │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ ├── Authorize.java │ │ │ │ │ │ ├── CreateAction.java │ │ │ │ │ │ ├── DataAccess.java │ │ │ │ │ │ ├── DataAccessType.java │ │ │ │ │ │ ├── DeleteAction.java │ │ │ │ │ │ ├── Dimension.java │ │ │ │ │ │ ├── DimensionDataAccess.java │ │ │ │ │ │ ├── Dimensions.java │ │ │ │ │ │ ├── FieldDataAccess.java │ │ │ │ │ │ ├── Logical.java │ │ │ │ │ │ ├── QueryAction.java │ │ │ │ │ │ ├── RequiresRoles.java │ │ │ │ │ │ ├── Resource.java │ │ │ │ │ │ ├── ResourceAction.java │ │ │ │ │ │ ├── SaveAction.java │ │ │ │ │ │ ├── TwoFactor.java │ │ │ │ │ │ └── UserOwnData.java │ │ │ │ │ ├── builder/ │ │ │ │ │ │ ├── AuthenticationBuilder.java │ │ │ │ │ │ ├── AuthenticationBuilderFactory.java │ │ │ │ │ │ ├── DataAccessConfigBuilder.java │ │ │ │ │ │ └── DataAccessConfigBuilderFactory.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ ├── AuthenticationThreadLocalAccessor.java │ │ │ │ │ │ └── ThreadLocalReactiveAuthenticationSupplier.java │ │ │ │ │ ├── define/ │ │ │ │ │ │ ├── AopAuthorizeDefinition.java │ │ │ │ │ │ ├── AuthorizeDefinition.java │ │ │ │ │ │ ├── AuthorizeDefinitionContext.java │ │ │ │ │ │ ├── AuthorizeDefinitionCustomizer.java │ │ │ │ │ │ ├── AuthorizeDefinitionInitializedEvent.java │ │ │ │ │ │ ├── AuthorizingContext.java │ │ │ │ │ │ ├── CompositeAuthorizeDefinitionCustomizer.java │ │ │ │ │ │ ├── DataAccessDefinition.java │ │ │ │ │ │ ├── DataAccessTypeDefinition.java │ │ │ │ │ │ ├── DimensionDefinition.java │ │ │ │ │ │ ├── DimensionsDefinition.java │ │ │ │ │ │ ├── HandleType.java │ │ │ │ │ │ ├── MergedAuthorizeDefinition.java │ │ │ │ │ │ ├── Phased.java │ │ │ │ │ │ ├── ResourceActionDefinition.java │ │ │ │ │ │ ├── ResourceDefinition.java │ │ │ │ │ │ └── ResourcesDefinition.java │ │ │ │ │ ├── dimension/ │ │ │ │ │ │ ├── DimensionManager.java │ │ │ │ │ │ ├── DimensionUserBind.java │ │ │ │ │ │ ├── DimensionUserBindProvider.java │ │ │ │ │ │ └── DimensionUserDetail.java │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── AbstractAuthorizationEvent.java │ │ │ │ │ │ ├── AuthorizationBeforeEvent.java │ │ │ │ │ │ ├── AuthorizationDecodeEvent.java │ │ │ │ │ │ ├── AuthorizationEvent.java │ │ │ │ │ │ ├── AuthorizationExitEvent.java │ │ │ │ │ │ ├── AuthorizationFailedEvent.java │ │ │ │ │ │ ├── AuthorizationInitializeEvent.java │ │ │ │ │ │ ├── AuthorizationSuccessEvent.java │ │ │ │ │ │ └── AuthorizingHandleBeforeEvent.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ ├── AccessDenyException.java │ │ │ │ │ │ ├── AuthenticationException.java │ │ │ │ │ │ ├── NeedTwoFactorException.java │ │ │ │ │ │ └── UnAuthorizedException.java │ │ │ │ │ ├── setting/ │ │ │ │ │ │ ├── SettingNullValueHolder.java │ │ │ │ │ │ ├── SettingValueHolder.java │ │ │ │ │ │ ├── StringSourceSettingHolder.java │ │ │ │ │ │ ├── UserSettingManager.java │ │ │ │ │ │ └── UserSettingPermission.java │ │ │ │ │ ├── simple/ │ │ │ │ │ │ ├── AbstractDataAccessConfig.java │ │ │ │ │ │ ├── CompositeReactiveAuthenticationManager.java │ │ │ │ │ │ ├── DefaultAuthorizationAutoConfiguration.java │ │ │ │ │ │ ├── DefaultDimensionManager.java │ │ │ │ │ │ ├── DimensionDataAccessConfig.java │ │ │ │ │ │ ├── PlainTextUsernamePasswordAuthenticationRequest.java │ │ │ │ │ │ ├── SimpleAuthentication.java │ │ │ │ │ │ ├── SimpleDimension.java │ │ │ │ │ │ ├── SimpleDimensionType.java │ │ │ │ │ │ ├── SimpleFieldFilterDataAccessConfig.java │ │ │ │ │ │ ├── SimpleOwnCreatedDataAccessConfig.java │ │ │ │ │ │ ├── SimplePermission.java │ │ │ │ │ │ ├── SimpleRole.java │ │ │ │ │ │ ├── SimpleUser.java │ │ │ │ │ │ └── builder/ │ │ │ │ │ │ ├── DataAccessConfigConverter.java │ │ │ │ │ │ ├── SimpleAuthenticationBuilder.java │ │ │ │ │ │ ├── SimpleAuthenticationBuilderFactory.java │ │ │ │ │ │ ├── SimpleDataAccessConfigBuilder.java │ │ │ │ │ │ └── SimpleDataAccessConfigBuilderFactory.java │ │ │ │ │ ├── token/ │ │ │ │ │ │ ├── AllopatricLoginMode.java │ │ │ │ │ │ ├── AuthenticationUserToken.java │ │ │ │ │ │ ├── DefaultUserTokenManager.java │ │ │ │ │ │ ├── LocalAuthenticationUserToken.java │ │ │ │ │ │ ├── LocalUserToken.java │ │ │ │ │ │ ├── ParsedToken.java │ │ │ │ │ │ ├── ReactiveTokenAuthenticationSupplier.java │ │ │ │ │ │ ├── SimpleParsedToken.java │ │ │ │ │ │ ├── ThirdPartAuthenticationManager.java │ │ │ │ │ │ ├── ThirdPartReactiveAuthenticationManager.java │ │ │ │ │ │ ├── TokenAuthenticationManager.java │ │ │ │ │ │ ├── TokenState.java │ │ │ │ │ │ ├── UserToken.java │ │ │ │ │ │ ├── UserTokenAuthenticationSupplier.java │ │ │ │ │ │ ├── UserTokenBeforeCreateEvent.java │ │ │ │ │ │ ├── UserTokenHolder.java │ │ │ │ │ │ ├── UserTokenManager.java │ │ │ │ │ │ ├── UserTokenReactiveAuthenticationSupplier.java │ │ │ │ │ │ ├── event/ │ │ │ │ │ │ │ ├── UserTokenChangedEvent.java │ │ │ │ │ │ │ ├── UserTokenCreatedEvent.java │ │ │ │ │ │ │ └── UserTokenRemovedEvent.java │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ ├── RedisTokenAuthenticationManager.java │ │ │ │ │ │ ├── RedisUserTokenManager.java │ │ │ │ │ │ ├── SimpleAuthenticationUserToken.java │ │ │ │ │ │ └── SimpleUserToken.java │ │ │ │ │ └── twofactor/ │ │ │ │ │ ├── TwoFactorToken.java │ │ │ │ │ ├── TwoFactorTokenManager.java │ │ │ │ │ ├── TwoFactorValidator.java │ │ │ │ │ ├── TwoFactorValidatorManager.java │ │ │ │ │ ├── TwoFactorValidatorProvider.java │ │ │ │ │ └── defaults/ │ │ │ │ │ ├── DefaultTwoFactorValidator.java │ │ │ │ │ ├── DefaultTwoFactorValidatorManager.java │ │ │ │ │ ├── DefaultTwoFactorValidatorProvider.java │ │ │ │ │ ├── HashMapTwoFactorTokenManager.java │ │ │ │ │ └── UnsupportedTwoFactorValidator.java │ │ │ │ ├── java9/ │ │ │ │ │ └── module-info.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── io.micrometer.context.ThreadLocalAccessor │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── i18n/ │ │ │ │ └── authentication/ │ │ │ │ ├── messages_en.properties │ │ │ │ └── messages_zh.properties │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── authorization/ │ │ │ ├── AuthenticationTests.java │ │ │ ├── UserTokenManagerTests.java │ │ │ ├── context/ │ │ │ │ └── AuthenticationThreadLocalAccessorTest.java │ │ │ ├── define/ │ │ │ │ └── MergedAuthorizeDefinitionTest.java │ │ │ ├── simple/ │ │ │ │ ├── DefaultDimensionManagerTest.java │ │ │ │ └── SimpleAuthenticationTest.java │ │ │ ├── token/ │ │ │ │ └── redis/ │ │ │ │ └── RedisUserTokenManagerTest.java │ │ │ └── twofactor/ │ │ │ └── defaults/ │ │ │ └── HashMapTwoFactorTokenManagerTest.java │ │ └── token.md │ ├── hsweb-authorization-basic/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── authorization/ │ │ │ │ └── basic/ │ │ │ │ ├── aop/ │ │ │ │ │ ├── AopAuthorizingController.java │ │ │ │ │ ├── AopMethodAuthorizeDefinitionCustomizerParser.java │ │ │ │ │ ├── AopMethodAuthorizeDefinitionParser.java │ │ │ │ │ └── DefaultAopMethodAuthorizeDefinitionParser.java │ │ │ │ ├── configuration/ │ │ │ │ │ ├── AopAuthorizeAutoConfiguration.java │ │ │ │ │ ├── AuthorizingHandlerAutoConfiguration.java │ │ │ │ │ ├── BasicAuthorizationTokenParser.java │ │ │ │ │ ├── EnableAopAuthorize.java │ │ │ │ │ └── WebMvcAuthorizingConfiguration.java │ │ │ │ ├── define/ │ │ │ │ │ ├── AopAuthorizeDefinitionParser.java │ │ │ │ │ ├── DefaultBasicAuthorizeDefinition.java │ │ │ │ │ ├── EmptyAuthorizeDefinition.java │ │ │ │ │ └── MergedAuthorizeDefinition.java │ │ │ │ ├── embed/ │ │ │ │ │ ├── EmbedAuthenticationInfo.java │ │ │ │ │ ├── EmbedAuthenticationManager.java │ │ │ │ │ ├── EmbedAuthenticationProperties.java │ │ │ │ │ └── EmbedReactiveAuthenticationManager.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── AuthorizationLoginLoggerInfoHandler.java │ │ │ │ │ ├── AuthorizingHandler.java │ │ │ │ │ ├── DefaultAuthorizingHandler.java │ │ │ │ │ ├── UserAllowPermissionHandler.java │ │ │ │ │ └── access/ │ │ │ │ │ └── DimensionDataAccessHandler.java │ │ │ │ └── web/ │ │ │ │ ├── AuthorizationController.java │ │ │ │ ├── AuthorizedToken.java │ │ │ │ ├── BearerTokenParser.java │ │ │ │ ├── DefaultUserTokenGenPar.java │ │ │ │ ├── GeneratedToken.java │ │ │ │ ├── ReactiveUserTokenController.java │ │ │ │ ├── ReactiveUserTokenGenerator.java │ │ │ │ ├── ReactiveUserTokenParser.java │ │ │ │ ├── ServletUserTokenGenPar.java │ │ │ │ ├── SessionIdUserTokenGenerator.java │ │ │ │ ├── SessionIdUserTokenParser.java │ │ │ │ ├── UserOnSignIn.java │ │ │ │ ├── UserOnSignOut.java │ │ │ │ ├── UserTokenForTypeParser.java │ │ │ │ ├── UserTokenGenerator.java │ │ │ │ ├── UserTokenParser.java │ │ │ │ ├── UserTokenWebFilter.java │ │ │ │ └── WebUserTokenInterceptor.java │ │ │ ├── java9/ │ │ │ │ └── module-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── authorization/ │ │ │ └── basic/ │ │ │ ├── aop/ │ │ │ │ ├── AopAuthorizingControllerTest.java │ │ │ │ ├── FluxTestController.java │ │ │ │ ├── TestApplication.java │ │ │ │ ├── TestController.java │ │ │ │ ├── TestDataAccess.java │ │ │ │ └── TestEntity.java │ │ │ ├── define/ │ │ │ │ └── DefaultBasicAuthorizeDefinitionTest.java │ │ │ └── web/ │ │ │ └── CompositeReactiveAuthenticationManagerTest.java │ │ └── resources/ │ │ └── application.yml │ ├── hsweb-authorization-oauth2/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── oauth2/ │ │ │ │ ├── ErrorType.java │ │ │ │ ├── GrantType.java │ │ │ │ ├── OAuth2Constants.java │ │ │ │ ├── OAuth2Exception.java │ │ │ │ ├── ResponseType.java │ │ │ │ └── server/ │ │ │ │ ├── AccessToken.java │ │ │ │ ├── AccessTokenManager.java │ │ │ │ ├── OAuth2Client.java │ │ │ │ ├── OAuth2ClientManager.java │ │ │ │ ├── OAuth2GrantService.java │ │ │ │ ├── OAuth2Granter.java │ │ │ │ ├── OAuth2Properties.java │ │ │ │ ├── OAuth2Request.java │ │ │ │ ├── OAuth2Response.java │ │ │ │ ├── OAuth2ServerAutoConfiguration.java │ │ │ │ ├── ScopePredicate.java │ │ │ │ ├── auth/ │ │ │ │ │ └── ReactiveOAuth2AccessTokenParser.java │ │ │ │ ├── code/ │ │ │ │ │ ├── AuthorizationCodeCache.java │ │ │ │ │ ├── AuthorizationCodeGranter.java │ │ │ │ │ ├── AuthorizationCodeRequest.java │ │ │ │ │ ├── AuthorizationCodeResponse.java │ │ │ │ │ ├── AuthorizationCodeTokenRequest.java │ │ │ │ │ └── DefaultAuthorizationCodeGranter.java │ │ │ │ ├── credential/ │ │ │ │ │ ├── ClientCredentialGranter.java │ │ │ │ │ ├── ClientCredentialRequest.java │ │ │ │ │ └── DefaultClientCredentialGranter.java │ │ │ │ ├── event/ │ │ │ │ │ └── OAuth2GrantedEvent.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── CompositeOAuth2GrantService.java │ │ │ │ │ ├── RedisAccessToken.java │ │ │ │ │ └── RedisAccessTokenManager.java │ │ │ │ ├── refresh/ │ │ │ │ │ ├── DefaultRefreshTokenGranter.java │ │ │ │ │ ├── RefreshTokenGranter.java │ │ │ │ │ └── RefreshTokenRequest.java │ │ │ │ ├── utils/ │ │ │ │ │ └── OAuth2ScopeUtils.java │ │ │ │ └── web/ │ │ │ │ └── OAuth2AuthorizeController.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── oauth2/ │ │ │ └── server/ │ │ │ ├── OAuth2ClientTest.java │ │ │ ├── RedisHelper.java │ │ │ ├── code/ │ │ │ │ └── DefaultAuthorizationCodeGranterTest.java │ │ │ ├── impl/ │ │ │ │ └── RedisAccessTokenManagerTest.java │ │ │ ├── utils/ │ │ │ │ └── OAuth2ScopeUtilsTest.java │ │ │ └── web/ │ │ │ └── OAuth2AuthorizeControllerTest.java │ │ └── resources/ │ │ └── logback.xml │ └── pom.xml ├── hsweb-commons/ │ ├── hsweb-commons-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── api/ │ │ │ │ └── crud/ │ │ │ │ └── entity/ │ │ │ │ ├── Entity.java │ │ │ │ ├── EntityFactory.java │ │ │ │ ├── EntityFactoryHolder.java │ │ │ │ ├── EntityFactoryHolderConfiguration.java │ │ │ │ ├── ExtendableEntity.java │ │ │ │ ├── ExtendableTreeSortSupportEntity.java │ │ │ │ ├── GenericEntity.java │ │ │ │ ├── GenericI18nEntity.java │ │ │ │ ├── GenericTreeSortSupportEntity.java │ │ │ │ ├── ImplementFor.java │ │ │ │ ├── PagerResult.java │ │ │ │ ├── QueryNoPagingOperation.java │ │ │ │ ├── QueryOperation.java │ │ │ │ ├── QueryParamEntity.java │ │ │ │ ├── RecordCreationEntity.java │ │ │ │ ├── RecordModifierEntity.java │ │ │ │ ├── SortSupportEntity.java │ │ │ │ ├── TermExpressionParser.java │ │ │ │ ├── TransactionManagers.java │ │ │ │ ├── TreeSortSupportEntity.java │ │ │ │ ├── TreeSupportEntity.java │ │ │ │ └── TreeUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── api/ │ │ └── crud/ │ │ └── entity/ │ │ ├── ExtendableEntityTest.java │ │ ├── TermExpressionParserTest.java │ │ └── TreeUtilsTest.java │ ├── hsweb-commons-crud/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── crud/ │ │ │ │ ├── annotation/ │ │ │ │ │ ├── DDL.java │ │ │ │ │ ├── EnableEasyormRepository.java │ │ │ │ │ ├── EnableEntityEvent.java │ │ │ │ │ └── Reactive.java │ │ │ │ ├── configuration/ │ │ │ │ │ ├── AutoDDLProcessor.java │ │ │ │ │ ├── CompositeEntityTableMetadataResolver.java │ │ │ │ │ ├── DefaultEntityResultWrapperFactory.java │ │ │ │ │ ├── DetectEntityColumnMapping.java │ │ │ │ │ ├── DialectProvider.java │ │ │ │ │ ├── DialectProviders.java │ │ │ │ │ ├── EasyormConfiguration.java │ │ │ │ │ ├── EasyormProperties.java │ │ │ │ │ ├── EasyormRepositoryRegistrar.java │ │ │ │ │ ├── EntityFactoryConfiguration.java │ │ │ │ │ ├── EntityInfo.java │ │ │ │ │ ├── EntityResultWrapperFactory.java │ │ │ │ │ ├── EntityTableMetadataResolver.java │ │ │ │ │ ├── JdbcSqlExecutorConfiguration.java │ │ │ │ │ ├── R2dbcSqlExecutorConfiguration.java │ │ │ │ │ ├── ReactiveRepositoryFactoryBean.java │ │ │ │ │ ├── SyncRepositoryFactoryBean.java │ │ │ │ │ └── TableMetadataCustomizer.java │ │ │ │ ├── entity/ │ │ │ │ │ └── factory/ │ │ │ │ │ ├── DefaultMapperFactory.java │ │ │ │ │ ├── DefaultPropertyCopier.java │ │ │ │ │ ├── EntityMappingCustomizer.java │ │ │ │ │ ├── MapperEntityFactory.java │ │ │ │ │ └── PropertyCopier.java │ │ │ │ ├── events/ │ │ │ │ │ ├── CompositeEventListener.java │ │ │ │ │ ├── CreatorEventListener.java │ │ │ │ │ ├── DefaultEntityEventListenerConfigure.java │ │ │ │ │ ├── EntityBeforeCreateEvent.java │ │ │ │ │ ├── EntityBeforeDeleteEvent.java │ │ │ │ │ ├── EntityBeforeModifyEvent.java │ │ │ │ │ ├── EntityBeforeQueryEvent.java │ │ │ │ │ ├── EntityBeforeSaveEvent.java │ │ │ │ │ ├── EntityCreatedEvent.java │ │ │ │ │ ├── EntityDDLEvent.java │ │ │ │ │ ├── EntityDeletedEvent.java │ │ │ │ │ ├── EntityEventHelper.java │ │ │ │ │ ├── EntityEventListener.java │ │ │ │ │ ├── EntityEventListenerConfigure.java │ │ │ │ │ ├── EntityEventListenerCustomizer.java │ │ │ │ │ ├── EntityEventPhase.java │ │ │ │ │ ├── EntityEventType.java │ │ │ │ │ ├── EntityModifyEvent.java │ │ │ │ │ ├── EntityPrepareCreateEvent.java │ │ │ │ │ ├── EntityPrepareModifyEvent.java │ │ │ │ │ ├── EntityPrepareSaveEvent.java │ │ │ │ │ ├── EntitySavedEvent.java │ │ │ │ │ ├── SqlExpressionInvoker.java │ │ │ │ │ ├── ValidateEventListener.java │ │ │ │ │ └── expr/ │ │ │ │ │ ├── AbstractSqlExpressionInvoker.java │ │ │ │ │ └── SpelSqlExpressionInvoker.java │ │ │ │ ├── exception/ │ │ │ │ │ └── DatabaseExceptionAnalyzerReporter.java │ │ │ │ ├── generator/ │ │ │ │ │ ├── CurrentTimeGenerator.java │ │ │ │ │ ├── DefaultIdGenerator.java │ │ │ │ │ ├── Generators.java │ │ │ │ │ ├── MD5Generator.java │ │ │ │ │ ├── RandomIdGenerator.java │ │ │ │ │ └── SnowFlakeStringIdGenerator.java │ │ │ │ ├── query/ │ │ │ │ │ ├── DefaultQueryHelper.java │ │ │ │ │ ├── JoinConditionalSpec.java │ │ │ │ │ ├── JoinNestConditionalSpec.java │ │ │ │ │ ├── JoinOnSpec.java │ │ │ │ │ ├── QueryAnalyzer.java │ │ │ │ │ ├── QueryAnalyzerImpl.java │ │ │ │ │ ├── QueryHelper.java │ │ │ │ │ ├── QueryHelperUtils.java │ │ │ │ │ └── ToHumpMap.java │ │ │ │ ├── service/ │ │ │ │ │ ├── CrudService.java │ │ │ │ │ ├── EnableCacheReactiveCrudService.java │ │ │ │ │ ├── GenericCrudService.java │ │ │ │ │ ├── GenericReactiveCacheSupportCrudService.java │ │ │ │ │ ├── GenericReactiveCrudService.java │ │ │ │ │ ├── GenericReactiveTreeSupportCrudService.java │ │ │ │ │ ├── GenericTreeSupportCrudService.java │ │ │ │ │ ├── ReactiveCrudService.java │ │ │ │ │ ├── ReactiveTreeSortEntityService.java │ │ │ │ │ ├── ReactiveTreeSortServiceHelper.java │ │ │ │ │ ├── SyncTreeSortServiceHelper.java │ │ │ │ │ ├── TreeSortEntityService.java │ │ │ │ │ └── TreeSortServiceHelper.java │ │ │ │ ├── sql/ │ │ │ │ │ ├── DefaultJdbcExecutor.java │ │ │ │ │ ├── DefaultJdbcReactiveExecutor.java │ │ │ │ │ ├── DefaultR2dbcExecutor.java │ │ │ │ │ └── terms/ │ │ │ │ │ └── TreeChildTermBuilder.java │ │ │ │ ├── utils/ │ │ │ │ │ └── TransactionUtils.java │ │ │ │ └── web/ │ │ │ │ ├── CommonErrorControllerAdvice.java │ │ │ │ ├── CommonWebFluxConfiguration.java │ │ │ │ ├── CommonWebMvcConfiguration.java │ │ │ │ ├── CommonWebMvcErrorControllerAdvice.java │ │ │ │ ├── CrudController.java │ │ │ │ ├── DeleteController.java │ │ │ │ ├── QueryController.java │ │ │ │ ├── R2dbcErrorControllerAdvice.java │ │ │ │ ├── ResponseMessage.java │ │ │ │ ├── ResponseMessageWrapper.java │ │ │ │ ├── ResponseMessageWrapperAdvice.java │ │ │ │ ├── SaveController.java │ │ │ │ ├── ServiceCrudController.java │ │ │ │ ├── ServiceDeleteController.java │ │ │ │ ├── ServiceQueryController.java │ │ │ │ ├── ServiceSaveController.java │ │ │ │ ├── TreeServiceQueryController.java │ │ │ │ └── reactive/ │ │ │ │ ├── ReactiveCrudController.java │ │ │ │ ├── ReactiveDeleteController.java │ │ │ │ ├── ReactiveQueryController.java │ │ │ │ ├── ReactiveSaveController.java │ │ │ │ ├── ReactiveServiceCrudController.java │ │ │ │ ├── ReactiveServiceDeleteController.java │ │ │ │ ├── ReactiveServiceQueryController.java │ │ │ │ ├── ReactiveServiceSaveController.java │ │ │ │ └── ReactiveTreeServiceQueryController.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ ├── services/ │ │ │ │ │ └── org.hswebframework.web.exception.analyzer.ExceptionAnalyzer │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── i18n/ │ │ │ └── commons/ │ │ │ ├── messages_en.properties │ │ │ └── messages_zh.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── crud/ │ │ │ ├── CrudTests.java │ │ │ ├── TestApplication.java │ │ │ ├── entity/ │ │ │ │ ├── CustomTestEntity.java │ │ │ │ ├── EventTestEntity.java │ │ │ │ ├── TestEntity.java │ │ │ │ └── TestTreeSortEntity.java │ │ │ ├── events/ │ │ │ │ ├── DefaultEntityEventListenerConfigureTest.java │ │ │ │ ├── EntityEventListenerTest.java │ │ │ │ ├── TestEntityListener.java │ │ │ │ └── expr/ │ │ │ │ └── SpelSqlExpressionInvokerTest.java │ │ │ ├── exception/ │ │ │ │ └── DatabaseExceptionAnalyzerReporterTest.java │ │ │ ├── query/ │ │ │ │ ├── DefaultQueryHelperTest.java │ │ │ │ ├── QueryAnalyzerImplTest.java │ │ │ │ └── QueryHelperUtilsTest.java │ │ │ └── service/ │ │ │ ├── CustomTestCustom.java │ │ │ ├── GenericReactiveCacheSupportCrudServiceTest.java │ │ │ ├── ReactiveTreeSortEntityServiceTest.java │ │ │ ├── TestCacheEntityService.java │ │ │ ├── TestEntityService.java │ │ │ ├── TestTreeChildTermBuilder.java │ │ │ └── TestTreeSortEntityService.java │ │ └── resources/ │ │ └── application.yml │ └── pom.xml ├── hsweb-concurrent/ │ ├── hsweb-concurrent-cache/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── cache/ │ │ │ │ ├── ReactiveCache.java │ │ │ │ ├── ReactiveCacheManager.java │ │ │ │ ├── ReactiveCacheResolver.java │ │ │ │ ├── configuration/ │ │ │ │ │ ├── ReactiveCacheManagerConfiguration.java │ │ │ │ │ └── ReactiveCacheProperties.java │ │ │ │ └── supports/ │ │ │ │ ├── AbstractReactiveCache.java │ │ │ │ ├── AbstractReactiveCacheManager.java │ │ │ │ ├── CaffeineReactiveCache.java │ │ │ │ ├── CaffeineReactiveCacheManager.java │ │ │ │ ├── GuavaReactiveCache.java │ │ │ │ ├── GuavaReactiveCacheManager.java │ │ │ │ ├── NullValue.java │ │ │ │ ├── RedisLocalReactiveCacheManager.java │ │ │ │ ├── RedisReactiveCache.java │ │ │ │ └── UnSupportedReactiveCache.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── cache/ │ │ │ ├── CaffeineReactiveCacheManagerTest.java │ │ │ ├── GuavaReactiveCacheManagerTest.java │ │ │ ├── RedisReactiveCacheManagerTest.java │ │ │ └── TestApplication.java │ │ └── resources/ │ │ └── application-redis.yml │ └── pom.xml ├── hsweb-core/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ ├── CodeConstants.java │ │ │ ├── aop/ │ │ │ │ ├── MethodInterceptorContext.java │ │ │ │ └── MethodInterceptorHolder.java │ │ │ ├── bean/ │ │ │ │ ├── BeanFactory.java │ │ │ │ ├── ClassDescription.java │ │ │ │ ├── ClassDescriptions.java │ │ │ │ ├── CompareUtils.java │ │ │ │ ├── Converter.java │ │ │ │ ├── Copier.java │ │ │ │ ├── DefaultToStringOperator.java │ │ │ │ ├── Diff.java │ │ │ │ ├── ExtendableToBeanCopier.java │ │ │ │ ├── ExtendableToMapCopier.java │ │ │ │ ├── ExtendableUtils.java │ │ │ │ ├── FastBeanCopier.java │ │ │ │ ├── MapToExtendableCopier.java │ │ │ │ ├── SingleValueMap.java │ │ │ │ ├── ToString.java │ │ │ │ └── ToStringOperator.java │ │ │ ├── context/ │ │ │ │ ├── Context.java │ │ │ │ ├── ContextHolder.java │ │ │ │ ├── ContextKey.java │ │ │ │ ├── ContextUtils.java │ │ │ │ ├── MapContext.java │ │ │ │ └── ThreadLocalContextHolderSupport.java │ │ │ ├── convert/ │ │ │ │ └── CustomMessageConverter.java │ │ │ ├── dict/ │ │ │ │ ├── ClassDictDefine.java │ │ │ │ ├── Dict.java │ │ │ │ ├── DictDefine.java │ │ │ │ ├── DictDefineRepository.java │ │ │ │ ├── EnumDict.java │ │ │ │ ├── I18nEnumDict.java │ │ │ │ ├── ItemDefine.java │ │ │ │ └── defaults/ │ │ │ │ ├── DefaultClassDictDefine.java │ │ │ │ ├── DefaultDictDefine.java │ │ │ │ ├── DefaultDictDefineRepository.java │ │ │ │ └── DefaultItemDefine.java │ │ │ ├── enums/ │ │ │ │ └── TrueOrFalse.java │ │ │ ├── event/ │ │ │ │ ├── AsyncEvent.java │ │ │ │ ├── AsyncEventHooks.java │ │ │ │ ├── DefaultAsyncEvent.java │ │ │ │ └── GenericsPayloadApplicationEvent.java │ │ │ ├── exception/ │ │ │ │ ├── BusinessException.java │ │ │ │ ├── I18nSupportException.java │ │ │ │ ├── NotFoundException.java │ │ │ │ ├── TraceSourceException.java │ │ │ │ ├── ValidationException.java │ │ │ │ └── analyzer/ │ │ │ │ ├── ExceptionAnalyzer.java │ │ │ │ ├── ExceptionAnalyzerReporter.java │ │ │ │ └── ExceptionAnalyzers.java │ │ │ ├── i18n/ │ │ │ │ ├── ContextLocaleResolver.java │ │ │ │ ├── I18nSupportEntity.java │ │ │ │ ├── I18nSupportUtils.java │ │ │ │ ├── LocaleThreadLocalAccessor.java │ │ │ │ ├── LocaleUtils.java │ │ │ │ ├── MessageSourceInitializer.java │ │ │ │ ├── MultipleI18nSupportEntity.java │ │ │ │ ├── SingleI18nSupportEntity.java │ │ │ │ ├── UnsupportedMessageSource.java │ │ │ │ └── WebFluxLocaleFilter.java │ │ │ ├── id/ │ │ │ │ ├── IDGenerator.java │ │ │ │ ├── RandomIdGenerator.java │ │ │ │ └── SnowflakeIdGenerator.java │ │ │ ├── logger/ │ │ │ │ └── ReactiveLogger.java │ │ │ ├── proxy/ │ │ │ │ └── Proxy.java │ │ │ ├── recycler/ │ │ │ │ ├── Recyclable.java │ │ │ │ ├── Recycler.java │ │ │ │ ├── RecyclerImpl.java │ │ │ │ └── Recyclers.java │ │ │ ├── utils/ │ │ │ │ ├── AnnotationUtils.java │ │ │ │ ├── CollectionUtils.java │ │ │ │ ├── DigestUtils.java │ │ │ │ ├── DynamicArrayList.java │ │ │ │ ├── ExpressionUtils.java │ │ │ │ ├── FluxCache.java │ │ │ │ ├── HttpParameterConverter.java │ │ │ │ ├── ModuleUtils.java │ │ │ │ ├── ReactiveWebUtils.java │ │ │ │ ├── TemplateParser.java │ │ │ │ └── WebUtils.java │ │ │ ├── validator/ │ │ │ │ ├── CreateGroup.java │ │ │ │ ├── UpdateGroup.java │ │ │ │ └── ValidatorUtils.java │ │ │ └── warn/ │ │ │ └── Warning.java │ │ ├── java9/ │ │ │ └── module-info.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ └── io.micrometer.context.ThreadLocalAccessor │ │ └── i18n/ │ │ └── core/ │ │ ├── messages_en.properties │ │ └── messages_zh.properties │ └── test/ │ └── java/ │ └── org/ │ └── hswebframework/ │ └── web/ │ ├── bean/ │ │ ├── Color.java │ │ ├── CompareUtilsTest.java │ │ ├── DiffTest.java │ │ ├── FastBeanCopierTest.java │ │ ├── NestObject.java │ │ ├── Source.java │ │ └── Target.java │ ├── dict/ │ │ ├── EnumDictTest.java │ │ ├── TestEnum.java │ │ └── TestEnumInteger.java │ ├── event/ │ │ └── EventTest.java │ ├── exception/ │ │ └── TraceSourceExceptionTest.java │ ├── i18n/ │ │ ├── I18nSupportUtilsTest.java │ │ ├── LocaleThreadLocalAccessorTest.java │ │ ├── LocaleUtilsTest.java │ │ └── MultipleI18nSupportEntityTest.java │ ├── id/ │ │ ├── IDGeneratorTests.java │ │ ├── RandomIdGeneratorTest.java │ │ └── SnowflakeIdGeneratorTest.java │ ├── logger/ │ │ └── ReactiveLoggerTest.java │ ├── recycler/ │ │ └── RecyclerImplTest.java │ ├── utils/ │ │ ├── CollectionUtilsTest.java │ │ ├── DigestUtilsTest.java │ │ └── TemplateParserTest.java │ └── validator/ │ └── ValidatorUtilsTest.java ├── hsweb-datasource/ │ ├── README.md │ ├── hsweb-datasource-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── datasource/ │ │ │ │ ├── AopDataSourceSwitcherAutoConfiguration.java │ │ │ │ ├── DataSourceHolder.java │ │ │ │ ├── DatabaseType.java │ │ │ │ ├── DynamicDataSource.java │ │ │ │ ├── DynamicDataSourceAutoConfiguration.java │ │ │ │ ├── DynamicDataSourceProxy.java │ │ │ │ ├── DynamicDataSourceService.java │ │ │ │ ├── HswebDataSourceProperties.java │ │ │ │ ├── JdbcDataSource.java │ │ │ │ ├── R2dbcDataSource.java │ │ │ │ ├── annotation/ │ │ │ │ │ ├── UseDataSource.java │ │ │ │ │ └── UseDefaultDataSource.java │ │ │ │ ├── config/ │ │ │ │ │ ├── DynamicDataSourceConfig.java │ │ │ │ │ ├── DynamicDataSourceConfigRepository.java │ │ │ │ │ └── InSpringDynamicDataSourceConfig.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── DataSourceClosedException.java │ │ │ │ │ └── DataSourceNotFoundException.java │ │ │ │ ├── strategy/ │ │ │ │ │ ├── AnnotationDataSourceSwitchStrategyMatcher.java │ │ │ │ │ ├── CachedDataSourceSwitchStrategyMatcher.java │ │ │ │ │ ├── CachedTableSwitchStrategyMatcher.java │ │ │ │ │ ├── DataSourceSwitchStrategyMatcher.java │ │ │ │ │ ├── ExpressionDataSourceSwitchStrategyMatcher.java │ │ │ │ │ └── TableSwitchStrategyMatcher.java │ │ │ │ └── switcher/ │ │ │ │ ├── DataSourceSwitcher.java │ │ │ │ ├── DefaultJdbcSwitcher.java │ │ │ │ ├── DefaultR2dbcSwicher.java │ │ │ │ ├── DefaultReactiveSwitcher.java │ │ │ │ ├── DefaultSwitcher.java │ │ │ │ ├── JdbcSwitcher.java │ │ │ │ ├── R2dbcSwitcher.java │ │ │ │ ├── ReactiveSwitcher.java │ │ │ │ ├── SchemaSwitcher.java │ │ │ │ ├── Switcher.java │ │ │ │ └── TableSwitcher.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── datasource/ │ │ └── switcher/ │ │ ├── DefaultReactiveSwitcherTest.java │ │ └── DefaultSwitcherTest.java │ └── pom.xml ├── hsweb-logging/ │ ├── README.md │ ├── hsweb-access-logging-aop/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── logging/ │ │ └── aop/ │ │ ├── AccessLoggerParser.java │ │ ├── AopAccessLoggerSupport.java │ │ ├── AopAccessLoggerSupportAutoConfiguration.java │ │ ├── DefaultAccessLoggerParser.java │ │ ├── EnableAccessLogger.java │ │ ├── ReactiveAopAccessLoggerSupport.java │ │ ├── ResourceAccessLoggerParser.java │ │ ├── Swagger3AccessLoggerParser.java │ │ └── SwaggerAccessLoggerParser.java │ ├── hsweb-access-logging-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── logging/ │ │ ├── AccessLogger.java │ │ ├── AccessLoggerHolder.java │ │ ├── AccessLoggerInfo.java │ │ ├── AccessLoggerListener.java │ │ ├── LoggerDefine.java │ │ ├── RequestInfo.java │ │ └── events/ │ │ ├── AccessLoggerAfterEvent.java │ │ └── AccessLoggerBeforeEvent.java │ └── pom.xml ├── hsweb-starter/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── starter/ │ │ │ ├── CorsAutoConfiguration.java │ │ │ ├── CorsProperties.java │ │ │ ├── i18n/ │ │ │ │ ├── CompositeMessageSource.java │ │ │ │ └── I18nConfiguration.java │ │ │ ├── jackson/ │ │ │ │ ├── CustomCodecsAutoConfiguration.java │ │ │ │ ├── CustomDeserializers.java │ │ │ │ ├── CustomJackson2JsonDecoder.java │ │ │ │ ├── CustomJackson2jsonEncoder.java │ │ │ │ ├── CustomMappingJackson2HttpMessageConverter.java │ │ │ │ ├── CustomTypeFactory.java │ │ │ │ └── Jackson2Tokenizer.java │ │ │ └── reporter/ │ │ │ └── GenericExceptionReport.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── starter/ │ │ ├── initialize/ │ │ │ ├── SystemInitializeTest.java │ │ │ └── TestApplication.java │ │ ├── jackson/ │ │ │ ├── CustomJackson2JsonDecoderTest.java │ │ │ ├── CustomJackson2jsonEncoderTest.java │ │ │ └── CustomTypeFactoryTest.java │ │ └── reporter/ │ │ └── GenericExceptionReportTest.java │ └── resources/ │ ├── hsweb-starter.js │ └── i18n/ │ ├── messages_en_US.properties │ └── messages_zh_CN.properties ├── hsweb-system/ │ ├── README.md │ ├── hsweb-system-authorization/ │ │ ├── README.md │ │ ├── hsweb-system-authorization-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── system/ │ │ │ │ └── authorization/ │ │ │ │ └── api/ │ │ │ │ ├── PasswordEncoder.java │ │ │ │ ├── PasswordValidator.java │ │ │ │ ├── UserDimensionProvider.java │ │ │ │ ├── UsernameValidator.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── ActionEntity.java │ │ │ │ │ ├── AuthorizationSettingEntity.java │ │ │ │ │ ├── DataAccessEntity.java │ │ │ │ │ ├── DimensionEntity.java │ │ │ │ │ ├── DimensionTypeEntity.java │ │ │ │ │ ├── DimensionUserEntity.java │ │ │ │ │ ├── OptionalField.java │ │ │ │ │ ├── ParentPermission.java │ │ │ │ │ ├── PermissionEntity.java │ │ │ │ │ └── UserEntity.java │ │ │ │ ├── enums/ │ │ │ │ │ └── DimensionUserFeature.java │ │ │ │ ├── event/ │ │ │ │ │ ├── ClearUserAuthorizationCacheEvent.java │ │ │ │ │ ├── DimensionBindEvent.java │ │ │ │ │ ├── DimensionDeletedEvent.java │ │ │ │ │ ├── DimensionUnbindEvent.java │ │ │ │ │ ├── UserBeforeCreateEvent.java │ │ │ │ │ ├── UserCreatedEvent.java │ │ │ │ │ ├── UserDeletedEvent.java │ │ │ │ │ ├── UserModifiedEvent.java │ │ │ │ │ └── UserStateChangedEvent.java │ │ │ │ ├── request/ │ │ │ │ │ └── SaveUserRequest.java │ │ │ │ └── service/ │ │ │ │ ├── UserService.java │ │ │ │ └── reactive/ │ │ │ │ └── ReactiveUserService.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── system/ │ │ │ └── authorization/ │ │ │ └── api/ │ │ │ └── UsernameValidatorTest.java │ │ ├── hsweb-system-authorization-default/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── hswebframework/ │ │ │ │ │ └── web/ │ │ │ │ │ └── system/ │ │ │ │ │ └── authorization/ │ │ │ │ │ └── defaults/ │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ ├── AuthorizationServiceAutoConfiguration.java │ │ │ │ │ │ ├── AuthorizationWebAutoConfiguration.java │ │ │ │ │ │ └── PermissionProperties.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── AuthenticationInitializeCustomizer.java │ │ │ │ │ │ ├── AuthenticationInitializeProperties.java │ │ │ │ │ │ ├── DefaultAuthorizationSettingService.java │ │ │ │ │ │ ├── DefaultDimensionService.java │ │ │ │ │ │ ├── DefaultDimensionUserService.java │ │ │ │ │ │ ├── DefaultPermissionService.java │ │ │ │ │ │ ├── DefaultReactiveAuthenticationInitializeService.java │ │ │ │ │ │ ├── DefaultReactiveAuthenticationManager.java │ │ │ │ │ │ ├── DefaultReactiveUserService.java │ │ │ │ │ │ ├── DynamicDimension.java │ │ │ │ │ │ ├── PermissionSynchronization.java │ │ │ │ │ │ ├── RemoveUserTokenWhenUserDisabled.java │ │ │ │ │ │ └── terms/ │ │ │ │ │ │ ├── DimensionTerm.java │ │ │ │ │ │ └── UserDimensionTerm.java │ │ │ │ │ └── webflux/ │ │ │ │ │ ├── DimensionTypeResponse.java │ │ │ │ │ ├── WebFluxAuthorizationSettingController.java │ │ │ │ │ ├── WebFluxDimensionController.java │ │ │ │ │ ├── WebFluxDimensionTypeController.java │ │ │ │ │ ├── WebFluxDimensionUserController.java │ │ │ │ │ ├── WebFluxPermissionController.java │ │ │ │ │ └── WebFluxUserController.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── i18n/ │ │ │ │ └── authentication-default/ │ │ │ │ ├── messages_en.properties │ │ │ │ └── messages_zh.properties │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── system/ │ │ │ │ └── authorization/ │ │ │ │ └── defaults/ │ │ │ │ └── service/ │ │ │ │ ├── DefaultDimensionUserServiceTest.java │ │ │ │ └── reactive/ │ │ │ │ ├── DefaultReactiveAuthenticationManagerTest.java │ │ │ │ ├── DefaultReactiveUserServiceTest.java │ │ │ │ ├── ReactiveTestApplication.java │ │ │ │ └── WebFluxPermissionControllerTest.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── hsweb-system-authorization-oauth2/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── hswebframework/ │ │ │ │ │ └── web/ │ │ │ │ │ └── oauth2/ │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ └── OAuth2ClientManagerAutoConfiguration.java │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── OAuth2ClientEntity.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── OAuth2ClientState.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── InDBOAuth2ClientManager.java │ │ │ │ │ │ └── OAuth2ClientService.java │ │ │ │ │ └── web/ │ │ │ │ │ └── WebFluxOAuth2ClientController.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── oauth2/ │ │ │ │ ├── ReactiveTestApplication.java │ │ │ │ ├── configuration/ │ │ │ │ │ └── OAuth2ClientManagerAutoConfigurationTest.java │ │ │ │ └── service/ │ │ │ │ └── OAuth2ClientServiceTest.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── pom.xml │ ├── hsweb-system-dictionary/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── dictionary/ │ │ │ │ ├── configuration/ │ │ │ │ │ ├── DictionaryAutoConfiguration.java │ │ │ │ │ └── DictionaryProperties.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── DictionaryEntity.java │ │ │ │ │ └── DictionaryItemEntity.java │ │ │ │ ├── event/ │ │ │ │ │ └── ClearDictionaryCacheEvent.java │ │ │ │ ├── service/ │ │ │ │ │ ├── CompositeDictDefineRepository.java │ │ │ │ │ ├── DefaultDictionaryItemService.java │ │ │ │ │ └── DefaultDictionaryService.java │ │ │ │ └── webflux/ │ │ │ │ ├── WebfluxDictionaryController.java │ │ │ │ └── WebfluxDictionaryItemController.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── i18n/ │ │ │ └── dictionary/ │ │ │ ├── messages_en.properties │ │ │ └── messages_zh.properties │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── hswebframework/ │ │ └── web/ │ │ └── dictionary/ │ │ ├── ReactiveTestApplication.java │ │ ├── configuration/ │ │ │ └── DictionaryAutoConfigurationTest.java │ │ └── service/ │ │ └── DefaultDictionaryItemServiceTest.java │ ├── hsweb-system-file/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── hswebframework/ │ │ │ │ └── web/ │ │ │ │ └── file/ │ │ │ │ ├── FileServiceConfiguration.java │ │ │ │ ├── FileUploadProperties.java │ │ │ │ ├── service/ │ │ │ │ │ ├── FileStorageService.java │ │ │ │ │ └── LocalFileStorageService.java │ │ │ │ └── web/ │ │ │ │ └── ReactiveFileController.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── hswebframework/ │ │ │ └── web/ │ │ │ └── file/ │ │ │ ├── FileUploadPropertiesTest.java │ │ │ ├── service/ │ │ │ │ └── LocalFileStorageServiceTest.java │ │ │ └── web/ │ │ │ ├── ReactiveFileControllerTest.java │ │ │ └── TestApplication.java │ │ └── resources/ │ │ └── test.json │ └── pom.xml ├── mvnw ├── mvnw.cmd └── pom.xml