From b71b0b2fc9b03ad1be3745692f9c70e9ab3a1a78 Mon Sep 17 00:00:00 2001 From: yqy Date: Tue, 1 Aug 2023 18:19:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86=E6=A1=86?= =?UTF-8?q?=E6=9E=B6+=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 9 + .springjavaformatconfig | 1 + LICENSE | 21 + README.md | 5 + ad-distribute-admin/admin-core/pom.xml | 47 + .../admin/upms/UpmsAutoConfiguration.java | 108 + .../config/mybatis/FillMetaObjectHandle.java | 42 + .../config/mybatis/MybatisPlusConfig.java | 62 + .../upms/config/task/MdcTaskDecorator.java | 34 + .../task/TaskExecutionConfiguration.java | 35 + .../admin/upms/log/LogConfiguration.java | 78 + .../admin/upms/log/LoginLogHandler.java | 8 + ...ingAuthorizationServerLoginLogHandler.java | 140 ++ .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + ad-distribute-admin/admin-websocket/pom.xml | 24 + .../AdminWebSocketAutoConfiguration.java | 34 + ...fyWebsocketEventListenerConfiguration.java | 27 + ...emWebsocketEventListenerConfiguration.java | 25 + .../UserAttributeHandshakeInterceptor.java | 65 + .../component/UserSessionKeyGenerator.java | 32 + .../constant/AdminWebSocketConstants.java | 22 + .../NotifyWebsocketEventListener.java | 60 + .../SystemWebsocketEventListener.java | 34 + .../message/AnnouncementCloseMessage.java | 24 + .../websocket/message/DictChangeMessage.java | 26 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + ad-distribute-admin/pom.xml | 34 + ad-distribute-common/common-core/pom.xml | 76 + .../common/core/compose/ContextComponent.java | 26 + .../common/core/constant/GlobalConstants.java | 32 + .../common/core/constant/HeaderConstants.java | 28 + .../common/core/constant/HttpsConstants.java | 100 + .../common/core/constant/MDCConstants.java | 19 + .../core/constant/enums/BooleanEnum.java | 35 + .../core/constant/enums/ImportModeEnum.java | 25 + .../core/exception/BusinessException.java | 57 + .../core/exception/SqlCheckedException.java | 30 + .../handler/GlobalExceptionHandler.java | 18 + .../core/https/CompatibleSSLFactory.java | 95 + .../https/SSLSocketFactoryInitException.java | 12 + .../core/jackson/CustomJavaTimeModule.java | 45 + .../core/jackson/NullArrayJsonSerializer.java | 32 + .../core/jackson/NullMapJsonSerializer.java | 32 + .../core/jackson/NullSerializerProvider.java | 120 ++ .../jackson/NullStringJsonSerializer.java | 26 + .../common/core/lock/JavaReentrantLock.java | 91 + .../common/core/markdown/MarkdownBuilder.java | 282 +++ .../wrapper/ModifyParamMapRequestWrapper.java | 28 + .../wrapper/RepeatBodyRequestWrapper.java | 89 + .../core/spring/BallcatBeanPostProcessor.java | 64 + .../ContextComposeBeanPostProcessor.java | 24 + .../spring/compose/SpringContextClosed.java | 38 + .../thread/AbstractBlockingQueueThread.java | 39 + .../core/thread/AbstractDynamicTimer.java | 102 + .../core/thread/AbstractQueueThread.java | 212 ++ .../AbstractThreadContextComponent.java | 41 + .../common/core/thread/AbstractTimer.java | 85 + .../ballcat/common/core/util/FileUtil.java | 406 ++++ .../ballcat/common/core/util/MobileUtil.java | 109 + .../ballcat/common/core/util/WebUtils.java | 45 + ...mptyCurlyToDefaultMessageInterpolator.java | 59 + .../validation/constraints/OneOfClasses.java | 48 + .../validation/constraints/OneOfInts.java | 48 + .../validation/constraints/OneOfStrings.java | 48 + .../validation/constraints/ValueOfEnum.java | 50 + .../core/validation/group/CreateGroup.java | 10 + .../core/validation/group/UpdateGroup.java | 10 + .../validator/EnumValueValidatorOfClass.java | 37 + .../validator/EnumValueValidatorOfInt.java | 37 + .../validator/EnumValueValidatorOfString.java | 37 + .../validator/ValueOfEnumValidator.java | 58 + .../common-desensitize/pom.xml | 22 + .../desensitize/AnnotationHandlerHolder.java | 100 + .../DesensitizationHandlerHolder.java | 87 + .../enums/RegexDesensitizationTypeEnum.java | 39 + .../enums/SlideDesensitizationTypeEnum.java | 54 + .../functions/DesensitizeFunction.java | 21 + .../handler/DesensitizationHandler.java | 11 + .../handler/RegexDesensitizationHandler.java | 34 + .../handler/SimpleDesensitizationHandler.java | 18 + .../SixAsteriskDesensitizationHandler.java | 21 + .../handler/SlideDesensitizationHandler.java | 62 + .../desensitize/json/DesensitizeStrategy.java | 17 + .../json/JsonDesensitizeModule.java | 17 + .../json/JsonDesensitizeSerializer.java | 57 + .../JsonDesensitizeSerializerModifier.java | 57 + .../json/annotation/JsonRegexDesensitize.java | 37 + .../annotation/JsonSimpleDesensitize.java | 25 + .../json/annotation/JsonSlideDesensitize.java | 42 + ...itize.handler.SimpleDesensitizationHandler | 1 + ...itize.handler.SimpleDesensitizationHandler | 1 + ad-distribute-common/common-i18n/pom.xml | 49 + .../common/i18n/DynamicMessageSource.java | 32 + .../hccake/ballcat/common/i18n/I18nClass.java | 16 + .../hccake/ballcat/common/i18n/I18nField.java | 41 + .../ballcat/common/i18n/I18nIgnore.java | 15 + .../ballcat/common/i18n/I18nMessage.java | 38 + .../common/i18n/I18nMessageCreateEvent.java | 23 + .../common/i18n/I18nMessageProvider.java | 20 + .../ballcat/common/i18n/I18nOptions.java | 21 + .../common/i18n/I18nResponseAdvice.java | 237 +++ .../MessageSourceHierarchicalChanger.java | 41 + ...ReloadableResourceBundleMessageSource.java | 76 + .../resources/ballcat-i18nMessage.properties | 3 + .../ballcat-i18nMessage_en_US.properties | 3 + .../ballcat-i18nMessage_zh_CN.properties | 3 + .../i18n/DefautlI18nMessageProvider.java | 34 + .../common-idempotent/pom.xml | 70 + .../common/idempotent/IdempotentAspect.java | 54 + .../idempotent/annotation/Idempotent.java | 66 + .../exception/IdempotentException.java | 16 + .../DefaultIdempotentKeyGenerator.java | 55 + .../key/generator/IdempotentKeyGenerator.java | 25 + .../key/store/IdempotentKeyStore.java | 31 + .../key/store/InMemoryIdempotentKeyStore.java | 38 + .../key/store/RedisIdempotentKeyStore.java | 34 + ad-distribute-common/common-log/pom.xml | 32 + .../log/access/filter/AccessLogFilter.java | 117 ++ .../log/access/handler/AccessLogHandler.java | 42 + .../annotation/CreateOperationLogging.java | 44 + .../annotation/DeleteOperationLogging.java | 44 + .../annotation/OperationLogging.java | 43 + .../annotation/ReadOperationLogging.java | 44 + .../annotation/UpdateOperationLogging.java | 44 + .../operation/aspect/OperationLogAspect.java | 80 + .../log/operation/enums/LogStatusEnum.java | 26 + .../log/operation/enums/OperationTypes.java | 48 + .../handler/AbstractOperationLogHandler.java | 89 + .../handler/OperationLogHandler.java | 42 + .../ballcat/common/log/util/LogUtils.java | 78 + ad-distribute-common/common-model/pom.xml | 35 + .../common/model/domain/PageParam.java | 58 + .../common/model/domain/PageResult.java | 44 + .../model/domain/PageableConstants.java | 76 + .../common/model/domain/SelectData.java | 51 + .../common/model/entity/BaseEntity.java | 49 + .../model/entity/LogicDeletedBaseEntity.java | 27 + .../common/model/result/BaseResultCode.java | 49 + .../hccake/ballcat/common/model/result/R.java | 61 + .../common/model/result/ResultCode.java | 22 + .../common/model/result/SystemResultCode.java | 88 + ad-distribute-common/common-redis/pom.xml | 45 + .../ballcat/common/redis/RedisHelper.java | 1854 +++++++++++++++++ .../common/redis/config/CacheProperties.java | 55 + .../redis/config/CachePropertiesHolder.java | 46 + .../common/redis/config/KeyEventConfig.java | 18 + .../common/redis/core/CacheStringAspect.java | 263 +++ .../common/redis/core/KeyGenerator.java | 87 + .../redis/core/annotation/CacheDel.java | 46 + .../redis/core/annotation/CacheDels.java | 19 + .../redis/core/annotation/CachePut.java | 38 + .../common/redis/core/annotation/Cached.java | 38 + .../core/annotation/MetaCacheAnnotation.java | 15 + ...bstractDeletedKeyEventMessageListener.java | 30 + ...bstractExpiredKeyEventMessageListener.java | 34 + .../AbstractKeySpaceEventMessageListener.java | 75 + .../AbstractSetKeyEventMessageListener.java | 30 + ...DefaultDeletedKeyEventMessageListener.java | 59 + ...DefaultExpiredKeyEventMessageListener.java | 59 + .../DefaultSetKeyEventMessageListener.java | 59 + .../common/redis/keyevent/package-info.java | 4 + .../KeyDeletedEventMessageTemplate.java | 11 + .../template/KeyEventMessageTemplate.java | 26 + .../KeyExpiredEventMessageTemplate.java | 11 + .../template/KeySetEventMessageTemplate.java | 11 + .../AbstractMessageEventListener.java | 51 + .../redis/listener/MessageEventListener.java | 19 + .../ballcat/common/redis/lock/Action.java | 46 + .../ballcat/common/redis/lock/CacheLock.java | 86 + .../common/redis/lock/DistributedLock.java | 106 + .../common/redis/lock/StateHandler.java | 41 + .../redis/lock/function/ExceptionHandler.java | 17 + .../redis/lock/function/ThrowingExecutor.java | 18 + .../redis/operation/AbstractCacheOps.java | 36 + .../common/redis/operation/CacheDelOps.java | 27 + .../common/redis/operation/CacheDelsOps.java | 27 + .../common/redis/operation/CachePutOps.java | 28 + .../common/redis/operation/CachedOps.java | 69 + .../operation/function/ResultMethod.java | 17 + .../redis/operation/function/VoidMethod.java | 16 + .../redis/prefix/IRedisPrefixConverter.java | 76 + .../impl/DefaultRedisPrefixConverter.java | 28 + .../redis/serialize/CacheSerializer.java | 62 + .../redis/serialize/JacksonSerializer.java | 42 + .../serialize/PrefixJdkRedisSerializer.java | 33 + .../PrefixStringRedisSerializer.java | 36 + .../redis/thread/AbstractRedisThread.java | 167 ++ ad-distribute-common/common-util/pom.xml | 57 + .../ballcat/common/charset/GSMCharset.java | 126 ++ .../exception/CommandTimeoutException.java | 8 + .../ballcat/common/queue/WaitQueue.java | 53 + .../hccake/ballcat/common/system/Command.java | 161 ++ .../ballcat/common/system/CommandResult.java | 96 + .../ballcat/common/system/StopWatch.java | 72 + .../ballcat/common/thread/ThreadPool.java | 92 + .../ballcat/common/util/ArrayUtils.java | 35 + .../ballcat/common/util/BooleanUtils.java | 41 + .../ballcat/common/util/ClassUtils.java | 182 ++ .../ballcat/common/util/EnvironmentUtils.java | 159 ++ .../hccake/ballcat/common/util/FileUtils.java | 216 ++ .../hccake/ballcat/common/util/HtmlUtils.java | 55 + .../ballcat/common/util/ImageUtils.java | 297 +++ .../hccake/ballcat/common/util/IpUtils.java | 69 + .../hccake/ballcat/common/util/JsonUtils.java | 102 + .../common/util/LocalDateTimeUtils.java | 120 ++ .../hccake/ballcat/common/util/SmsUtils.java | 78 + .../hccake/ballcat/common/util/SpelUtils.java | 89 + .../ballcat/common/util/SpringUtils.java | 123 ++ .../ballcat/common/util/StreamUtils.java | 146 ++ .../ballcat/common/util/SystemUtils.java | 91 + .../util/json/FastjsonJsonToolAdapter.java | 67 + .../common/util/json/GsonJsonToolAdapter.java | 53 + .../util/json/HuToolJsonToolAdapter.java | 47 + .../util/json/JacksonJsonToolAdapter.java | 60 + .../ballcat/common/util/json/JsonTool.java | 44 + .../common/util/json/TypeReference.java | 41 + .../ballcat/common/util/tree/TreeNode.java | 36 + .../ballcat/common/util/tree/TreeUtils.java | 328 +++ ad-distribute-common/common-websocket/pom.xml | 45 + .../websocket/WebSocketMessageSender.java | 44 + .../AbstractMessageDistributor.java | 64 + .../distribute/LocalMessageDistributor.java | 26 + .../websocket/distribute/MessageDO.java | 36 + .../distribute/MessageDistributor.java | 17 + .../distribute/RedisMessageDistributor.java | 56 + .../RedisMessageListenerInitializer.java | 27 + .../RocketmqMessageDistributor.java | 77 + .../exception/ErrorJsonMessageException.java | 14 + .../ConcurrentWebSocketSessionOptions.java | 34 + .../handler/CustomWebSocketHandler.java | 103 + .../websocket/handler/JsonMessageHandler.java | 31 + .../handler/PingJsonMessageHandler.java | 34 + .../handler/PlanTextMessageHandler.java | 22 + .../holder/JsonMessageHandlerHolder.java | 28 + .../holder/JsonMessageHandlerInitializer.java | 31 + .../message/JsonWebSocketMessage.java | 31 + .../message/PingJsonWebSocketMessage.java | 13 + .../message/PongJsonWebSocketMessage.java | 13 + .../message/WebSocketMessageTypeEnum.java | 18 + .../session/DefaultWebSocketSessionStore.java | 102 + .../MapSessionWebSocketHandlerDecorator.java | 57 + .../session/SessionKeyGenerator.java | 20 + .../session/WebSocketSessionStore.java | 43 + ad-distribute-common/pom.xml | 49 + .../ad-distribute-extend-mybatis-plus/pom.xml | 56 + .../extend/mybatis/plus/alias/TableAlias.java | 25 + .../mybatis/plus/alias/TableAliasHelper.java | 79 + .../alias/TableAliasNotFoundException.java | 26 + .../plus/conditions/query/ColumnFunction.java | 22 + .../query/LambdaAliasQueryWrapperX.java | 90 + .../conditions/query/LambdaQueryWrapperX.java | 234 +++ .../plus/injector/CustomSqlInjector.java | 27 + .../mybatis/plus/mapper/ExtendMapper.java | 36 + .../mybatis/plus/methods/BaseInsertBatch.java | 98 + .../InsertBatchSomeColumnByCollection.java | 92 + .../plus/methods/InsertIgnoreByBatch.java | 21 + .../plus/methods/InsertOrUpdateByBatch.java | 67 + .../methods/InsertOrUpdateFieldByBatch.java | 45 + .../mybatis/plus/service/ExtendService.java | 257 +++ .../plus/service/impl/ExtendServiceImpl.java | 251 +++ .../extend/mybatis/plus/toolkit/PageUtil.java | 35 + .../mybatis/plus/toolkit/WrappersX.java | 88 + .../plus/type/EnumNameTypeHandler.java | 92 + ad-distribute-extends/pom.xml | 19 + ad-distribute-security/pom.xml | 25 + ad-distribute-security/security-core/pom.xml | 24 + .../captcha/CaptchaValidateResult.java | 46 + .../security/captcha/CaptchaValidator.java | 19 + .../properties/SecurityProperties.java | 24 + .../pom.xml | 54 + ...h2AuthorizationObjectMapperCustomizer.java | 15 + .../EnableOauth2AuthorizationServer.java | 20 + ...h2ResourceOwnerAuthenticationProvider.java | 184 ++ ...Auth2ResourceOwnerAuthenticationToken.java | 50 + .../OAuth2AuthenticationProviderUtils.java | 84 + ...ceOwnerPasswordAuthenticationProvider.java | 70 + ...ourceOwnerPasswordAuthenticationToken.java | 45 + ...TokenRevocationAuthenticationProvider.java | 100 + ...th2TokenRevocationAuthenticationToken.java | 123 ++ ...2AuthorizationServerAutoConfiguration.java | 186 ++ ...rverConfigurerCustomizerConfiguration.java | 81 + ...erverExtensionConfigurerConfiguration.java | 44 + ...ationServerSecurityFilterChainBuilder.java | 76 + ...ationServerSecurityFilterChainBuilder.java | 21 + ...uthorizationServerExtensionConfigurer.java | 14 + .../configurer/OAuth2ConfigurerUtils.java | 207 ++ .../OAuth2LoginCaptchaConfigurer.java | 44 + .../OAuth2LoginPasswordDecoderConfigurer.java | 43 + .../FormLoginConfigurerCustomizer.java | 46 + ...orizationEndpointConfigurerCustomizer.java | 64 + ...thorizationServerConfigurerCustomizer.java | 22 + ...urceOwnerPasswordConfigurerCustomizer.java | 61 + ...enResponseEnhanceConfigurerCustomizer.java | 114 + ...evocationEndpointConfigurerCustomizer.java | 31 + .../OAuth2AuthorizationServerProperties.java | 50 + .../token/BallcatOAuth2TokenCustomizer.java | 60 + .../web/CookieBearerTokenResolver.java | 48 + .../authentication/OAuth2EndpointUtils.java | 55 + ...Auth2LoginUrlAuthenticationEntryPoint.java | 74 + ...eOwnerPasswordAuthenticationConverter.java | 87 + .../OAuth2TokenResponseEnhancer.java | 25 + .../OAuth2TokenRevocationResponseHandler.java | 36 + .../OAuth2SecurityContextRepository.java | 70 + .../web/filter/LoginCaptchaFilter.java | 82 + .../filter/LoginPasswordDecoderFilter.java | 102 + .../security-oauth2-core/pom.xml | 33 + .../ballcat/common/security/ScopeNames.java | 21 + .../OAuth2UserAuthenticationToken.java | 40 + .../component/CustomPermissionEvaluator.java | 36 + .../constant/TokenAttributeNameConstants.java | 26 + .../constant/UserAttributeNameConstants.java | 26 + .../constant/UserInfoFiledNameConstants.java | 61 + .../common/security/jackson2/LongMixin.java | 20 + ...h2UserAuthenticationTokenDeserializer.java | 55 + .../OAuth2UserAuthenticationTokenMixin.java | 18 + .../security/jackson2/UserDeserializer.java | 95 + .../common/security/jackson2/UserMixin.java | 18 + .../security/userdetails/ClientPrincipal.java | 63 + .../common/security/userdetails/User.java | 121 ++ .../common/security/util/PasswordUtils.java | 86 + .../common/security/util/SecurityUtils.java | 64 + .../security-oauth2-resource-server/pom.xml | 56 + ...nonymousForeverAuthenticationProvider.java | 114 + ...OAuth2ResourceServerAutoConfiguration.java | 129 ++ .../EnableOauth2ResourceServer.java | 20 + ...ourceServerSecurityFilterChainBuilder.java | 77 + ...th2ResourceServerConfigurerCustomizer.java | 18 + ...uth2ResourceServerExtensionConfigurer.java | 14 + ...ourceServerSecurityFilterChainBuilder.java | 21 + .../BallcatRemoteOpaqueTokenIntrospector.java | 321 +++ ...erSharedStoredOpaqueTokenIntrospector.java | 92 + .../OAuth2ResourceServerProperties.java | 62 + .../web/CustomAuthenticationEntryPoint.java | 37 + .../ad-distribute-starter-file/pom.xml | 44 + .../starter/file/FileAutoConfiguration.java | 40 + .../hccake/starter/file/FileProperties.java | 77 + .../starter/file/core/AbstractFileClient.java | 30 + .../hccake/starter/file/core/FileClient.java | 36 + .../starter/file/exception/FileException.java | 27 + .../starter/file/ftp/FtpFileClient.java | 101 + .../com/hccake/starter/file/ftp/FtpMode.java | 24 + .../starter/file/local/LocalFileClient.java | 83 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../ad-distribute-starter-oss/pom.xml | 35 + .../common/oss/DefaultOssTemplate.java | 309 +++ .../ObjectWithGlobalKeyPrefixOssTemplate.java | 240 +++ .../common/oss/OssAutoConfiguration.java | 61 + .../hccake/ballcat/common/oss/OssClient.java | 93 + .../ballcat/common/oss/OssConstants.java | 14 + .../ballcat/common/oss/OssProperties.java | 146 ++ .../ballcat/common/oss/OssTemplate.java | 521 +++++ .../DefaultObjectKeyPrefixConverter.java | 94 + .../oss/prefix/ObjectKeyPrefixConverter.java | 37 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/test/resources/application-minio.yml | 10 + .../src/test/resources/test.txt | 1 + .../ad-distribute-starter-redis/pom.xml | 44 + .../AddMessageEventListenerToContainer.java | 32 + .../redis/BallcatRedisAutoConfiguration.java | 118 ++ ...MessageEventListenerAutoConfiguration.java | 30 + .../redis/RedisKeyEventAutoConfiguration.java | 116 ++ .../main/resources/META-INF/spring.factories | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + .../ad-distribute-starter-swagger/pom.xml | 45 + ...ngfoxHandlerProviderBeanPostProcessor.java | 53 + .../SwaggerAggregatorAutoConfiguration.java | 57 + .../common/swagger/SwaggerConfiguration.java | 57 + ...StatusReplaceEnvironmentPostProcessor.java | 69 + .../SwaggerProviderAutoConfiguration.java | 60 + .../annotation/EnableSwagger2Aggregator.java | 22 + .../annotation/EnableSwagger2Provider.java | 22 + .../swagger/builder/DocketBuildHelper.java | 126 ++ .../builder/MultiRequestHandlerSelectors.java | 92 + .../swagger/constant/SwaggerConstants.java | 26 + .../property/DocumentationTypeEnum.java | 29 + .../property/SwaggerAggregatorProperties.java | 24 + .../swagger/property/SwaggerProperties.java | 150 ++ .../property/SwaggerProviderProperties.java | 20 + .../main/resources/META-INF/spring.factories | 3 + ....boot.env.EnvironmentPostProcessor.imports | 1 + .../ad-distribute-starter-websocket/pom.xml | 49 + .../MessageDistributorTypeConstants.java | 33 + .../websocket/SockJsServiceConfigurer.java | 18 + .../websocket/WebSocketAutoConfiguration.java | 95 + .../websocket/WebSocketProperties.java | 89 + .../config/LocalMessageDistributorConfig.java | 37 + .../config/RedisMessageDistributorConfig.java | 57 + .../RocketMqMessageDistributorConfig.java | 35 + .../config/WebSocketHandlerConfig.java | 48 + ...itional-spring-configuration-metadata.json | 32 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + ad-distribute-starters/pom.xml | 30 + ad-distribute-system/pom.xml | 47 + ad-distribute-system/system-biz/pom.xml | 55 + .../ballcat/file/service/FileService.java | 46 + .../BallcatOAuth2TokenResponseEnhancer.java | 75 + .../DefaultUserInfoCoordinatorImpl.java | 20 + .../SysUserDetailsServiceImpl.java | 90 + .../authentication/UserInfoCoordinator.java | 23 + .../system/checker/AdminUserChecker.java | 26 + .../system/checker/AdminUserCheckerImpl.java | 40 + .../system/component/PasswordHelper.java | 73 + .../system/manager/SysDictManager.java | 253 +++ .../system/mapper/SysConfigMapper.java | 72 + .../system/mapper/SysDictItemMapper.java | 66 + .../ballcat/system/mapper/SysDictMapper.java | 71 + .../ballcat/system/mapper/SysMenuMapper.java | 85 + .../system/mapper/SysOrganizationMapper.java | 68 + .../ballcat/system/mapper/SysRoleMapper.java | 63 + .../system/mapper/SysRoleMenuMapper.java | 52 + .../ballcat/system/mapper/SysUserMapper.java | 151 ++ .../system/mapper/SysUserRoleMapper.java | 103 + .../system/properties/FileProperties.java | 52 + .../system/properties/SystemProperties.java | 46 + .../system/service/SysConfigService.java | 47 + .../system/service/SysDictItemService.java | 48 + .../system/service/SysDictService.java | 49 + .../system/service/SysMenuService.java | 45 + .../service/SysOrganizationService.java | 59 + .../system/service/SysRoleMenuService.java | 46 + .../system/service/SysRoleService.java | 44 + .../system/service/SysUserRoleService.java | 66 + .../system/service/SysUserService.java | 158 ++ .../service/impl/SysConfigServiceImpl.java | 61 + .../service/impl/SysDictItemServiceImpl.java | 69 + .../service/impl/SysDictServiceImpl.java | 70 + .../service/impl/SysMenuServiceImpl.java | 146 ++ .../impl/SysOrganizationServiceImpl.java | 239 +++ .../service/impl/SysRoleMenuServiceImpl.java | 79 + .../service/impl/SysRoleServiceImpl.java | 94 + .../service/impl/SysUserRoleServiceImpl.java | 141 ++ .../service/impl/SysUserServiceImpl.java | 377 ++++ .../main/resources/mapper/SysMenuMapper.xml | 75 + .../mapper/SysOrganizationMapper.xml | 68 + .../main/resources/mapper/SysRoleMapper.xml | 14 + .../main/resources/mapper/SysUserMapper.xml | 65 + .../resources/mapper/SysUserRoleMapper.xml | 41 + .../system-controller/pom.xml | 24 + .../controller/SysConfigController.java | 93 + .../system/controller/SysDictController.java | 199 ++ .../system/controller/SysMenuController.java | 159 ++ .../controller/SysOrganizationController.java | 126 ++ .../system/controller/SysRoleController.java | 197 ++ .../system/controller/SysUserController.java | 262 +++ ad-distribute-system/system-model/pom.xml | 36 + .../ballcat/system/constant/SysRoleConst.java | 32 + .../ballcat/system/constant/SysUserConst.java | 51 + .../constant/SystemRedisKeyConstants.java | 19 + .../system/converter/SysConfigConverter.java | 25 + .../system/converter/SysDictConverter.java | 25 + .../converter/SysDictItemConverter.java | 41 + .../system/converter/SysMenuConverter.java | 59 + .../converter/SysOrganizationConverter.java | 40 + .../system/converter/SysRoleConverter.java | 34 + .../system/converter/SysUserConverter.java | 43 + .../ballcat/system/enums/SysMenuType.java | 30 + .../hccake/ballcat/system/enums/TagEnum.java | 18 + .../ballcat/system/event/DictChangeEvent.java | 24 + .../system/event/UserCreatedEvent.java | 27 + .../event/UserOrganizationChangeEvent.java | 23 + .../model/dto/OrganizationMoveChildParam.java | 43 + .../system/model/dto/SysDictItemDTO.java | 86 + .../system/model/dto/SysMenuCreateDTO.java | 108 + .../system/model/dto/SysMenuUpdateDTO.java | 106 + .../system/model/dto/SysOrganizationDTO.java | 48 + .../system/model/dto/SysRoleUpdateDTO.java | 38 + .../ballcat/system/model/dto/SysUserDTO.java | 103 + .../system/model/dto/SysUserPassDTO.java | 35 + .../system/model/dto/SysUserScope.java | 18 + .../ballcat/system/model/dto/UserInfoDTO.java | 51 + .../system/model/entity/SysConfig.java | 59 + .../ballcat/system/model/entity/SysDict.java | 61 + .../system/model/entity/SysDictItem.java | 78 + .../ballcat/system/model/entity/SysMenu.java | 124 ++ .../system/model/entity/SysOrganization.java | 66 + .../ballcat/system/model/entity/SysRole.java | 69 + .../system/model/entity/SysRoleMenu.java | 43 + .../ballcat/system/model/entity/SysUser.java | 99 + .../system/model/entity/SysUserRole.java | 37 + .../system/model/qo/RoleBindUserQO.java | 34 + .../ballcat/system/model/qo/SysConfigQO.java | 37 + .../ballcat/system/model/qo/SysDictQO.java | 33 + .../ballcat/system/model/qo/SysMenuQO.java | 44 + .../system/model/qo/SysOrganizationQO.java | 27 + .../ballcat/system/model/qo/SysRoleQO.java | 33 + .../ballcat/system/model/qo/SysUserQO.java | 69 + .../ballcat/system/model/vo/DictDataVO.java | 39 + .../ballcat/system/model/vo/DictItemVO.java | 47 + .../system/model/vo/RoleBindUserVO.java | 38 + .../system/model/vo/SysConfigPageVO.java | 66 + .../system/model/vo/SysDictItemPageVO.java | 84 + .../system/model/vo/SysDictPageVO.java | 67 + .../system/model/vo/SysMenuGrantVO.java | 46 + .../system/model/vo/SysMenuPageVO.java | 120 ++ .../system/model/vo/SysMenuRouterVO.java | 88 + .../system/model/vo/SysOrganizationTree.java | 103 + .../system/model/vo/SysOrganizationVO.java | 60 + .../system/model/vo/SysRolePageVO.java | 50 + .../ballcat/system/model/vo/SysUserInfo.java | 74 + .../system/model/vo/SysUserPageVO.java | 96 + admin/pom.xml | 108 + .../main/java/com/baiye/AdminApplication.java | 22 + .../baiye/captcha/TianaiCaptchaEndpoint.java | 40 + .../captcha/TianaiCaptchaResourceStore.java | 57 + .../baiye/captcha/TianaiCaptchaValidator.java | 36 + .../baiye/easyexcel/dto/ClueListenerDto.java | 24 + .../easyexcel/listener/ClueListener.java | 67 + .../distribute/controller/ClueController.java | 33 + .../controller/ClueRecordController.java | 21 + .../modules/distribute/entity/ClueEntity.java | 43 + .../distribute/entity/ClueRecordEntity.java | 52 + .../modules/distribute/mapper/ClueMapper.java | 8 + .../distribute/mapper/ClueRecordMapper.java | 8 + .../distribute/service/ClueRecordService.java | 8 + .../distribute/service/ClueService.java | 21 + .../service/impl/ClueRecordServiceImpl.java | 21 + .../service/impl/ClueServiceImpl.java | 97 + .../com/baiye/task/SyncUploadFileTask.java | 41 + .../com/baiye/utils/ClueFileTestingUtil.java | 77 + admin/src/main/resources/application-dev.yml | 24 + admin/src/main/resources/application-prod.yml | 25 + admin/src/main/resources/application-test.yml | 22 + admin/src/main/resources/application.yml | 131 ++ admin/src/main/resources/bgimages/48.jpg | Bin 0 -> 136936 bytes admin/src/main/resources/bgimages/a.jpg | Bin 0 -> 42161 bytes admin/src/main/resources/bgimages/b.jpg | Bin 0 -> 53769 bytes admin/src/main/resources/bgimages/c.jpg | Bin 0 -> 40815 bytes admin/src/main/resources/bgimages/d.jpg | Bin 0 -> 53198 bytes admin/src/main/resources/bgimages/e.jpg | Bin 0 -> 58372 bytes admin/src/main/resources/bgimages/g.jpg | Bin 0 -> 135947 bytes admin/src/main/resources/bgimages/h.jpg | Bin 0 -> 86253 bytes admin/src/main/resources/bgimages/i.jpg | Bin 0 -> 140669 bytes admin/src/main/resources/bgimages/j.jpg | Bin 0 -> 153688 bytes admin/src/main/resources/logback-spring.xml | 105 + pom.xml | 644 ++++++ 539 files changed, 34478 insertions(+) create mode 100644 .editorconfig create mode 100644 .springjavaformatconfig create mode 100644 LICENSE create mode 100644 README.md create mode 100644 ad-distribute-admin/admin-core/pom.xml create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/UpmsAutoConfiguration.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/FillMetaObjectHandle.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/MybatisPlusConfig.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/MdcTaskDecorator.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/TaskExecutionConfiguration.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LogConfiguration.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LoginLogHandler.java create mode 100644 ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/SpringAuthorizationServerLoginLogHandler.java create mode 100644 ad-distribute-admin/admin-core/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-admin/admin-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-admin/admin-websocket/pom.xml create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/AdminWebSocketAutoConfiguration.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/NotifyWebsocketEventListenerConfiguration.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/SystemWebsocketEventListenerConfiguration.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserAttributeHandshakeInterceptor.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserSessionKeyGenerator.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/constant/AdminWebSocketConstants.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/NotifyWebsocketEventListener.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/SystemWebsocketEventListener.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/AnnouncementCloseMessage.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/DictChangeMessage.java create mode 100644 ad-distribute-admin/admin-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-admin/pom.xml create mode 100644 ad-distribute-common/common-core/pom.xml create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/compose/ContextComponent.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/GlobalConstants.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HeaderConstants.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HttpsConstants.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/MDCConstants.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/BooleanEnum.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/ImportModeEnum.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/BusinessException.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/SqlCheckedException.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/handler/GlobalExceptionHandler.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/CompatibleSSLFactory.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/SSLSocketFactoryInitException.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/CustomJavaTimeModule.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullArrayJsonSerializer.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullMapJsonSerializer.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullSerializerProvider.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullStringJsonSerializer.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/lock/JavaReentrantLock.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/markdown/MarkdownBuilder.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/request/wrapper/ModifyParamMapRequestWrapper.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/request/wrapper/RepeatBodyRequestWrapper.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/spring/BallcatBeanPostProcessor.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/spring/compose/ContextComposeBeanPostProcessor.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/spring/compose/SpringContextClosed.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/thread/AbstractBlockingQueueThread.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/thread/AbstractDynamicTimer.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/thread/AbstractQueueThread.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/thread/AbstractThreadContextComponent.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/thread/AbstractTimer.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/util/FileUtil.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/util/MobileUtil.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/util/WebUtils.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/EmptyCurlyToDefaultMessageInterpolator.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/constraints/OneOfClasses.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/constraints/OneOfInts.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/constraints/OneOfStrings.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/constraints/ValueOfEnum.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/group/CreateGroup.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/group/UpdateGroup.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/validator/EnumValueValidatorOfClass.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/validator/EnumValueValidatorOfInt.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/validator/EnumValueValidatorOfString.java create mode 100644 ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/validation/validator/ValueOfEnumValidator.java create mode 100644 ad-distribute-common/common-desensitize/pom.xml create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/AnnotationHandlerHolder.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/DesensitizationHandlerHolder.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/enums/RegexDesensitizationTypeEnum.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/enums/SlideDesensitizationTypeEnum.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/functions/DesensitizeFunction.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/handler/DesensitizationHandler.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/handler/RegexDesensitizationHandler.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/handler/SimpleDesensitizationHandler.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/handler/SixAsteriskDesensitizationHandler.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/handler/SlideDesensitizationHandler.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/DesensitizeStrategy.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/JsonDesensitizeModule.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/JsonDesensitizeSerializer.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/JsonDesensitizeSerializerModifier.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/annotation/JsonRegexDesensitize.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/annotation/JsonSimpleDesensitize.java create mode 100644 ad-distribute-common/common-desensitize/src/main/java/com/hccake/ballcat/common/desensitize/json/annotation/JsonSlideDesensitize.java create mode 100644 ad-distribute-common/common-desensitize/src/main/resources/META-INF/services/com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler create mode 100644 ad-distribute-common/common-desensitize/src/test/resources/META-INF/services/com.hccake.ballcat.common.desensitize.handler.SimpleDesensitizationHandler create mode 100644 ad-distribute-common/common-i18n/pom.xml create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/DynamicMessageSource.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nClass.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nField.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nIgnore.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nMessage.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nMessageCreateEvent.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nMessageProvider.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nOptions.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/I18nResponseAdvice.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/MessageSourceHierarchicalChanger.java create mode 100644 ad-distribute-common/common-i18n/src/main/java/com/hccake/ballcat/common/i18n/WildcardReloadableResourceBundleMessageSource.java create mode 100644 ad-distribute-common/common-i18n/src/main/resources/ballcat-i18nMessage.properties create mode 100644 ad-distribute-common/common-i18n/src/main/resources/ballcat-i18nMessage_en_US.properties create mode 100644 ad-distribute-common/common-i18n/src/main/resources/ballcat-i18nMessage_zh_CN.properties create mode 100644 ad-distribute-common/common-i18n/src/test/java/com/hccake/ballcat/common/i18n/DefautlI18nMessageProvider.java create mode 100644 ad-distribute-common/common-idempotent/pom.xml create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/IdempotentAspect.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/annotation/Idempotent.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/exception/IdempotentException.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/key/generator/DefaultIdempotentKeyGenerator.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/key/generator/IdempotentKeyGenerator.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/key/store/IdempotentKeyStore.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/key/store/InMemoryIdempotentKeyStore.java create mode 100644 ad-distribute-common/common-idempotent/src/main/java/com/hccake/ballcat/common/idempotent/key/store/RedisIdempotentKeyStore.java create mode 100644 ad-distribute-common/common-log/pom.xml create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/access/filter/AccessLogFilter.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/access/handler/AccessLogHandler.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/annotation/CreateOperationLogging.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/annotation/DeleteOperationLogging.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/annotation/OperationLogging.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/annotation/ReadOperationLogging.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/annotation/UpdateOperationLogging.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/aspect/OperationLogAspect.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/enums/LogStatusEnum.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/enums/OperationTypes.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/handler/AbstractOperationLogHandler.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/operation/handler/OperationLogHandler.java create mode 100644 ad-distribute-common/common-log/src/main/java/com/hccake/ballcat/common/log/util/LogUtils.java create mode 100644 ad-distribute-common/common-model/pom.xml create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/domain/PageParam.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/domain/PageResult.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/domain/PageableConstants.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/domain/SelectData.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/entity/BaseEntity.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/entity/LogicDeletedBaseEntity.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/result/BaseResultCode.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/result/R.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/result/ResultCode.java create mode 100644 ad-distribute-common/common-model/src/main/java/com/hccake/ballcat/common/model/result/SystemResultCode.java create mode 100644 ad-distribute-common/common-redis/pom.xml create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/RedisHelper.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/config/CacheProperties.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/config/CachePropertiesHolder.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/config/KeyEventConfig.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/CacheStringAspect.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/KeyGenerator.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/annotation/CacheDel.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/annotation/CacheDels.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/annotation/CachePut.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/annotation/Cached.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/core/annotation/MetaCacheAnnotation.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/AbstractDeletedKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/AbstractExpiredKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/AbstractKeySpaceEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/AbstractSetKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultDeletedKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultExpiredKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/listener/DefaultSetKeyEventMessageListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/package-info.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/template/KeyDeletedEventMessageTemplate.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/template/KeyEventMessageTemplate.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/template/KeyExpiredEventMessageTemplate.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/keyevent/template/KeySetEventMessageTemplate.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/listener/AbstractMessageEventListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/listener/MessageEventListener.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/Action.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/CacheLock.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/DistributedLock.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/StateHandler.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/function/ExceptionHandler.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/lock/function/ThrowingExecutor.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/AbstractCacheOps.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/CacheDelOps.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/CacheDelsOps.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/CachePutOps.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/CachedOps.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/function/ResultMethod.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/operation/function/VoidMethod.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/prefix/IRedisPrefixConverter.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/prefix/impl/DefaultRedisPrefixConverter.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/serialize/CacheSerializer.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/serialize/JacksonSerializer.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/serialize/PrefixJdkRedisSerializer.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/serialize/PrefixStringRedisSerializer.java create mode 100644 ad-distribute-common/common-redis/src/main/java/com/hccake/ballcat/common/redis/thread/AbstractRedisThread.java create mode 100644 ad-distribute-common/common-util/pom.xml create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/charset/GSMCharset.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/exception/CommandTimeoutException.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/queue/WaitQueue.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/system/Command.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/system/CommandResult.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/system/StopWatch.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/thread/ThreadPool.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/ArrayUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/BooleanUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/ClassUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/EnvironmentUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/FileUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/HtmlUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/ImageUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/IpUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/JsonUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/LocalDateTimeUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/SmsUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/SpelUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/SpringUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/StreamUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/SystemUtils.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/FastjsonJsonToolAdapter.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/GsonJsonToolAdapter.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/HuToolJsonToolAdapter.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/JacksonJsonToolAdapter.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/JsonTool.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/json/TypeReference.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/tree/TreeNode.java create mode 100644 ad-distribute-common/common-util/src/main/java/com/hccake/ballcat/common/util/tree/TreeUtils.java create mode 100644 ad-distribute-common/common-websocket/pom.xml create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/WebSocketMessageSender.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/AbstractMessageDistributor.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/LocalMessageDistributor.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/MessageDO.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/MessageDistributor.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/RedisMessageDistributor.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/RedisMessageListenerInitializer.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/distribute/RocketmqMessageDistributor.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/exception/ErrorJsonMessageException.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/handler/ConcurrentWebSocketSessionOptions.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/handler/CustomWebSocketHandler.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/handler/JsonMessageHandler.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/handler/PingJsonMessageHandler.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/handler/PlanTextMessageHandler.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/holder/JsonMessageHandlerHolder.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/holder/JsonMessageHandlerInitializer.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/message/JsonWebSocketMessage.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/message/PingJsonWebSocketMessage.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/message/PongJsonWebSocketMessage.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/message/WebSocketMessageTypeEnum.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/session/DefaultWebSocketSessionStore.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/session/MapSessionWebSocketHandlerDecorator.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/session/SessionKeyGenerator.java create mode 100644 ad-distribute-common/common-websocket/src/main/java/com/hccake/ballcat/common/websocket/session/WebSocketSessionStore.java create mode 100644 ad-distribute-common/pom.xml create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/pom.xml create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/alias/TableAlias.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/alias/TableAliasHelper.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/alias/TableAliasNotFoundException.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/conditions/query/ColumnFunction.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/conditions/query/LambdaAliasQueryWrapperX.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/conditions/query/LambdaQueryWrapperX.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/injector/CustomSqlInjector.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/mapper/ExtendMapper.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/methods/BaseInsertBatch.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/methods/InsertBatchSomeColumnByCollection.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/methods/InsertIgnoreByBatch.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/methods/InsertOrUpdateByBatch.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/methods/InsertOrUpdateFieldByBatch.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/service/ExtendService.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/service/impl/ExtendServiceImpl.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/toolkit/PageUtil.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/toolkit/WrappersX.java create mode 100644 ad-distribute-extends/ad-distribute-extend-mybatis-plus/src/main/java/com/hccake/extend/mybatis/plus/type/EnumNameTypeHandler.java create mode 100644 ad-distribute-extends/pom.xml create mode 100644 ad-distribute-security/pom.xml create mode 100644 ad-distribute-security/security-core/pom.xml create mode 100644 ad-distribute-security/security-core/src/main/java/org/ballcat/security/captcha/CaptchaValidateResult.java create mode 100644 ad-distribute-security/security-core/src/main/java/org/ballcat/security/captcha/CaptchaValidator.java create mode 100644 ad-distribute-security/security-core/src/main/java/org/ballcat/security/properties/SecurityProperties.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/pom.xml create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/OAuth2AuthorizationObjectMapperCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/annotation/EnableOauth2AuthorizationServer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/AbstractOAuth2ResourceOwnerAuthenticationProvider.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/AbstractOAuth2ResourceOwnerAuthenticationToken.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/OAuth2AuthenticationProviderUtils.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/OAuth2ResourceOwnerPasswordAuthenticationProvider.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/OAuth2ResourceOwnerPasswordAuthenticationToken.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/OAuth2TokenRevocationAuthenticationProvider.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/authentication/OAuth2TokenRevocationAuthenticationToken.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/autoconfigure/OAuth2AuthorizationServerAutoConfiguration.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/autoconfigure/OAuth2AuthorizationServerConfigurerCustomizerConfiguration.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/autoconfigure/OAuth2AuthorizationServerExtensionConfigurerConfiguration.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/BallcatOAuth2AuthorizationServerSecurityFilterChainBuilder.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/OAuth2AuthorizationServerSecurityFilterChainBuilder.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/configurer/OAuth2AuthorizationServerExtensionConfigurer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/configurer/OAuth2ConfigurerUtils.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/configurer/OAuth2LoginCaptchaConfigurer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/configurer/OAuth2LoginPasswordDecoderConfigurer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/FormLoginConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/OAuth2AuthorizationEndpointConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/OAuth2AuthorizationServerConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/OAuth2ResourceOwnerPasswordConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/OAuth2TokenResponseEnhanceConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/config/customizer/OAuth2TokenRevocationEndpointConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/properties/OAuth2AuthorizationServerProperties.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/token/BallcatOAuth2TokenCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/CookieBearerTokenResolver.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/authentication/OAuth2EndpointUtils.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/authentication/OAuth2LoginUrlAuthenticationEntryPoint.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/authentication/OAuth2ResourceOwnerPasswordAuthenticationConverter.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/authentication/OAuth2TokenResponseEnhancer.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/authentication/OAuth2TokenRevocationResponseHandler.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/context/OAuth2SecurityContextRepository.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/filter/LoginCaptchaFilter.java create mode 100644 ad-distribute-security/security-oauth2-authorization-server/src/main/java/org/ballcat/springsecurity/oauth2/server/authorization/web/filter/LoginPasswordDecoderFilter.java create mode 100644 ad-distribute-security/security-oauth2-core/pom.xml create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/ScopeNames.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/authentication/OAuth2UserAuthenticationToken.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/component/CustomPermissionEvaluator.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/constant/TokenAttributeNameConstants.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/constant/UserAttributeNameConstants.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/constant/UserInfoFiledNameConstants.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/jackson2/LongMixin.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/jackson2/OAuth2UserAuthenticationTokenDeserializer.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/jackson2/OAuth2UserAuthenticationTokenMixin.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/jackson2/UserDeserializer.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/jackson2/UserMixin.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/userdetails/ClientPrincipal.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/userdetails/User.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/util/PasswordUtils.java create mode 100644 ad-distribute-security/security-oauth2-core/src/main/java/com/hccake/ballcat/common/security/util/SecurityUtils.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/pom.xml create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/authentication/AnonymousForeverAuthenticationProvider.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/OAuth2ResourceServerAutoConfiguration.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/annotation/EnableOauth2ResourceServer.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/configurer/BallcatOauth2ResourceServerSecurityFilterChainBuilder.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/configurer/OAuth2ResourceServerConfigurerCustomizer.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/configurer/OAuth2ResourceServerExtensionConfigurer.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/configurer/Oauth2ResourceServerSecurityFilterChainBuilder.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/introspection/BallcatRemoteOpaqueTokenIntrospector.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/introspection/SpringAuthorizationServerSharedStoredOpaqueTokenIntrospector.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/properties/OAuth2ResourceServerProperties.java create mode 100644 ad-distribute-security/security-oauth2-resource-server/src/main/java/org/ballcat/springsecurity/oauth2/server/resource/web/CustomAuthenticationEntryPoint.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/pom.xml create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/FileAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/FileProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/core/AbstractFileClient.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/core/FileClient.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/exception/FileException.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/ftp/FtpFileClient.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/ftp/FtpMode.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/java/com/hccake/starter/file/local/LocalFileClient.java create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-starters/ad-distribute-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/pom.xml create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/DefaultOssTemplate.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/ObjectWithGlobalKeyPrefixOssTemplate.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/OssAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/OssClient.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/OssConstants.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/OssProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/OssTemplate.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/prefix/DefaultObjectKeyPrefixConverter.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/java/com/hccake/ballcat/common/oss/prefix/ObjectKeyPrefixConverter.java create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/test/resources/application-minio.yml create mode 100644 ad-distribute-starters/ad-distribute-starter-oss/src/test/resources/test.txt create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/pom.xml create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/AddMessageEventListenerToContainer.java create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/BallcatRedisAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/MessageEventListenerAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/java/com/hccake/ballcat/autoconfigure/redis/RedisKeyEventAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-starters/ad-distribute-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/pom.xml create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/SpringfoxHandlerProviderBeanPostProcessor.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/SwaggerAggregatorAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/SwaggerConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/SwaggerEnabledStatusReplaceEnvironmentPostProcessor.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/SwaggerProviderAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/annotation/EnableSwagger2Aggregator.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/annotation/EnableSwagger2Provider.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/builder/DocketBuildHelper.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/builder/MultiRequestHandlerSelectors.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/constant/SwaggerConstants.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/property/DocumentationTypeEnum.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/property/SwaggerAggregatorProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/property/SwaggerProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/java/com/hccake/ballcat/common/swagger/property/SwaggerProviderProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-starters/ad-distribute-starter-swagger/src/main/resources/META-INF/spring/org.springframework.boot.env.EnvironmentPostProcessor.imports create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/pom.xml create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/MessageDistributorTypeConstants.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/SockJsServiceConfigurer.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/WebSocketAutoConfiguration.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/WebSocketProperties.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/config/LocalMessageDistributorConfig.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/config/RedisMessageDistributorConfig.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/config/RocketMqMessageDistributorConfig.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/java/com/hccake/ballcat/autoconfigure/websocket/config/WebSocketHandlerConfig.java create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/resources/META-INF/spring.factories create mode 100644 ad-distribute-starters/ad-distribute-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 ad-distribute-starters/pom.xml create mode 100644 ad-distribute-system/pom.xml create mode 100644 ad-distribute-system/system-biz/pom.xml create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/file/service/FileService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/authentication/BallcatOAuth2TokenResponseEnhancer.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/authentication/DefaultUserInfoCoordinatorImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/authentication/SysUserDetailsServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/authentication/UserInfoCoordinator.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/checker/AdminUserChecker.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/checker/AdminUserCheckerImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/component/PasswordHelper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/manager/SysDictManager.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysConfigMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysDictItemMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysDictMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysMenuMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysOrganizationMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysRoleMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysRoleMenuMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysUserMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/mapper/SysUserRoleMapper.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/properties/FileProperties.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/properties/SystemProperties.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysConfigService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysDictItemService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysDictService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysMenuService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysOrganizationService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysRoleMenuService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysRoleService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysUserRoleService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/SysUserService.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysConfigServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysDictItemServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysDictServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysMenuServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysOrganizationServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysRoleMenuServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysRoleServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysUserRoleServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/java/com/hccake/ballcat/system/service/impl/SysUserServiceImpl.java create mode 100644 ad-distribute-system/system-biz/src/main/resources/mapper/SysMenuMapper.xml create mode 100644 ad-distribute-system/system-biz/src/main/resources/mapper/SysOrganizationMapper.xml create mode 100644 ad-distribute-system/system-biz/src/main/resources/mapper/SysRoleMapper.xml create mode 100644 ad-distribute-system/system-biz/src/main/resources/mapper/SysUserMapper.xml create mode 100644 ad-distribute-system/system-biz/src/main/resources/mapper/SysUserRoleMapper.xml create mode 100644 ad-distribute-system/system-controller/pom.xml create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysConfigController.java create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysDictController.java create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysMenuController.java create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysOrganizationController.java create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysRoleController.java create mode 100644 ad-distribute-system/system-controller/src/main/java/com/hccake/ballcat/system/controller/SysUserController.java create mode 100644 ad-distribute-system/system-model/pom.xml create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/constant/SysRoleConst.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/constant/SysUserConst.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/constant/SystemRedisKeyConstants.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysConfigConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysDictConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysDictItemConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysMenuConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysOrganizationConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysRoleConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/converter/SysUserConverter.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/enums/SysMenuType.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/enums/TagEnum.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/event/DictChangeEvent.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/event/UserCreatedEvent.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/event/UserOrganizationChangeEvent.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/OrganizationMoveChildParam.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysDictItemDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysMenuCreateDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysMenuUpdateDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysOrganizationDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysRoleUpdateDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysUserDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysUserPassDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/SysUserScope.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/dto/UserInfoDTO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysConfig.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysDict.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysDictItem.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysMenu.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysOrganization.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysRole.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysRoleMenu.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysUser.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/entity/SysUserRole.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/RoleBindUserQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysConfigQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysDictQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysMenuQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysOrganizationQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysRoleQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/qo/SysUserQO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/DictDataVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/DictItemVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/RoleBindUserVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysConfigPageVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysDictItemPageVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysDictPageVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysMenuGrantVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysMenuPageVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysMenuRouterVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysOrganizationTree.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysOrganizationVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysRolePageVO.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysUserInfo.java create mode 100644 ad-distribute-system/system-model/src/main/java/com/hccake/ballcat/system/model/vo/SysUserPageVO.java create mode 100644 admin/pom.xml create mode 100644 admin/src/main/java/com/baiye/AdminApplication.java create mode 100644 admin/src/main/java/com/baiye/captcha/TianaiCaptchaEndpoint.java create mode 100644 admin/src/main/java/com/baiye/captcha/TianaiCaptchaResourceStore.java create mode 100644 admin/src/main/java/com/baiye/captcha/TianaiCaptchaValidator.java create mode 100644 admin/src/main/java/com/baiye/easyexcel/dto/ClueListenerDto.java create mode 100644 admin/src/main/java/com/baiye/easyexcel/listener/ClueListener.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/ClueController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/ClueRecordController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/ClueEntity.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/ClueRecordEntity.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/ClueMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/ClueRecordMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/ClueRecordService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/ClueService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueRecordServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/task/SyncUploadFileTask.java create mode 100644 admin/src/main/java/com/baiye/utils/ClueFileTestingUtil.java create mode 100644 admin/src/main/resources/application-dev.yml create mode 100644 admin/src/main/resources/application-prod.yml create mode 100644 admin/src/main/resources/application-test.yml create mode 100644 admin/src/main/resources/application.yml create mode 100644 admin/src/main/resources/bgimages/48.jpg create mode 100644 admin/src/main/resources/bgimages/a.jpg create mode 100644 admin/src/main/resources/bgimages/b.jpg create mode 100644 admin/src/main/resources/bgimages/c.jpg create mode 100644 admin/src/main/resources/bgimages/d.jpg create mode 100644 admin/src/main/resources/bgimages/e.jpg create mode 100644 admin/src/main/resources/bgimages/g.jpg create mode 100644 admin/src/main/resources/bgimages/h.jpg create mode 100644 admin/src/main/resources/bgimages/i.jpg create mode 100644 admin/src/main/resources/bgimages/j.jpg create mode 100644 admin/src/main/resources/logback-spring.xml create mode 100644 pom.xml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..41208ee --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.{adoc,bat,groovy,html,java,js,jsp,kt,kts,md,properties,py,rb,sh,sql,svg,txt,xml,xsd}] +charset = utf-8 + +[*.{groovy,java,kt,kts,xml,xsd}] +indent_style = tab +indent_size = 4 +continuation_indent_size = 8 diff --git a/.springjavaformatconfig b/.springjavaformatconfig new file mode 100644 index 0000000..1264378 --- /dev/null +++ b/.springjavaformatconfig @@ -0,0 +1 @@ +java-baseline=8 \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..adc5021 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Hccake + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..48aa96f --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# ballcat-boot + +此项目是 Ballcat 单体应用的模板项目。 + +用户可以基于此模板项目进行业务的定制开发。 \ No newline at end of file diff --git a/ad-distribute-admin/admin-core/pom.xml b/ad-distribute-admin/admin-core/pom.xml new file mode 100644 index 0000000..55f7303 --- /dev/null +++ b/ad-distribute-admin/admin-core/pom.xml @@ -0,0 +1,47 @@ + + + + ad-distribute-admin + com.baiye + 1.1.0 + + 4.0.0 + admin-core + + + + + com.baomidou + mybatis-plus-boot-starter + + + + com.baiye + common-desensitize + 1.1.0 + + + com.baiye + common-model + 1.1.0 + + + + com.baiye + security-oauth2-authorization-server + compile + 1.1.0 + + + com.baiye + security-oauth2-resource-server + 1.1.0 + + + com.baiye + system-controller + 1.1.0 + + + diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/UpmsAutoConfiguration.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/UpmsAutoConfiguration.java new file mode 100644 index 0000000..43bb872 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/UpmsAutoConfiguration.java @@ -0,0 +1,108 @@ +package com.hccake.ballcat.admin.upms; + +//import com.hccake.ballcat.admin.upms.log.LogConfiguration; +import com.hccake.ballcat.system.authentication.BallcatOAuth2TokenResponseEnhancer; +import com.hccake.ballcat.system.authentication.DefaultUserInfoCoordinatorImpl; +import com.hccake.ballcat.system.authentication.SysUserDetailsServiceImpl; +import com.hccake.ballcat.system.authentication.UserInfoCoordinator; +import com.hccake.ballcat.system.properties.SystemProperties; +import com.hccake.ballcat.system.service.SysUserService; +import org.ballcat.security.properties.SecurityProperties; +import org.ballcat.springsecurity.oauth2.server.authorization.web.authentication.OAuth2TokenResponseEnhancer; +import org.ballcat.springsecurity.oauth2.server.resource.introspection.SpringAuthorizationServerSharedStoredOpaqueTokenIntrospector; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; +import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; +import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector; + +/** + * @author Hccake 2020/5/25 21:01 + */ +@EnableAsync +@AutoConfiguration +@MapperScan("com.hccake.ballcat.**.mapper") +// @ComponentScan({ "com.hccake.ballcat.admin.upms", "com.hccake.ballcat.system", +// "com.hccake.ballcat.log", +// "com.hccake.ballcat.file", "com.hccake.ballcat.notify" }) +@ComponentScan({ "com.hccake.ballcat.admin.upms", "com.hccake.ballcat.system", "com.hccake.ballcat.file" }) +@EnableConfigurationProperties({ SystemProperties.class, SecurityProperties.class }) +// @Import(LogConfiguration.class) +public class UpmsAutoConfiguration { + + /** + * 用户详情处理类 + * + * @author hccake + */ + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass(SysUserService.class) + @ConditionalOnMissingBean(UserDetailsService.class) + static class UserDetailsServiceConfiguration { + + /** + * 用户详情处理类 + * @return SysUserDetailsServiceImpl + */ + @Bean + @ConditionalOnMissingBean + public UserDetailsService userDetailsService(SysUserService sysUserService, + UserInfoCoordinator userInfoCoordinator) { + return new SysUserDetailsServiceImpl(sysUserService, userInfoCoordinator); + } + + /** + * 用户信息协调者 + * @return UserInfoCoordinator + */ + @Bean + @ConditionalOnMissingBean + public UserInfoCoordinator userInfoCoordinator() { + return new DefaultUserInfoCoordinatorImpl(); + } + + } + + /** + * 新版本 spring-security-oauth2-authorization-server 使用配置类 + */ + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass(OAuth2Authorization.class) + static class SpringOAuth2AuthorizationServerConfiguration { + + /** + * token 端点响应增强,追加一些自定义信息 + * @return TokenEnhancer Token增强处理器 + */ + @Bean + @ConditionalOnMissingBean + public OAuth2TokenResponseEnhancer oAuth2TokenResponseEnhancer() { + return new BallcatOAuth2TokenResponseEnhancer(); + } + + /** + * 当资源服务器和授权服务器的 token 共享存储时,直接使用 OAuth2AuthorizationService 读取 token 信息 + * @return SpringAuthorizationServerSharedStoredOpaqueTokenIntrospector + */ + @Bean + @ConditionalOnMissingBean + @ConditionalOnProperty(prefix = "ballcat.security.oauth2.resourceserver", name = "shared-stored-token", + havingValue = "true", matchIfMissing = true) + public OpaqueTokenIntrospector sharedStoredOpaqueTokenIntrospector( + OAuth2AuthorizationService authorizationService) { + return new SpringAuthorizationServerSharedStoredOpaqueTokenIntrospector(authorizationService); + } + + } + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/FillMetaObjectHandle.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/FillMetaObjectHandle.java new file mode 100644 index 0000000..56fbb3a --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/FillMetaObjectHandle.java @@ -0,0 +1,42 @@ +package com.hccake.ballcat.admin.upms.config.mybatis; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.hccake.ballcat.common.core.constant.GlobalConstants; +import com.hccake.ballcat.common.security.userdetails.User; +import com.hccake.ballcat.common.security.util.SecurityUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; + +import java.time.LocalDateTime; + +/** + * @author Hccake 2019/7/26 14:41 + */ +@Slf4j +public class FillMetaObjectHandle implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + // 逻辑删除标识 + this.strictInsertFill(metaObject, "deleted", Long.class, GlobalConstants.NOT_DELETED_FLAG); + // 创建时间 + this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); + // 创建人 + User user = SecurityUtils.getUser(); + if (user != null) { + this.strictInsertFill(metaObject, "createBy", Long.class, user.getUserId()); + } + } + + @Override + public void updateFill(MetaObject metaObject) { + // 修改时间 + this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + // 修改人 + User user = SecurityUtils.getUser(); + if (user != null) { + this.strictUpdateFill(metaObject, "updateBy", Long.class, user.getUserId()); + } + } + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/MybatisPlusConfig.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/MybatisPlusConfig.java new file mode 100644 index 0000000..c738e00 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/mybatis/MybatisPlusConfig.java @@ -0,0 +1,62 @@ +package com.hccake.ballcat.admin.upms.config.mybatis; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.injector.ISqlInjector; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.hccake.extend.mybatis.plus.injector.CustomSqlInjector; +import com.hccake.extend.mybatis.plus.methods.InsertBatchSomeColumnByCollection; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author hccake + * @date 2020/04/19 默认配置MybatisPlus分页插件,通过conditional注解达到覆盖效用 + */ +@Configuration +public class MybatisPlusConfig { + + /** + * MybatisPlusInterceptor 插件,默认提供分页插件
+ * 如需其他MP内置插件,则需自定义该Bean + * @return MybatisPlusInterceptor + */ + @Bean + @ConditionalOnMissingBean(MybatisPlusInterceptor.class) + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } + + /** + * 自动填充处理类 + * @return FillMetaObjectHandle + */ + @Bean + @ConditionalOnMissingBean(MetaObjectHandler.class) + public MetaObjectHandler fillMetaObjectHandle() { + return new FillMetaObjectHandle(); + } + + /** + * 自定义批量插入方法注入 + * @return ISqlInjector + */ + @Bean + @ConditionalOnMissingBean(ISqlInjector.class) + public ISqlInjector customSqlInjector() { + List list = new ArrayList<>(); + // 对于只在更新时进行填充的字段不做插入处理 + list.add(new InsertBatchSomeColumnByCollection(t -> t.getFieldFill() != FieldFill.UPDATE)); + return new CustomSqlInjector(list); + } + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/MdcTaskDecorator.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/MdcTaskDecorator.java new file mode 100644 index 0000000..827ac9e --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/MdcTaskDecorator.java @@ -0,0 +1,34 @@ +package com.hccake.ballcat.admin.upms.config.task; + +import cn.hutool.core.map.MapUtil; +import org.slf4j.MDC; +import org.springframework.core.task.TaskDecorator; + +import java.util.Map; + +/** + * 使async异步任务支持traceId + * + * @author huyuanzhi 2021-11-06 23:14:27 + */ +public class MdcTaskDecorator implements TaskDecorator { + + @Override + public Runnable decorate(Runnable runnable) { + final Map copyOfContextMap = MDC.getCopyOfContextMap(); + return () -> { + if (MapUtil.isNotEmpty(copyOfContextMap)) { + // 现在:@Async线程上下文! 恢复Web线程上下文的MDC数据 + MDC.setContextMap(copyOfContextMap); + } + + try { + runnable.run(); + } + finally { + MDC.clear(); + } + }; + } + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/TaskExecutionConfiguration.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/TaskExecutionConfiguration.java new file mode 100644 index 0000000..9126a58 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/config/task/TaskExecutionConfiguration.java @@ -0,0 +1,35 @@ +package com.hccake.ballcat.admin.upms.config.task; + +import org.springframework.boot.task.TaskExecutorCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池构建,原本的线程池的拒绝策略为直接抛出异常,不太友好 + * + * @see org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration + * @author hccake + */ +@Configuration(proxyBeanMethods = false) +public class TaskExecutionConfiguration { + + /** + * 修改 springboot 默认配置的 taskExecutor 的拒绝策略为使用当前线程执行 + * @return TaskExecutorCustomizer + */ + @Bean + public TaskExecutorCustomizer taskExecutorCustomizer() { + // AbortPolicy: 直接抛出java.util.concurrent.RejectedExecutionException异常 + // CallerRunsPolicy: 主线程直接执行该任务,执行完之后尝试添加下一个任务到线程池中,可以有效降低向线程池内添加任务的速度 + // DiscardOldestPolicy: 抛弃旧的任务、暂不支持;会导致被丢弃的任务无法再次被执行 + // DiscardPolicy: 抛弃当前任务、暂不支持;会导致被丢弃的任务无法再次被执行 + // 这里使用主线程直接执行该任务 + return (taskExecutor -> { + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.setTaskDecorator(new MdcTaskDecorator()); + }); + } + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LogConfiguration.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LogConfiguration.java new file mode 100644 index 0000000..806f551 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LogConfiguration.java @@ -0,0 +1,78 @@ +// package com.hccake.ballcat.admin.upms.log; +// +// import com.hccake.ballcat.common.log.access.handler.AccessLogHandler; +// import com.hccake.ballcat.common.log.operation.handler.OperationLogHandler; +// import com.hccake.ballcat.log.handler.CustomAccessLogHandler; +// import com.hccake.ballcat.log.handler.CustomOperationLogHandler; +// import com.hccake.ballcat.log.model.entity.AccessLog; +// import com.hccake.ballcat.log.model.entity.OperationLog; +// import com.hccake.ballcat.log.service.AccessLogService; +// import com.hccake.ballcat.log.service.LoginLogService; +// import com.hccake.ballcat.log.service.OperationLogService; +// import com.hccake.ballcat.log.thread.AccessLogSaveThread; +// import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +// import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +// import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +// import org.springframework.context.annotation.Bean; +// import org.springframework.context.annotation.Configuration; +// import +// org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer; +// import +// org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings; +// +/// ** +// * @author hccake +// */ +// @Configuration(proxyBeanMethods = false) +// @ConditionalOnClass(LoginLogService.class) +// public class LogConfiguration { +// +// /** +// * 访问日志保存 +// * @param accessLogService 访问日志Service +// * @return CustomAccessLogHandler +// */ +// @Bean +// @ConditionalOnBean(AccessLogService.class) +// @ConditionalOnMissingBean(AccessLogHandler.class) +// public AccessLogHandler customAccessLogHandler(AccessLogService +// accessLogService) { +// return new CustomAccessLogHandler(new AccessLogSaveThread(accessLogService)); +// } +// +// /** +// * 操作日志处理器 +// * @param operationLogService 操作日志Service +// * @return CustomOperationLogHandler +// */ +// @Bean +// @ConditionalOnBean(OperationLogService.class) +// @ConditionalOnMissingBean(OperationLogHandler.class) +// public OperationLogHandler customOperationLogHandler(OperationLogService +// operationLogService) { +// return new CustomOperationLogHandler(operationLogService); +// } +// +// @ConditionalOnClass(OAuth2AuthorizationServerConfigurer.class) +// @ConditionalOnBean(LoginLogService.class) +// @ConditionalOnMissingBean(LoginLogHandler.class) +// @Configuration(proxyBeanMethods = false) +// static class SpringAuthorizationServerLoginLogConfiguration { +// +// /** +// * Spring Authorization Server 的登录日志处理,监听登录事件记录登录登出 +// * @param loginLogService 操作日志Service +// * @param authorizationServerSettings 授权服务器设置 +// * @return SpringAuthorizationServerLoginLogHandler +// */ +// @Bean +// public LoginLogHandler springAuthorizationServerLoginLogHandler(LoginLogService +// loginLogService, +// AuthorizationServerSettings authorizationServerSettings) { +// return new SpringAuthorizationServerLoginLogHandler(loginLogService, +// authorizationServerSettings); +// } +// +// } +// +// } \ No newline at end of file diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LoginLogHandler.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LoginLogHandler.java new file mode 100644 index 0000000..6f089e9 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/LoginLogHandler.java @@ -0,0 +1,8 @@ +package com.hccake.ballcat.admin.upms.log; + +/** + * @author hccake + */ +public interface LoginLogHandler { + +} diff --git a/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/SpringAuthorizationServerLoginLogHandler.java b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/SpringAuthorizationServerLoginLogHandler.java new file mode 100644 index 0000000..dd3cd6e --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/java/com/hccake/ballcat/admin/upms/log/SpringAuthorizationServerLoginLogHandler.java @@ -0,0 +1,140 @@ +// package com.hccake.ballcat.admin.upms.log; +// +// import com.hccake.ballcat.common.core.util.WebUtils; +//// import com.hccake.ballcat.common.log.operation.enums.LogStatusEnum; +// import com.hccake.ballcat.common.security.util.SecurityUtils; +//// import com.hccake.ballcat.log.enums.LoginEventTypeEnum; +//// import com.hccake.ballcat.log.model.entity.LoginLog; +//// import com.hccake.ballcat.log.service.LoginLogService; +// import lombok.RequiredArgsConstructor; +// import +// org.ballcat.springsecurity.oauth2.server.authorization.authentication.OAuth2TokenRevocationAuthenticationToken; +// import org.springframework.context.event.EventListener; +// import org.springframework.security.authentication.ProviderNotFoundException; +// import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +// import +// org.springframework.security.authentication.event.AbstractAuthenticationFailureEvent; +// import org.springframework.security.authentication.event.AuthenticationSuccessEvent; +// import org.springframework.security.authentication.event.LogoutSuccessEvent; +// import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; +// import +// org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken; +// import +// org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationGrantAuthenticationToken; +// import +// org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings; +// +// import javax.servlet.http.HttpServletRequest; +// +//// import static com.hccake.ballcat.log.handler.LoginLogUtils.prodLoginLog; +// +/// ** +// * spring 授权服务器的登录日志处理器 +// * +// * @author hccake +// */ +// @RequiredArgsConstructor +// public class SpringAuthorizationServerLoginLogHandler implements LoginLogHandler { +// +//// private final LoginLogService loginLogService; +// +// private final AuthorizationServerSettings authorizationServerSettings; +// +// /** +// * 登录成功事件监听 记录用户登录日志 +// * @param event 登录成功 event +// */ +// @EventListener(AuthenticationSuccessEvent.class) +// public void onAuthenticationSuccessEvent(AuthenticationSuccessEvent event) { +// Object source = event.getSource(); +// String username = null; +// +// String tokenEndpoint = authorizationServerSettings.getTokenEndpoint(); +// HttpServletRequest request = WebUtils.getRequest(); +// boolean isOauth2LoginRequest = request.getRequestURI().equals(tokenEndpoint); +// +// // Oauth2登录 和表单登录 处理分开 +// if (isOauth2LoginRequest && source instanceof OAuth2AccessTokenAuthenticationToken) { +// username = SecurityUtils.getAuthentication().getName(); +// } +// else if (!isOauth2LoginRequest && source instanceof +// UsernamePasswordAuthenticationToken) { +// username = ((UsernamePasswordAuthenticationToken) source).getName(); +// } +// +//// if (username != null) { +//// LoginLog loginLog = prodLoginLog(username).setMsg("登录成功") +//// .setStatus(LogStatusEnum.SUCCESS.getValue()) +//// .setEventType(LoginEventTypeEnum.LOGIN.getValue()); +//// loginLogService.save(loginLog); +//// } +// } +// +// /** +// * 监听鉴权失败事件,记录登录失败日志 +// * @param event the event +// */ +// @EventListener(AbstractAuthenticationFailureEvent.class) +// public void onAuthenticationFailureEvent(AbstractAuthenticationFailureEvent event) { +// if (event.getException().getClass().isAssignableFrom(ProviderNotFoundException.class)) +// { +// return; +// } +// +// Object source = event.getSource(); +// String username = null; +// +// String tokenEndpoint = authorizationServerSettings.getTokenEndpoint(); +// HttpServletRequest request = WebUtils.getRequest(); +// boolean isOauth2LoginRequest = request.getRequestURI().equals(tokenEndpoint); +// +// // Oauth2登录 和表单登录 处理分开 +// if (isOauth2LoginRequest && source instanceof +// OAuth2AuthorizationGrantAuthenticationToken) { +// username = ((OAuth2AuthorizationGrantAuthenticationToken) source).getName(); +// } +// else if (!isOauth2LoginRequest && source instanceof +// UsernamePasswordAuthenticationToken) { +// username = ((UsernamePasswordAuthenticationToken) source).getName(); +// } +// +//// if (username != null) { +//// LoginLog loginLog = prodLoginLog(username).setMsg(event.getException().getMessage()) +//// .setEventType(LoginEventTypeEnum.LOGIN.getValue()) +//// .setStatus(LogStatusEnum.FAIL.getValue()); +//// loginLogService.save(loginLog); +//// } +// } +// +// /** +// * 登出成功事件监听 +// * @param event the event +// */ +// @EventListener(LogoutSuccessEvent.class) +// public void onLogoutSuccessEvent(LogoutSuccessEvent event) { +// Object source = event.getSource(); +// String username = null; +// +// String tokenRevocationEndpoint = +// authorizationServerSettings.getTokenRevocationEndpoint(); +// HttpServletRequest request = WebUtils.getRequest(); +// boolean isOauth2Login = request.getRequestURI().equals(tokenRevocationEndpoint); +// +// // Oauth2撤销令牌 和表单登出 处理分开 +// if (isOauth2Login && source instanceof OAuth2TokenRevocationAuthenticationToken) { +// OAuth2Authorization authorization = ((OAuth2TokenRevocationAuthenticationToken) +// source).getAuthorization(); +// username = authorization.getPrincipalName(); +// } +// else if (!isOauth2Login && source instanceof UsernamePasswordAuthenticationToken) { +// username = ((UsernamePasswordAuthenticationToken) source).getName(); +// } +// +//// if (username != null) { +//// LoginLog loginLog = prodLoginLog(username).setMsg("登出成功") +//// .setEventType(LoginEventTypeEnum.LOGOUT.getValue()); +//// loginLogService.save(loginLog); +//// } +// } +// +// } diff --git a/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring.factories b/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..9b59bf2 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.hccake.ballcat.admin.upms.UpmsAutoConfiguration \ No newline at end of file diff --git a/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..1f721c6 --- /dev/null +++ b/ad-distribute-admin/admin-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.hccake.ballcat.admin.upms.UpmsAutoConfiguration \ No newline at end of file diff --git a/ad-distribute-admin/admin-websocket/pom.xml b/ad-distribute-admin/admin-websocket/pom.xml new file mode 100644 index 0000000..e124ed1 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/pom.xml @@ -0,0 +1,24 @@ + + + + ad-distribute-admin + com.baiye + 1.1.0 + + 4.0.0 + admin-websocket + + + + com.baiye + admin-core + 1.1.0 + + + com.baiye + ad-distribute-starter-websocket + 1.1.0 + + + diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/AdminWebSocketAutoConfiguration.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/AdminWebSocketAutoConfiguration.java new file mode 100644 index 0000000..48aa576 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/AdminWebSocketAutoConfiguration.java @@ -0,0 +1,34 @@ +package com.hccake.ballcat.admin.websocket; + +import com.hccake.ballcat.admin.websocket.component.UserAttributeHandshakeInterceptor; +import com.hccake.ballcat.admin.websocket.component.UserSessionKeyGenerator; +import com.hccake.ballcat.common.websocket.session.SessionKeyGenerator; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.web.socket.server.HandshakeInterceptor; + +/** + * @author Hccake 2021/1/5 + * @version 1.0 + */ +@Import({ SystemWebsocketEventListenerConfiguration.class }) +@Configuration +@RequiredArgsConstructor +public class AdminWebSocketAutoConfiguration { + + @Bean + @ConditionalOnMissingBean(UserAttributeHandshakeInterceptor.class) + public HandshakeInterceptor authenticationHandshakeInterceptor() { + return new UserAttributeHandshakeInterceptor(); + } + + @Bean + @ConditionalOnMissingBean(SessionKeyGenerator.class) + public SessionKeyGenerator userSessionKeyGenerator() { + return new UserSessionKeyGenerator(); + } + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/NotifyWebsocketEventListenerConfiguration.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/NotifyWebsocketEventListenerConfiguration.java new file mode 100644 index 0000000..611e6f5 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/NotifyWebsocketEventListenerConfiguration.java @@ -0,0 +1,27 @@ +// package com.hccake.ballcat.admin.websocket; +// +// import com.hccake.ballcat.admin.websocket.listener.NotifyWebsocketEventListener; +// import com.hccake.ballcat.common.websocket.distribute.MessageDistributor; +// import com.hccake.ballcat.notify.handler.NotifyInfoDelegateHandler; +// import com.hccake.ballcat.notify.model.domain.NotifyInfo; +// import com.hccake.ballcat.notify.service.UserAnnouncementService; +// import lombok.RequiredArgsConstructor; +// import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +// import org.springframework.context.annotation.Bean; +// import org.springframework.context.annotation.Configuration; +// +// @RequiredArgsConstructor +// @ConditionalOnClass({ NotifyWebsocketEventListener.class, UserAnnouncementService.class +// }) +// @Configuration(proxyBeanMethods = false) +// public class NotifyWebsocketEventListenerConfiguration { +// +// private final MessageDistributor messageDistributor; +// +// @Bean +// public NotifyWebsocketEventListener notifyWebsocketEventListener( +// NotifyInfoDelegateHandler notifyInfoDelegateHandler) { +// return new NotifyWebsocketEventListener(messageDistributor, notifyInfoDelegateHandler); +// } +// +// } diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/SystemWebsocketEventListenerConfiguration.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/SystemWebsocketEventListenerConfiguration.java new file mode 100644 index 0000000..83411ef --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/SystemWebsocketEventListenerConfiguration.java @@ -0,0 +1,25 @@ +package com.hccake.ballcat.admin.websocket; + +import com.hccake.ballcat.admin.websocket.listener.SystemWebsocketEventListener; +import com.hccake.ballcat.common.websocket.distribute.MessageDistributor; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Hccake + */ +@RequiredArgsConstructor +@ConditionalOnClass(SystemWebsocketEventListener.class) +@Configuration(proxyBeanMethods = false) +public class SystemWebsocketEventListenerConfiguration { + + private final MessageDistributor messageDistributor; + + @Bean + public SystemWebsocketEventListener systemWebsocketEventListener() { + return new SystemWebsocketEventListener(messageDistributor); + } + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserAttributeHandshakeInterceptor.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserAttributeHandshakeInterceptor.java new file mode 100644 index 0000000..25aebf4 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserAttributeHandshakeInterceptor.java @@ -0,0 +1,65 @@ +package com.hccake.ballcat.admin.websocket.component; + +import com.hccake.ballcat.admin.websocket.constant.AdminWebSocketConstants; +import com.hccake.ballcat.common.security.userdetails.User; +import com.hccake.ballcat.common.security.util.SecurityUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import java.util.Map; + +/** + * WebSocket 握手拦截器 在握手时记录下当前 session 对应的用户Id和token信息 + * + * @author Hccake 2021/1/4 + * @version 1.0 + */ +@RequiredArgsConstructor +public class UserAttributeHandshakeInterceptor implements HandshakeInterceptor { + + /** + * Invoked before the handshake is processed. + * @param request the current request + * @param response the current response + * @param wsHandler the target WebSocket handler + * @param attributes the attributes from the HTTP handshake to associate with the + * WebSocket session; the provided attributes are copied, the original map is not + * used. + * @return whether to proceed with the handshake ({@code true}) or abort + * ({@code false}) + */ + @Override + public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, + Map attributes) { + String accessToken = null; + // 获得 accessToken + if (request instanceof ServletServerHttpRequest) { + ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request; + accessToken = serverRequest.getServletRequest().getParameter(AdminWebSocketConstants.TOKEN_ATTR_NAME); + } + // 由于 WebSocket 握手是由 http 升级的,携带 token 已经被 Security 拦截验证了,所以可以直接获取到用户 + User user = SecurityUtils.getUser(); + attributes.put(AdminWebSocketConstants.TOKEN_ATTR_NAME, accessToken); + attributes.put(AdminWebSocketConstants.USER_KEY_ATTR_NAME, user.getUserId()); + return true; + } + + /** + * Invoked after the handshake is done. The response status and headers indicate the + * results of the handshake, i.e. whether it was successful or not. + * @param request the current request + * @param response the current response + * @param wsHandler the target WebSocket handler + * @param exception an exception raised during the handshake, or {@code null} if none + */ + @Override + public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, + Exception exception) { + // doNothing + } + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserSessionKeyGenerator.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserSessionKeyGenerator.java new file mode 100644 index 0000000..5aeab1f --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/component/UserSessionKeyGenerator.java @@ -0,0 +1,32 @@ +package com.hccake.ballcat.admin.websocket.component; + +import com.hccake.ballcat.admin.websocket.constant.AdminWebSocketConstants; +import com.hccake.ballcat.common.websocket.session.SessionKeyGenerator; +import lombok.RequiredArgsConstructor; +import org.springframework.web.socket.WebSocketSession; + +/** + *

+ * 用户 WebSocketSession 唯一标识生成器 + *

+ * + * 此类主要使用当前 session 对应用户的唯一标识做为 session 的唯一标识 方便系统快速通过用户获取对应 session + * + * @author Hccake 2021/1/5 + * @version 1.0 + */ +@RequiredArgsConstructor +public class UserSessionKeyGenerator implements SessionKeyGenerator { + + /** + * 获取当前session的唯一标识,用户的唯一标识已经通过 + * @see UserAttributeHandshakeInterceptor 存储在当前 session 的属性中 + * @param webSocketSession 当前session + * @return session唯一标识 + */ + @Override + public Object sessionKey(WebSocketSession webSocketSession) { + return webSocketSession.getAttributes().get(AdminWebSocketConstants.USER_KEY_ATTR_NAME); + } + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/constant/AdminWebSocketConstants.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/constant/AdminWebSocketConstants.java new file mode 100644 index 0000000..680b2a2 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/constant/AdminWebSocketConstants.java @@ -0,0 +1,22 @@ +package com.hccake.ballcat.admin.websocket.constant; + +/** + * @author Hccake 2021/1/5 + * @version 1.0 + */ +public final class AdminWebSocketConstants { + + private AdminWebSocketConstants() { + } + + /** + * 存储在 WebSocketSession Attribute 中的 token 属性名 + */ + public static final String TOKEN_ATTR_NAME = "access_token"; + + /** + * 存储在 WebSocketSession Attribute 中的 用户唯一标识 属性名 + */ + public static final String USER_KEY_ATTR_NAME = "userId"; + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/NotifyWebsocketEventListener.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/NotifyWebsocketEventListener.java new file mode 100644 index 0000000..34c71a1 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/NotifyWebsocketEventListener.java @@ -0,0 +1,60 @@ +// package com.hccake.ballcat.admin.websocket.listener; +// +// import com.hccake.ballcat.common.util.JsonUtils; +// import com.hccake.ballcat.common.websocket.distribute.MessageDO; +// import com.hccake.ballcat.common.websocket.distribute.MessageDistributor; +// import com.hccake.ballcat.notify.event.AnnouncementCloseEvent; +// import com.hccake.ballcat.notify.event.StationNotifyPushEvent; +// import com.hccake.ballcat.notify.handler.NotifyInfoDelegateHandler; +// import com.hccake.ballcat.notify.model.domain.NotifyInfo; +// import com.hccake.ballcat.admin.websocket.message.AnnouncementCloseMessage; +// import com.hccake.ballcat.system.model.entity.SysUser; +// import lombok.RequiredArgsConstructor; +// import lombok.extern.slf4j.Slf4j; +// import org.springframework.context.event.EventListener; +// import org.springframework.scheduling.annotation.Async; +// +// import java.util.List; +// +/// ** +// * @author Hccake 2021/1/5 +// * @version 1.0 +// */ +// @Slf4j +// @RequiredArgsConstructor +// public class NotifyWebsocketEventListener { +// +// private final MessageDistributor messageDistributor; +// +// private final NotifyInfoDelegateHandler notifyInfoDelegateHandler; +// +// /** +// * 公告关闭事件监听 +// * @param event the AnnouncementCloseEvent +// */ +// @Async +// @EventListener(AnnouncementCloseEvent.class) +// public void onAnnouncementCloseEvent(AnnouncementCloseEvent event) { +// // 构建公告关闭的消息体 +// AnnouncementCloseMessage message = new AnnouncementCloseMessage(); +// message.setId(event.getId()); +// String msg = JsonUtils.toJson(message); +// +// // 广播公告关闭信息 +// MessageDO messageDO = new MessageDO().setMessageText(msg).setNeedBroadcast(true); +// messageDistributor.distribute(messageDO); +// } +// +// /** +// * 站内通知推送事件 +// * @param event the StationNotifyPushEvent +// */ +// @Async +// @EventListener(StationNotifyPushEvent.class) +// public void onAnnouncementPublishEvent(StationNotifyPushEvent event) { +// NotifyInfo notifyInfo = event.getNotifyInfo(); +// List userList = event.getUserList(); +// notifyInfoDelegateHandler.handle(userList, notifyInfo); +// } +// +// } diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/SystemWebsocketEventListener.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/SystemWebsocketEventListener.java new file mode 100644 index 0000000..ac7b4ea --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/listener/SystemWebsocketEventListener.java @@ -0,0 +1,34 @@ +package com.hccake.ballcat.admin.websocket.listener; + +import com.hccake.ballcat.common.util.JsonUtils; +import com.hccake.ballcat.common.websocket.distribute.MessageDO; +import com.hccake.ballcat.common.websocket.distribute.MessageDistributor; +import com.hccake.ballcat.system.event.DictChangeEvent; +import com.hccake.ballcat.admin.websocket.message.DictChangeMessage; +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; + +@RequiredArgsConstructor +public class SystemWebsocketEventListener { + + private final MessageDistributor messageDistributor; + + /** + * 字典修改事件监听 + * @param event the `DictChangeEvent` + */ + @Async + @EventListener(DictChangeEvent.class) + public void onDictChangeEvent(DictChangeEvent event) { + // 构建字典修改的消息体 + DictChangeMessage dictChangeMessage = new DictChangeMessage(); + dictChangeMessage.setDictCode(event.getDictCode()); + String msg = JsonUtils.toJson(dictChangeMessage); + + // 广播修改信息 + MessageDO messageDO = new MessageDO().setMessageText(msg).setNeedBroadcast(true); + messageDistributor.distribute(messageDO); + } + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/AnnouncementCloseMessage.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/AnnouncementCloseMessage.java new file mode 100644 index 0000000..aa5b1b7 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/AnnouncementCloseMessage.java @@ -0,0 +1,24 @@ +package com.hccake.ballcat.admin.websocket.message; + +import com.hccake.ballcat.common.websocket.message.JsonWebSocketMessage; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Hccake 2021/1/7 + * @version 1.0 + */ +@Getter +@Setter +public class AnnouncementCloseMessage extends JsonWebSocketMessage { + + public AnnouncementCloseMessage() { + super("announcement-close"); + } + + /** + * ID + */ + private Long id; + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/DictChangeMessage.java b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/DictChangeMessage.java new file mode 100644 index 0000000..41b7a74 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/hccake/ballcat/admin/websocket/message/DictChangeMessage.java @@ -0,0 +1,26 @@ +package com.hccake.ballcat.admin.websocket.message; + +import com.hccake.ballcat.common.websocket.message.JsonWebSocketMessage; +import lombok.Getter; +import lombok.Setter; + +/** + * 字典修改消息 + * + * @author Hccake 2021/1/5 + * @version 1.0 + */ +@Getter +@Setter +public class DictChangeMessage extends JsonWebSocketMessage { + + public DictChangeMessage() { + super("dict-change"); + } + + /** + * 改动的字典标识 + */ + private String dictCode; + +} diff --git a/ad-distribute-admin/admin-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ad-distribute-admin/admin-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..5a8d836 --- /dev/null +++ b/ad-distribute-admin/admin-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.hccake.ballcat.admin.websocket.AdminWebSocketAutoConfiguration \ No newline at end of file diff --git a/ad-distribute-admin/pom.xml b/ad-distribute-admin/pom.xml new file mode 100644 index 0000000..7637c4c --- /dev/null +++ b/ad-distribute-admin/pom.xml @@ -0,0 +1,34 @@ + + + + ad-distribute + com.baiye + 1.1.0 + + 4.0.0 + ad-distribute-admin + pom + + + admin-core + admin-websocket + + + + install + + + org.apache.maven.plugins + maven-clean-plugin + 3.1.0 + + + clean + none + + + + + + diff --git a/ad-distribute-common/common-core/pom.xml b/ad-distribute-common/common-core/pom.xml new file mode 100644 index 0000000..5a6cf5b --- /dev/null +++ b/ad-distribute-common/common-core/pom.xml @@ -0,0 +1,76 @@ + + + + ad-distribute-common + com.baiye + 1.1.0 + + 4.0.0 + common-core + jar + + + + + cn.hutool + hutool-core + + + cn.hutool + hutool-crypto + + + cn.hutool + hutool-http + + + cn.hutool + hutool-poi + + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + com.baiye + common-model + 1.1.0 + + + com.baiye + common-util + 1.1.0 + + + jakarta.servlet + jakarta.servlet-api + compile + + + org.glassfish + jakarta.el + 3.0.3 + test + + + + org.slf4j + slf4j-api + + + org.springframework + spring-context + + + + org.springframework + spring-web + + + diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/compose/ContextComponent.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/compose/ContextComponent.java new file mode 100644 index 0000000..4752c6b --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/compose/ContextComponent.java @@ -0,0 +1,26 @@ +package com.hccake.ballcat.common.core.compose; + +/** + * 上下文组件, 在接入对应的上下文时(如: spring 的 bean) 便于在 开始和结束时执行对应的方法 + *

+ * 默认自动接入spring + *

+ *

+ * 一般用于线程类实例达成接入到对应的上下文环境时自动开启和结束线程 + *

+ * + * @author lingting 2022/10/15 17:55 + */ +public interface ContextComponent { + + /** + * 上下文准备好之后调用, 内部做一些线程的初始化以及线程启动 + */ + void onApplicationStart(); + + /** + * 在上下文销毁前调用, 内部做线程停止和数据缓存相关 + */ + void onApplicationStop(); + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/GlobalConstants.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/GlobalConstants.java new file mode 100644 index 0000000..e52eeaf --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/GlobalConstants.java @@ -0,0 +1,32 @@ +package com.hccake.ballcat.common.core.constant; + +/** + * @author Hccake 2020/6/9 17:17 + */ +public final class GlobalConstants { + + private GlobalConstants() { + } + + /** + * 未被逻辑删除的标识,即有效数据标识 逻辑删除标识,普通情况下可以使用 1 标识删除,0 标识存活 但在有唯一索引的情况下,会导致索引冲突,所以用 0 标识存活, + * 已删除数据记录为删除时间戳 + */ + public static final Long NOT_DELETED_FLAG = 0L; + + /** + * 生产环境 + */ + public static final String ENV_PROD = "prod"; + + /** + * 树根节点ID + */ + public static final Integer TREE_ROOT_ID = 0; + + /** + * 树根节点ID + */ + public static final Long TREE_ROOT_ID_LONG = Long.valueOf(TREE_ROOT_ID); + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HeaderConstants.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HeaderConstants.java new file mode 100644 index 0000000..dac22d9 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HeaderConstants.java @@ -0,0 +1,28 @@ +package com.hccake.ballcat.common.core.constant; + +/** + * @author Hccake + * @version 1.0 + * @date 2019/10/31 11:55 + */ +public final class HeaderConstants { + + private HeaderConstants() { + } + + /** + * 请求时间戳 + */ + public static final String REQ_TIME = "reqTime"; + + /** + * 请求sign + */ + public static final String SIGN = "sign"; + + /** + * SECRET_ID + */ + public static final String SECRET_ID = "secretId"; + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HttpsConstants.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HttpsConstants.java new file mode 100644 index 0000000..06682d5 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/HttpsConstants.java @@ -0,0 +1,100 @@ +package com.hccake.ballcat.common.core.constant; + +import com.hccake.ballcat.common.core.https.CompatibleSSLFactory; +import com.hccake.ballcat.common.core.https.SSLSocketFactoryInitException; +import lombok.experimental.UtilityClass; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +/** + * @author lingting + */ +@UtilityClass +@SuppressWarnings("java:S4830") +public class HttpsConstants { + + public static final String SSL = "SSL"; + + public static final String SSL_V2 = "SSLv2"; + + public static final String SSL_V3 = "SSLv3"; + + public static final String TLS = "TLS"; + + public static final String TLS_V1 = "TLSv1"; + + public static final String TLS_V11 = "TLSv1.1"; + + public static final String TLS_V12 = "TLSv1.2"; + + public static final String DALVIK = "dalvik"; + + public static final String VM_NAME = "java.vm.name"; + + /** + * Android低版本不重置的话某些SSL访问就会失败 + */ + private static final String[] ANDROID_PROTOCOLS = { SSL_V3, TLS_V1, TLS_V11, TLS_V12 }; + + /** + * 默认信任全部的域名校验器 + */ + @SuppressWarnings("java:S5527") + public static final HostnameVerifier HOSTNAME_VERIFIER = (s, sslSession) -> true; + + public static final KeyManager[] KEY_MANAGERS = null; + + public static final X509TrustManager TRUST_MANAGER; + + public static final TrustManager[] TRUST_MANAGERS; + + static { + TRUST_MANAGER = new X509TrustManager() { + + @Override + public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + // + } + + @Override + public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + // + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + }; + TRUST_MANAGERS = new TrustManager[] { TRUST_MANAGER }; + } + + /** + * 默认的SSLSocketFactory,区分安卓 + */ + public static final SSLSocketFactory SSF; + + static { + try { + if (DALVIK.equalsIgnoreCase(System.getProperty(VM_NAME))) { + // 兼容android低版本SSL连接 + SSF = new CompatibleSSLFactory(ANDROID_PROTOCOLS); + } + else { + SSF = new CompatibleSSLFactory(); + } + } + catch (KeyManagementException | NoSuchAlgorithmException e) { + throw new SSLSocketFactoryInitException("ssf 创建失败!", e); + } + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/MDCConstants.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/MDCConstants.java new file mode 100644 index 0000000..20faf46 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/MDCConstants.java @@ -0,0 +1,19 @@ +package com.hccake.ballcat.common.core.constant; + +/** + * MDC 相关常量 + * + * @author hccake + * @since 1.3.1 + */ +public final class MDCConstants { + + private MDCConstants() { + } + + /** + * 跟踪ID,用于一次请求或执行方法时,产生的各种日志间的数据关联 + */ + public static final String TRACE_ID_KEY = "traceId"; + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/BooleanEnum.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/BooleanEnum.java new file mode 100644 index 0000000..81d5d22 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/BooleanEnum.java @@ -0,0 +1,35 @@ +package com.hccake.ballcat.common.core.constant.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Boolean 类型常量 + * + * @author Hccake 2020/4/6 21:52 + */ +@AllArgsConstructor +public enum BooleanEnum { + + /** + * 是 + */ + TRUE(true, 1), + /** + * 否 + */ + FALSE(false, 0); + + private final Boolean booleanValue; + + private final Integer intValue; + + public Boolean booleanValue() { + return booleanValue; + } + + public Integer intValue() { + return intValue; + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/ImportModeEnum.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/ImportModeEnum.java new file mode 100644 index 0000000..8e738dd --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/constant/enums/ImportModeEnum.java @@ -0,0 +1,25 @@ +package com.hccake.ballcat.common.core.constant.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 当数据以存在时的导入动作 + * + * @author Hccake + */ +@Getter +@AllArgsConstructor +public enum ImportModeEnum { + + /** + * 跳过已存在的数据 + */ + SKIP_EXISTING, + + /** + * 覆盖已存在的数据 + */ + OVERWRITE_EXISTING; + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/BusinessException.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/BusinessException.java new file mode 100644 index 0000000..bdf945d --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/BusinessException.java @@ -0,0 +1,57 @@ +package com.hccake.ballcat.common.core.exception; + +import cn.hutool.core.text.CharSequenceUtil; +import com.hccake.ballcat.common.model.result.ResultCode; +import lombok.Getter; + +/** + * 通用业务异常 + * + * @author Hccake + */ +@Getter +public class BusinessException extends RuntimeException { + + private final String message; + + private final int code; + + public BusinessException(ResultCode resultCode) { + super(resultCode.getMessage()); + this.code = resultCode.getCode(); + this.message = resultCode.getMessage(); + } + + /** + * 用于需要format返回结果的异常 + */ + public BusinessException(ResultCode resultCode, Object... args) { + this(resultCode.getCode(), CharSequenceUtil.format(resultCode.getMessage(), args)); + } + + public BusinessException(ResultCode resultCode, Throwable e) { + super(resultCode.getMessage(), e); + this.code = resultCode.getCode(); + this.message = resultCode.getMessage(); + } + + /** + * 用于需要format返回结果的异常 + */ + public BusinessException(ResultCode resultCode, Throwable e, Object... args) { + this(resultCode.getCode(), CharSequenceUtil.format(resultCode.getMessage(), args), e); + } + + public BusinessException(int code, String message) { + super(message); + this.message = message; + this.code = code; + } + + public BusinessException(int code, String message, Throwable e) { + super(message, e); + this.message = message; + this.code = code; + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/SqlCheckedException.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/SqlCheckedException.java new file mode 100644 index 0000000..3cc8d68 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/SqlCheckedException.java @@ -0,0 +1,30 @@ +package com.hccake.ballcat.common.core.exception; + +import com.hccake.ballcat.common.model.result.SystemResultCode; + +/** + * sql防注入校验异常 + * + * @author Hccake + * @version 1.0 + * @date 2019/10/19 16:52 + */ +public class SqlCheckedException extends BusinessException { + + public SqlCheckedException(SystemResultCode systemResultMsg) { + super(systemResultMsg); + } + + public SqlCheckedException(SystemResultCode systemResultMsg, Throwable e) { + super(systemResultMsg, e); + } + + public SqlCheckedException(int code, String msg) { + super(code, msg); + } + + public SqlCheckedException(int code, String msg, Throwable e) { + super(code, msg, e); + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/handler/GlobalExceptionHandler.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..675a707 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/exception/handler/GlobalExceptionHandler.java @@ -0,0 +1,18 @@ +package com.hccake.ballcat.common.core.exception.handler; + +/** + * 异常日志处理类 + * + * @author Hccake + * @version 1.0 + * @date 2019/10/18 17:05 + */ +public interface GlobalExceptionHandler { + + /** + * 在此处理错误信息 进行落库,入ES, 发送报警通知等信息 + * @param throwable 异常 + */ + void handle(Throwable throwable); + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/CompatibleSSLFactory.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/CompatibleSSLFactory.java new file mode 100644 index 0000000..25cfbd1 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/CompatibleSSLFactory.java @@ -0,0 +1,95 @@ +package com.hccake.ballcat.common.core.https; + +import com.hccake.ballcat.common.core.constant.HttpsConstants; +import com.hccake.ballcat.common.util.ArrayUtils; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetAddress; +import java.net.Socket; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +/** + * 用于兼容 android 使用 + * + * @author lingting + */ +public class CompatibleSSLFactory extends SSLSocketFactory { + + private final String[] protocols; + + private final SSLSocketFactory factory; + + public CompatibleSSLFactory(String... protocols) throws NoSuchAlgorithmException, KeyManagementException { + this(HttpsConstants.TLS, HttpsConstants.KEY_MANAGERS, HttpsConstants.TRUST_MANAGERS, new SecureRandom(), + protocols); + } + + public CompatibleSSLFactory(String protocol, KeyManager[] keyManagers, TrustManager[] trustManagers, + SecureRandom secureRandom, String... protocols) throws NoSuchAlgorithmException, KeyManagementException { + this.protocols = protocols; + final SSLContext context = SSLContext.getInstance(protocol); + context.init(keyManagers, trustManagers, secureRandom); + this.factory = context.getSocketFactory(); + } + + @Override + public String[] getDefaultCipherSuites() { + return factory.getDefaultCipherSuites(); + } + + @Override + public String[] getSupportedCipherSuites() { + return factory.getSupportedCipherSuites(); + } + + @Override + public Socket createSocket() throws IOException { + return enabledProtocols(factory.createSocket()); + } + + @Override + public Socket createSocket(Socket socket, InputStream inputStream, boolean b) throws IOException { + return enabledProtocols(factory.createSocket(socket, inputStream, b)); + } + + @Override + public Socket createSocket(Socket socket, String s, int i, boolean b) throws IOException { + return enabledProtocols(factory.createSocket(socket, s, i, b)); + } + + @Override + public Socket createSocket(String s, int i) throws IOException { + return enabledProtocols(factory.createSocket(s, i)); + } + + @Override + public Socket createSocket(String s, int i, InetAddress inetAddress, int i1) throws IOException { + return enabledProtocols(factory.createSocket(s, i, inetAddress, i1)); + } + + @Override + public Socket createSocket(InetAddress inetAddress, int i) throws IOException { + return enabledProtocols(factory.createSocket(inetAddress, i)); + } + + @Override + public Socket createSocket(InetAddress inetAddress, int i, InetAddress inetAddress1, int i1) throws IOException { + return enabledProtocols(factory.createSocket(inetAddress, i, inetAddress1, i1)); + } + + private Socket enabledProtocols(Socket socket) { + if (!ArrayUtils.isEmpty(protocols) && socket instanceof SSLSocket) { + ((SSLSocket) socket).setEnabledProtocols(protocols); + } + return socket; + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/SSLSocketFactoryInitException.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/SSLSocketFactoryInitException.java new file mode 100644 index 0000000..049b025 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/https/SSLSocketFactoryInitException.java @@ -0,0 +1,12 @@ +package com.hccake.ballcat.common.core.https; + +/** + * @author lingting 2023/2/1 14:29 + */ +public class SSLSocketFactoryInitException extends RuntimeException { + + public SSLSocketFactoryInitException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/CustomJavaTimeModule.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/CustomJavaTimeModule.java new file mode 100644 index 0000000..06196c4 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/CustomJavaTimeModule.java @@ -0,0 +1,45 @@ +package com.hccake.ballcat.common.core.jackson; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.PackageVersion; +import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +/** + * 自定义java8新增时间类型的序列化 + * + * @see com.fasterxml.jackson.datatype.jsr310.JavaTimeModule + * @author Hccake + */ +public class CustomJavaTimeModule extends SimpleModule { + + public CustomJavaTimeModule() { + super(PackageVersion.VERSION); + + this.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + this.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); + this.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME)); + this.addSerializer(Instant.class, InstantSerializer.INSTANCE); + + this.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + this.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); + this.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); + this.addDeserializer(Instant.class, InstantDeserializer.INSTANT); + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullArrayJsonSerializer.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullArrayJsonSerializer.java new file mode 100644 index 0000000..a58d7ab --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullArrayJsonSerializer.java @@ -0,0 +1,32 @@ +package com.hccake.ballcat.common.core.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.io.Serializable; + +/** + * 空数组序列化处理器 如果 Array 为 null,则序列化为 [] + * + * @author Hccake + * @version 1.0 + * @date 2019/10/17 23:17 + */ +public class NullArrayJsonSerializer extends JsonSerializer implements Serializable { + + private static final long serialVersionUID = 1L; + + @Override + public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException { + if (value == null) { + jsonGenerator.writeStartArray(); + jsonGenerator.writeEndArray(); + } + else { + jsonGenerator.writeObject(value); + } + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullMapJsonSerializer.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullMapJsonSerializer.java new file mode 100644 index 0000000..0bc254f --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullMapJsonSerializer.java @@ -0,0 +1,32 @@ +package com.hccake.ballcat.common.core.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.io.Serializable; + +/** + * 空 Map 序列化处理器 Map 为 null,则序列化为 {} + * + * @author Hccake + * @version 1.0 + * @date 2019/10/17 23:17 + */ +public class NullMapJsonSerializer extends JsonSerializer implements Serializable { + + private static final long serialVersionUID = 1L; + + @Override + public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException { + if (value == null) { + jsonGenerator.writeStartObject(); + jsonGenerator.writeEndObject(); + } + else { + jsonGenerator.writeObject(value); + } + } + +} diff --git a/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullSerializerProvider.java b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullSerializerProvider.java new file mode 100644 index 0000000..67fe251 --- /dev/null +++ b/ad-distribute-common/common-core/src/main/java/com/hccake/ballcat/common/core/jackson/NullSerializerProvider.java @@ -0,0 +1,120 @@ +package com.hccake.ballcat.common.core.jackson; + +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; +import com.fasterxml.jackson.databind.ser.SerializerFactory; + +import java.util.Collection; +import java.util.Map; + +/** + *

+ * 修改了 Null 值的序列化器提供者 + *

+ * + *