├── .gitignore ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── FEATURES.md ├── ISSUE_TEMPLATE.md ├── LICENSE ├── README.md ├── hsweb-authorization ├── README.md ├── hsweb-authorization-api │ ├── README.md │ ├── custom-data-access.md │ ├── define.md │ ├── pom.xml │ ├── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── authorization │ │ │ │ │ ├── Authentication.java │ │ │ │ │ ├── AuthenticationHolder.java │ │ │ │ │ ├── AuthenticationInitializeService.java │ │ │ │ │ ├── AuthenticationManager.java │ │ │ │ │ ├── AuthenticationPredicate.java │ │ │ │ │ ├── AuthenticationRequest.java │ │ │ │ │ ├── AuthenticationSupplier.java │ │ │ │ │ ├── AuthenticationUtils.java │ │ │ │ │ ├── MultiAuthentication.java │ │ │ │ │ ├── Permission.java │ │ │ │ │ ├── Role.java │ │ │ │ │ ├── User.java │ │ │ │ │ ├── access │ │ │ │ │ ├── CustomDataAccessConfig.java │ │ │ │ │ ├── DataAccessConfig.java │ │ │ │ │ ├── DataAccessController.java │ │ │ │ │ ├── DataAccessHandler.java │ │ │ │ │ ├── FieldFilterDataAccessConfig.java │ │ │ │ │ ├── FieldScopeDataAccessConfig.java │ │ │ │ │ ├── OwnCreatedDataAccessConfig.java │ │ │ │ │ ├── ScopeDataAccessConfig.java │ │ │ │ │ └── ScriptDataAccessConfig.java │ │ │ │ │ ├── annotation │ │ │ │ │ ├── Authorize.java │ │ │ │ │ ├── Logical.java │ │ │ │ │ ├── RequiresDataAccess.java │ │ │ │ │ └── RequiresExpression.java │ │ │ │ │ ├── builder │ │ │ │ │ ├── AuthenticationBuilder.java │ │ │ │ │ ├── AuthenticationBuilderFactory.java │ │ │ │ │ ├── DataAccessConfigBuilder.java │ │ │ │ │ └── DataAccessConfigBuilderFactory.java │ │ │ │ │ ├── define │ │ │ │ │ ├── AopAuthorizeDefinition.java │ │ │ │ │ ├── AuthorizeDefinition.java │ │ │ │ │ ├── AuthorizeDefinitionInitializedEvent.java │ │ │ │ │ ├── AuthorizingContext.java │ │ │ │ │ ├── DataAccessDefinition.java │ │ │ │ │ ├── HandleType.java │ │ │ │ │ ├── Phased.java │ │ │ │ │ └── Script.java │ │ │ │ │ ├── exception │ │ │ │ │ ├── AccessDenyException.java │ │ │ │ │ └── UnAuthorizedException.java │ │ │ │ │ ├── listener │ │ │ │ │ ├── AuthorizationListener.java │ │ │ │ │ ├── AuthorizationListenerDispatcher.java │ │ │ │ │ └── event │ │ │ │ │ │ ├── AbstractAuthorizationEvent.java │ │ │ │ │ │ ├── AuthorizationBeforeEvent.java │ │ │ │ │ │ ├── AuthorizationDecodeEvent.java │ │ │ │ │ │ ├── AuthorizationEvent.java │ │ │ │ │ │ ├── AuthorizationExitEvent.java │ │ │ │ │ │ ├── AuthorizationFailedEvent.java │ │ │ │ │ │ ├── AuthorizationSuccessEvent.java │ │ │ │ │ │ └── AuthorizingHandleBeforeEvent.java │ │ │ │ │ ├── simple │ │ │ │ │ ├── AbstractDataAccessConfig.java │ │ │ │ │ ├── DefaultAuthorizationAutoConfiguration.java │ │ │ │ │ ├── PlainTextUsernamePasswordAuthenticationRequest.java │ │ │ │ │ ├── SimpleAuthentication.java │ │ │ │ │ ├── SimpleCustomDataAccessConfigConfig.java │ │ │ │ │ ├── SimpleFieldFilterDataAccessConfig.java │ │ │ │ │ ├── SimpleFiledScopeDataAccessConfig.java │ │ │ │ │ ├── SimpleOwnCreatedDataAccessConfig.java │ │ │ │ │ ├── SimplePermission.java │ │ │ │ │ ├── SimpleRole.java │ │ │ │ │ ├── SimpleScriptDataAccessConfig.java │ │ │ │ │ ├── SimpleUser.java │ │ │ │ │ └── builder │ │ │ │ │ │ ├── DataAccessConfigConvert.java │ │ │ │ │ │ ├── SimpleAuthenticationBuilder.java │ │ │ │ │ │ ├── SimpleAuthenticationBuilderFactory.java │ │ │ │ │ │ ├── SimpleDataAccessConfigBuilder.java │ │ │ │ │ │ └── SimpleDataAccessConfigBuilderFactory.java │ │ │ │ │ └── token │ │ │ │ │ ├── AllopatricLoginMode.java │ │ │ │ │ ├── DefaultUserTokenManager.java │ │ │ │ │ ├── SimpleUserToken.java │ │ │ │ │ ├── ThirdPartAuthenticationManager.java │ │ │ │ │ ├── TokenState.java │ │ │ │ │ ├── UserToken.java │ │ │ │ │ ├── UserTokenAuthenticationSupplier.java │ │ │ │ │ ├── UserTokenHolder.java │ │ │ │ │ ├── UserTokenManager.java │ │ │ │ │ └── event │ │ │ │ │ ├── UserTokenChangedEvent.java │ │ │ │ │ ├── UserTokenCreatedEvent.java │ │ │ │ │ └── UserTokenRemovedEvent.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ ├── AuthenticationTests.java │ │ │ └── UserTokenManagerTests.java │ └── token.md ├── hsweb-authorization-basic │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── authorization │ │ │ │ └── basic │ │ │ │ ├── aop │ │ │ │ ├── AopAuthorizingController.java │ │ │ │ ├── AopMethodAuthorizeDefinitionCustomizerParser.java │ │ │ │ ├── AopMethodAuthorizeDefinitionParser.java │ │ │ │ └── DefaultAopMethodAuthorizeDefinitionParser.java │ │ │ │ ├── configuration │ │ │ │ ├── AopAuthorizeAutoConfiguration.java │ │ │ │ ├── AuthorizingHandlerAutoConfiguration.java │ │ │ │ └── EnableAopAuthorize.java │ │ │ │ ├── define │ │ │ │ ├── DefaultBasicAuthorizeDefinition.java │ │ │ │ ├── DefaultDataAccessDefinition.java │ │ │ │ ├── DefaultScript.java │ │ │ │ └── EmptyAuthorizeDefinition.java │ │ │ │ ├── embed │ │ │ │ ├── EmbedAuthenticationManager.java │ │ │ │ └── EmbedAuthenticationProperties.java │ │ │ │ ├── handler │ │ │ │ ├── AuthorizingHandler.java │ │ │ │ ├── DefaultAuthorizingHandler.java │ │ │ │ └── access │ │ │ │ │ ├── CustomDataAccessHandler.java │ │ │ │ │ ├── DefaultDataAccessController.java │ │ │ │ │ ├── FieldFilterDataAccessHandler.java │ │ │ │ │ ├── FieldScopeDataAccessHandler.java │ │ │ │ │ ├── InvokeResultUtils.java │ │ │ │ │ ├── OwnCreatedDataAccessHandler.java │ │ │ │ │ └── ScriptDataAccessHandler.java │ │ │ │ └── web │ │ │ │ ├── AuthorizationController.java │ │ │ │ ├── AuthorizedToken.java │ │ │ │ ├── GeneratedToken.java │ │ │ │ ├── ParsedToken.java │ │ │ │ ├── SessionIdUserTokenGenerator.java │ │ │ │ ├── SessionIdUserTokenParser.java │ │ │ │ ├── UserOnSignIn.java │ │ │ │ ├── UserOnSignOut.java │ │ │ │ ├── UserTokenController.java │ │ │ │ ├── UserTokenForTypeParser.java │ │ │ │ ├── UserTokenGenerator.java │ │ │ │ ├── UserTokenParser.java │ │ │ │ ├── WebUserTokenInterceptor.java │ │ │ │ └── session │ │ │ │ └── UserTokenAutoExpiredListener.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── additional-spring-configuration-metadata.json │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ ├── AuthorizeTests.java │ │ │ ├── RedisUserTokenManagerTests.java │ │ │ └── basic │ │ │ └── embed │ │ │ ├── EmbedAuthenticationManagerTest.groovy │ │ │ └── TestApplication.java │ │ └── resources │ │ └── application.yml ├── hsweb-authorization-jwt │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ └── jwt │ │ │ ├── JwtAuthorizedToken.java │ │ │ ├── JwtAutoConfiguration.java │ │ │ ├── JwtConfig.java │ │ │ ├── JwtTokenGenerator.java │ │ │ └── JwtTokenParser.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── hsweb-authorization-oauth2 │ ├── README.md │ ├── hsweb-authorization-oauth2-auth-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── authorization │ │ │ │ └── oauth2 │ │ │ │ └── server │ │ │ │ ├── AuthorizationService.java │ │ │ │ ├── OAuth2AccessToken.java │ │ │ │ ├── OAuth2Authorization.java │ │ │ │ ├── OAuth2ServerAutoConfiguration.java │ │ │ │ ├── TokenRequest.java │ │ │ │ ├── client │ │ │ │ ├── MemoryOAuth2ClientConfigRepository.java │ │ │ │ ├── OAuth2Client.java │ │ │ │ ├── OAuth2ClientConfigRepository.java │ │ │ │ └── SimpleOAuth2Client.java │ │ │ │ ├── event │ │ │ │ └── OAuth2GrantEvent.java │ │ │ │ ├── exception │ │ │ │ └── GrantTokenException.java │ │ │ │ ├── support │ │ │ │ ├── AbstractAuthorizationService.java │ │ │ │ ├── DefaultOAuth2Granter.java │ │ │ │ ├── HttpTokenRequest.java │ │ │ │ ├── OAuth2Granter.java │ │ │ │ ├── client │ │ │ │ │ ├── ClientCredentialGranter.java │ │ │ │ │ ├── ClientCredentialRequest.java │ │ │ │ │ ├── DefaultClientCredentialGranter.java │ │ │ │ │ └── HttpClientCredentialRequest.java │ │ │ │ ├── code │ │ │ │ │ ├── AuthorizationCode.java │ │ │ │ │ ├── AuthorizationCodeGranter.java │ │ │ │ │ ├── AuthorizationCodeRequest.java │ │ │ │ │ ├── AuthorizationCodeService.java │ │ │ │ │ ├── AuthorizationCodeTokenRequest.java │ │ │ │ │ ├── DefaultAuthorizationCodeGranter.java │ │ │ │ │ ├── HttpAuthorizationCodeRequest.java │ │ │ │ │ └── HttpAuthorizationCodeTokenRequest.java │ │ │ │ ├── implicit │ │ │ │ │ ├── DefaultImplicitGranter.java │ │ │ │ │ ├── HttpImplicitRequest.java │ │ │ │ │ ├── ImplicitGranter.java │ │ │ │ │ └── ImplicitRequest.java │ │ │ │ ├── password │ │ │ │ │ ├── DefaultPasswordGranter.java │ │ │ │ │ ├── HttpPasswordRequest.java │ │ │ │ │ ├── PasswordGranter.java │ │ │ │ │ ├── PasswordRequest.java │ │ │ │ │ └── PasswordService.java │ │ │ │ └── refresh │ │ │ │ │ ├── DefaultRefreshTokenGranter.java │ │ │ │ │ ├── HttpRefreshTokenRequest.java │ │ │ │ │ ├── RefreshTokenGranter.java │ │ │ │ │ └── RefreshTokenRequest.java │ │ │ │ └── token │ │ │ │ └── AccessTokenService.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ ├── hsweb-authorization-oauth2-client │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── authorization │ │ │ │ │ └── oauth2 │ │ │ │ │ └── client │ │ │ │ │ ├── AccessTokenInfo.java │ │ │ │ │ ├── OAuth2ClientAutoConfiguration.java │ │ │ │ │ ├── OAuth2RequestBuilder.java │ │ │ │ │ ├── OAuth2RequestBuilderFactory.java │ │ │ │ │ ├── OAuth2RequestService.java │ │ │ │ │ ├── OAuth2ServerConfig.java │ │ │ │ │ ├── OAuth2SessionBuilder.java │ │ │ │ │ ├── exception │ │ │ │ │ ├── OAuth2RequestException.java │ │ │ │ │ └── UnCheckException.java │ │ │ │ │ ├── listener │ │ │ │ │ ├── AutoRegisterOAuth2Listener.java │ │ │ │ │ ├── OAuth2CodeAuthBeforeEvent.java │ │ │ │ │ ├── OAuth2Event.java │ │ │ │ │ └── OAuth2Listener.java │ │ │ │ │ ├── request │ │ │ │ │ ├── DefaultResponseJudge.java │ │ │ │ │ ├── OAuth2Request.java │ │ │ │ │ ├── OAuth2Session.java │ │ │ │ │ ├── ReTry.java │ │ │ │ │ ├── ResponseConvertHandler.java │ │ │ │ │ ├── ResponseJudge.java │ │ │ │ │ ├── TokenExpiredCallBack.java │ │ │ │ │ └── definition │ │ │ │ │ │ ├── ResponseConvertForProviderDefinition.java │ │ │ │ │ │ ├── ResponseConvertForServerIdDefinition.java │ │ │ │ │ │ ├── ResponseJudgeForProviderDefinition.java │ │ │ │ │ │ └── ResponseJudgeForServerIdDefinition.java │ │ │ │ │ ├── response │ │ │ │ │ ├── OAuth2Response.java │ │ │ │ │ └── ResponseConvert.java │ │ │ │ │ └── simple │ │ │ │ │ ├── MemoryOAuth2ServerConfigRepository.java │ │ │ │ │ ├── MemoryOAuth2UserTokenRepository.java │ │ │ │ │ ├── OAuth2ServerConfigRepository.java │ │ │ │ │ ├── OAuth2UserTokenRepository.java │ │ │ │ │ ├── SimpleOAuth2RequestService.java │ │ │ │ │ ├── SimpleOAuth2SessionBuilder.java │ │ │ │ │ ├── provider │ │ │ │ │ ├── HswebResponseConvertSupport.java │ │ │ │ │ └── HswebResponseJudgeSupport.java │ │ │ │ │ ├── request │ │ │ │ │ ├── SimpleOAuth2Request.java │ │ │ │ │ ├── SimpleOAuth2Response.java │ │ │ │ │ ├── UnCheck.java │ │ │ │ │ └── builder │ │ │ │ │ │ ├── SimpleOAuth2RequestBuilder.java │ │ │ │ │ │ └── SimpleOAuth2RequestBuilderFactory.java │ │ │ │ │ └── session │ │ │ │ │ ├── AuthorizationCodeSession.java │ │ │ │ │ ├── CachedOAuth2Session.java │ │ │ │ │ ├── DefaultOAuth2Session.java │ │ │ │ │ └── PasswordSession.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ └── oauth2 │ │ │ └── client │ │ │ └── simple │ │ │ └── provider │ │ │ ├── HswebResponseConvertSupportTests.java │ │ │ └── MockOAuth2Response.java │ ├── hsweb-authorization-oauth2-core │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── oauth2 │ │ │ └── core │ │ │ ├── ErrorType.java │ │ │ ├── GrantType.java │ │ │ ├── OAuth2Constants.java │ │ │ ├── ResponseType.java │ │ │ └── scope │ │ │ └── ScopeParser.java │ └── pom.xml └── pom.xml ├── hsweb-boost ├── README.md ├── hsweb-boost-aop │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── boost │ │ └── aop │ │ └── context │ │ ├── MethodInterceptorContext.java │ │ └── MethodInterceptorHolder.java ├── hsweb-boost-excel │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── excel │ │ │ ├── DefaultExcelImporter.java │ │ │ ├── Excel.java │ │ │ ├── ExcelCellConverter.java │ │ │ └── ExcelImporter.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── excel │ │ │ └── DefaultExcelImporterTest.java │ │ └── resources │ │ └── test.xls ├── hsweb-boost-ftp │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── ftp │ │ ├── DefaultFTPOperation.java │ │ ├── FTPOperation.java │ │ └── pool │ │ ├── FTPClientFactory.java │ │ ├── FTPClientPool.java │ │ └── FTPClientProperties.java └── pom.xml ├── hsweb-commons ├── README.md ├── create-crud.md ├── hsweb-commons-bean │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── commons │ │ │ └── bean │ │ │ ├── Bean.java │ │ │ ├── BeanValidator.java │ │ │ ├── BeanValidatorAutoConfiguration.java │ │ │ └── ValidateBean.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── hsweb-commons-controller │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── controller │ │ ├── CreateController.java │ │ ├── CrudController.java │ │ ├── DeleteController.java │ │ ├── GenericEntityController.java │ │ ├── QueryController.java │ │ ├── SimpleCrudController.java │ │ ├── SimpleGenericEntityController.java │ │ ├── UpdateController.java │ │ └── message │ │ ├── MapResponseMessage.java │ │ └── ResponseMessage.java ├── hsweb-commons-dao │ ├── README.md │ ├── hsweb-commons-dao-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ ├── CrudDao.java │ │ │ ├── Dao.java │ │ │ ├── DeleteDao.java │ │ │ ├── InsertDao.java │ │ │ └── dynamic │ │ │ ├── DeleteByEntityDao.java │ │ │ ├── QueryByEntityDao.java │ │ │ └── UpdateByEntityDao.java │ ├── hsweb-commons-dao-mybatis │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── dao │ │ │ │ │ └── mybatis │ │ │ │ │ ├── EnumDictHandlerRegister.java │ │ │ │ │ ├── MyBatisAutoConfiguration.java │ │ │ │ │ ├── MybatisDaoAutoConfiguration.java │ │ │ │ │ ├── MybatisEntityFactory.java │ │ │ │ │ ├── MybatisMapperCustomer.java │ │ │ │ │ ├── MybatisProperties.java │ │ │ │ │ ├── MybatisUtils.java │ │ │ │ │ ├── builder │ │ │ │ │ ├── EasyOrmSqlBuilder.java │ │ │ │ │ ├── InsertSqlBuilder.java │ │ │ │ │ ├── SqlBuilder.java │ │ │ │ │ ├── SqlParamParser.java │ │ │ │ │ ├── UpdateSqlBuilder.java │ │ │ │ │ └── jpa │ │ │ │ │ │ └── JpaAnnotationParser.java │ │ │ │ │ ├── dynamic │ │ │ │ │ ├── DynamicDataSourceSqlSessionFactoryBuilder.java │ │ │ │ │ ├── DynamicSpringManagedTransaction.java │ │ │ │ │ └── DynamicSqlSessionFactory.java │ │ │ │ │ ├── handler │ │ │ │ │ ├── JsonArrayHandler.java │ │ │ │ │ ├── JsonMapHandler.java │ │ │ │ │ └── JsonSetHandler.java │ │ │ │ │ ├── mapper │ │ │ │ │ ├── AbstractSqlTermCustomer.java │ │ │ │ │ ├── ChangedTermValue.java │ │ │ │ │ ├── SqlTermCustomer.java │ │ │ │ │ ├── TreeStructureSqlTermCustomer.java │ │ │ │ │ └── dict │ │ │ │ │ │ ├── DictInTermTypeMapper.java │ │ │ │ │ │ └── DictTermTypeMapper.java │ │ │ │ │ └── plgins │ │ │ │ │ └── pager │ │ │ │ │ ├── Pager.java │ │ │ │ │ └── PagerInterceptor.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ ├── spring-configuration-metadata.json │ │ │ │ └── spring.factories │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dao │ │ │ │ └── mybatis │ │ │ │ └── mappers │ │ │ │ └── basic │ │ │ │ └── BasicMapper.xml │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dao │ │ │ │ ├── crud │ │ │ │ ├── DataType.java │ │ │ │ ├── NestEntity.java │ │ │ │ ├── TestApplication.java │ │ │ │ ├── TestCrud.java │ │ │ │ ├── TestDao.java │ │ │ │ └── TestEntity.java │ │ │ │ └── mybatis │ │ │ │ └── builder │ │ │ │ ├── SqlParamParserTest.java │ │ │ │ ├── TestQueryEntity.java │ │ │ │ └── jpa │ │ │ │ ├── AbstractEntity.java │ │ │ │ ├── JpaAnnotationParserTest.java │ │ │ │ └── TestEntity.java │ │ │ └── resources │ │ │ ├── application.yml │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── test │ │ │ └── TestDao.xml │ └── pom.xml ├── hsweb-commons-entity │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── commons │ │ │ └── entity │ │ │ ├── CloneableEntity.java │ │ │ ├── DataStatus.java │ │ │ ├── DataStatusEnum.java │ │ │ ├── Entity.java │ │ │ ├── GenericEntity.java │ │ │ ├── PagerResult.java │ │ │ ├── QueryEntity.java │ │ │ ├── RecordCreationEntity.java │ │ │ ├── SimpleGenericEntity.java │ │ │ ├── SimpleTreeSortSupportEntity.java │ │ │ ├── SortSupportEntity.java │ │ │ ├── TreeSortSupportEntity.java │ │ │ ├── TreeSupportEntity.java │ │ │ ├── factory │ │ │ ├── DefaultMapperFactory.java │ │ │ ├── DefaultPropertyCopier.java │ │ │ ├── EntityFactory.java │ │ │ ├── MapperEntityFactory.java │ │ │ └── PropertyCopier.java │ │ │ └── param │ │ │ ├── DeleteParamEntity.java │ │ │ ├── QueryParamEntity.java │ │ │ └── UpdateParamEntity.java │ │ └── test │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── commons │ │ └── entity │ │ ├── MenuEntity.java │ │ ├── TreeSupportEntityTests.java │ │ └── factory │ │ ├── MapperEntityFactoryTests.java │ │ ├── NewTestEntity.java │ │ └── TestEntity.java ├── hsweb-commons-model │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── commons │ │ └── model │ │ └── Model.java ├── hsweb-commons-service │ ├── hsweb-commons-service-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── service │ │ │ ├── CreateEntityService.java │ │ │ ├── CrudService.java │ │ │ ├── DeleteService.java │ │ │ ├── InsertService.java │ │ │ ├── QueryByEntityService.java │ │ │ ├── QueryService.java │ │ │ ├── Service.java │ │ │ ├── TreeService.java │ │ │ ├── UpdateService.java │ │ │ └── Validator.java │ ├── hsweb-commons-service-oauth2 │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── service │ │ │ │ └── oauth2 │ │ │ │ ├── AbstractOAuth2CrudService.java │ │ │ │ ├── OAuth2CrudService.java │ │ │ │ ├── OAuth2DeleteService.java │ │ │ │ ├── OAuth2InsertService.java │ │ │ │ ├── OAuth2QueryByEntityService.java │ │ │ │ ├── OAuth2QueryService.java │ │ │ │ ├── OAuth2ServiceSupport.java │ │ │ │ └── OAuth2UpdateService.java │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── service │ │ │ └── oauth2 │ │ │ ├── AbstractOAuth2CrudServiceTests.java │ │ │ ├── MockOAuth2Request.java │ │ │ ├── MockOAuth2Response.java │ │ │ ├── TestEntity.java │ │ │ └── TestEntityService.java │ ├── hsweb-commons-service-simple │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── service │ │ │ │ ├── AbstractService.java │ │ │ │ ├── AbstractTreeSortService.java │ │ │ │ ├── DefaultDSLDeleteService.java │ │ │ │ ├── DefaultDSLQueryService.java │ │ │ │ ├── DefaultDSLUpdateService.java │ │ │ │ ├── DefaultDeleteService.java │ │ │ │ ├── DefaultLogicPrimaryKeyValidator.java │ │ │ │ ├── DefaultQueryByEntityService.java │ │ │ │ ├── EnableCacheAllEvictGenericEntityService.java │ │ │ │ ├── EnableCacheAllEvictTreeSortService.java │ │ │ │ ├── EnableCacheGenericEntityService.java │ │ │ │ ├── EnableCacheTreeSortService.java │ │ │ │ ├── GenericEntityService.java │ │ │ │ └── GenericService.java │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── service │ │ │ ├── AbstractTreeSortServiceTests.java │ │ │ ├── DefaultLogicPrimaryKeyValidatorTest.java │ │ │ ├── EnableCacheAllEvictTestService.java │ │ │ ├── EnableCacheAllEvictTreeTestService.java │ │ │ ├── EnableCacheTestService.java │ │ │ ├── EnableCacheTests.java │ │ │ ├── EnableCacheTreeTestService.java │ │ │ ├── GenericEntityServiceTest.java │ │ │ ├── SpringTestApplication.java │ │ │ ├── TestEntity.java │ │ │ ├── TestEntityService.java │ │ │ └── TestTreeEntityService.java │ └── pom.xml ├── hsweb-commons-utils │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── AopUtils.java │ │ │ ├── ApplicationContextHolder.java │ │ │ ├── ExpressionUtils.java │ │ │ ├── HttpParameterConverter.java │ │ │ ├── Lists.java │ │ │ ├── Maps.java │ │ │ ├── RegexUtils.java │ │ │ ├── Sqls.java │ │ │ ├── ThreadLocalUtils.java │ │ │ └── WebUtil.java │ │ └── test │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ ├── ExpressionUtilsTests.java │ │ ├── HttpParameterConverterTests.java │ │ ├── ListsTests.java │ │ ├── MapsTests.java │ │ ├── RegexUtilsTests.java │ │ ├── SqlsTests.java │ │ ├── ThreadLocalUtilsTests.java │ │ └── WebUtilTest.java └── pom.xml ├── hsweb-concurrent ├── hsweb-concurrent-async-job │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── async │ │ │ │ ├── AsyncJobException.java │ │ │ │ ├── AsyncJobService.java │ │ │ │ ├── AsyncJobServiceAutoConfiguration.java │ │ │ │ ├── BatchAsyncJobContainer.java │ │ │ │ ├── SpringTransactionSupportJob.java │ │ │ │ ├── SpringTransactionSupportJobWrapper.java │ │ │ │ ├── TransactionBatchAsyncJobContainer.java │ │ │ │ ├── TransactionSupportAsyncJobService.java │ │ │ │ ├── TransactionSupportJob.java │ │ │ │ └── TransactionSupportJobWrapper.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── async │ │ │ └── TransactionSupportAsyncJobServiceTest.java │ │ └── resources │ │ └── application.yml ├── hsweb-concurrent-cache │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── cache │ │ │ ├── FixUseSupperClassAutoConfiguration.java │ │ │ ├── monitor │ │ │ └── MonitorSupportCache.java │ │ │ └── spring │ │ │ └── fix │ │ │ ├── FixUseSupperClassAnnotationParser.java │ │ │ ├── FixUseSupperClassCacheAnnotationParser.java │ │ │ ├── FixUseSupperClassCacheOperationSource.java │ │ │ └── FixUseSupperClassFallbackCacheOperationSource.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── hsweb-concurrent-counter │ ├── hsweb-concurrent-counter-api │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── concurrent │ │ │ │ │ └── counter │ │ │ │ │ ├── AbstractCounterManager.java │ │ │ │ │ ├── Counter.java │ │ │ │ │ ├── CounterAutoConfiguration.java │ │ │ │ │ ├── CounterManager.java │ │ │ │ │ ├── SimpleCounter.java │ │ │ │ │ └── SimpleCounterManager.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── concurrent │ │ │ └── counter │ │ │ └── SimpleCounterTest.java │ ├── hsweb-concurrent-counter-redis │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── counter │ │ │ │ │ └── redis │ │ │ │ │ ├── RedisCounterAutoConfiguration.java │ │ │ │ │ ├── RedissonCounter.java │ │ │ │ │ └── RedissonCounterManager.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── counter │ │ │ └── redis │ │ │ └── RedissonCounterTest.java │ └── pom.xml ├── hsweb-concurrent-lock │ ├── hsweb-concurrent-lock-api │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── concurrent │ │ │ │ └── lock │ │ │ │ ├── AbstractLockManager.java │ │ │ │ ├── LockManager.java │ │ │ │ ├── SimpleLockManager.java │ │ │ │ └── annotation │ │ │ │ ├── Lock.java │ │ │ │ ├── ReadLock.java │ │ │ │ └── WriteLock.java │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── concurrent │ │ │ └── lok │ │ │ └── SimpleLockTests.java │ ├── hsweb-concurrent-lock-redis │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── concurrent │ │ │ │ └── lock │ │ │ │ └── redis │ │ │ │ └── RedissonLockManager.java │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── concurrent │ │ │ └── lock │ │ │ └── redis │ │ │ └── RedissonLockTest.java │ ├── hsweb-concurrent-lock-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── concurrent │ │ │ │ │ └── lock │ │ │ │ │ └── starter │ │ │ │ │ ├── AopLockAdvisor.java │ │ │ │ │ ├── LockManagerAutoConfiguration.java │ │ │ │ │ ├── LockProcessor.java │ │ │ │ │ └── RedisLockManagerAutoConfiguration.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── concurrent │ │ │ │ └── lock │ │ │ │ └── starter │ │ │ │ ├── LockAnnotationTest.java │ │ │ │ ├── LockService.java │ │ │ │ └── TestApplication.java │ │ │ └── resources │ │ │ └── application.yml │ └── pom.xml └── pom.xml ├── hsweb-core ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ ├── BusinessException.java │ │ ├── Describe.java │ │ ├── NotFoundException.java │ │ ├── ScriptScope.java │ │ ├── bean │ │ ├── BeanFactory.java │ │ ├── Converter.java │ │ ├── Copier.java │ │ ├── DefaultToStringOperator.java │ │ ├── FastBeanCopier.java │ │ ├── ToString.java │ │ └── ToStringOperator.java │ │ ├── convert │ │ └── CustomMessageConverter.java │ │ ├── dict │ │ ├── ClassDictDefine.java │ │ ├── Dict.java │ │ ├── DictDefine.java │ │ ├── DictDefineRepository.java │ │ ├── DictParser.java │ │ ├── DictSupportApi.java │ │ ├── EnumDict.java │ │ ├── Item.java │ │ ├── ItemDefine.java │ │ ├── apply │ │ │ ├── DefaultDictApply.java │ │ │ ├── DictApply.java │ │ │ └── DictWrapper.java │ │ └── defaults │ │ │ ├── DefaultClassDictDefine.java │ │ │ ├── DefaultDictDefine.java │ │ │ ├── DefaultDictDefineRepository.java │ │ │ ├── DefaultDictParser.java │ │ │ ├── DefaultDictSupportApi.java │ │ │ ├── DefaultItemDefine.java │ │ │ └── TrueOrFalse.java │ │ ├── id │ │ ├── IDGenerator.java │ │ └── SnowflakeIdGenerator.java │ │ ├── proxy │ │ └── Proxy.java │ │ ├── validate │ │ ├── SimpleValidateResults.java │ │ ├── ValidateResults.java │ │ └── ValidationException.java │ │ └── validator │ │ ├── DuplicateKeyException.java │ │ ├── LogicPrimaryKey.java │ │ ├── LogicPrimaryKeyValidator.java │ │ └── group │ │ ├── CreateGroup.java │ │ └── UpdateGroup.java │ └── test │ └── java │ └── org │ └── hswebframework │ └── web │ ├── bean │ ├── Color.java │ ├── FastBeanCopierTest.java │ ├── NestObject.java │ ├── Source.java │ └── Target.java │ ├── dict │ ├── DictDefineTest.java │ ├── UseDictEntity.java │ ├── UseDictEntity2.java │ └── UserCode.java │ └── id │ └── IDGeneratorTests.java ├── hsweb-datasource ├── README.md ├── hsweb-datasource-api │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── datasource │ │ │ │ ├── AopDataSourceSwitcherAutoConfiguration.java │ │ │ │ ├── DataSourceHolder.java │ │ │ │ ├── DatabaseType.java │ │ │ │ ├── DefaultJdbcExecutor.java │ │ │ │ ├── DynamicDataSource.java │ │ │ │ ├── DynamicDataSourceAutoConfiguration.java │ │ │ │ ├── DynamicDataSourceProxy.java │ │ │ │ ├── DynamicDataSourceService.java │ │ │ │ ├── annotation │ │ │ │ ├── UseDataSource.java │ │ │ │ └── UseDefaultDataSource.java │ │ │ │ ├── config │ │ │ │ ├── DynamicDataSourceConfig.java │ │ │ │ ├── DynamicDataSourceConfigRepository.java │ │ │ │ └── InSpringDynamicDataSourceConfig.java │ │ │ │ ├── exception │ │ │ │ ├── DataSourceClosedException.java │ │ │ │ └── DataSourceNotFoundException.java │ │ │ │ ├── service │ │ │ │ ├── AbstractDynamicDataSourceService.java │ │ │ │ ├── DataSourceCache.java │ │ │ │ ├── InSpringContextDynamicDataSourceService.java │ │ │ │ └── InSpringDynamicDataSourceConfigRepository.java │ │ │ │ ├── strategy │ │ │ │ ├── AnnotationDataSourceSwitchStrategyMatcher.java │ │ │ │ ├── CachedDataSourceSwitchStrategyMatcher.java │ │ │ │ ├── CachedTableSwitchStrategyMatcher.java │ │ │ │ ├── DataSourceSwitchStrategyMatcher.java │ │ │ │ ├── ExpressionDataSourceSwitchStrategyMatcher.java │ │ │ │ └── TableSwitchStrategyMatcher.java │ │ │ │ └── switcher │ │ │ │ ├── DataSourceSwitcher.java │ │ │ │ ├── DefaultDataSourceSwitcher.java │ │ │ │ ├── DefaultTableSwitcher.java │ │ │ │ └── TableSwitcher.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── datasource │ │ └── switcher │ │ └── DefaultDataSourceSwitcherTest.java ├── hsweb-datasource-jta │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── datasource │ │ │ │ └── jta │ │ │ │ ├── AtomikosDataSourceAutoConfiguration.java │ │ │ │ ├── AtomikosDataSourceConfig.java │ │ │ │ ├── InMemoryAtomikosDataSourceRepository.java │ │ │ │ ├── JtaDataSourceRepository.java │ │ │ │ ├── JtaDynamicDataSourceService.java │ │ │ │ ├── JtaJdbcSqlExecutor.java │ │ │ │ └── JtaJdbcSqlExecutorAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── datasource │ │ │ └── jta │ │ │ └── SimpleAtomikosTests.java │ │ └── resources │ │ └── application.yml ├── hsweb-datasource-web │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── datasource │ │ │ └── web │ │ │ ├── DatasourceController.java │ │ │ └── DatasourceWebApiAutoConfiguration.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories └── pom.xml ├── hsweb-logging ├── README.md ├── hsweb-access-logging-aop │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── loggin │ │ └── aop │ │ ├── AccessLoggerParser.java │ │ ├── AopAccessLoggerSupport.java │ │ ├── AopAccessLoggerSupportAutoConfiguration.java │ │ ├── DefaultAccessLoggerParser.java │ │ ├── EnableAccessLogger.java │ │ └── SwaggerAccessLoggerParser.java ├── hsweb-access-logging-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── logging │ │ ├── AccessLogger.java │ │ ├── AccessLoggerInfo.java │ │ ├── AccessLoggerListener.java │ │ ├── LoggerDefine.java │ │ └── events │ │ ├── AccessLoggerAfterEvent.java │ │ └── AccessLoggerBeforeEvent.java └── pom.xml ├── hsweb-message ├── README.md ├── hsweb-message-api │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── message │ │ │ │ ├── Message.java │ │ │ │ ├── MessagePublish.java │ │ │ │ ├── MessageSubject.java │ │ │ │ ├── MessageSubscribe.java │ │ │ │ ├── Messager.java │ │ │ │ ├── MessagerAutoConfiguration.java │ │ │ │ ├── annotation │ │ │ │ ├── MessageConsumer.java │ │ │ │ └── MessageSupplier.java │ │ │ │ ├── builder │ │ │ │ ├── MessageBuilder.java │ │ │ │ ├── MessageSubjectBuilder.java │ │ │ │ ├── SimpleMessageBuilder.java │ │ │ │ ├── SimpleMessageSubjectBuilder.java │ │ │ │ ├── StaticMessageBuilder.java │ │ │ │ └── StaticMessageSubjectBuilder.java │ │ │ │ ├── memory │ │ │ │ ├── MemoryMessager.java │ │ │ │ ├── MemoryPublish.java │ │ │ │ ├── MemoryTopic.java │ │ │ │ └── MemoryTopicSubscribe.java │ │ │ │ └── support │ │ │ │ ├── DataMessage.java │ │ │ │ ├── MultipleQueueMessageSubject.java │ │ │ │ ├── MultipleUserMessageSubject.java │ │ │ │ ├── ObjectMessage.java │ │ │ │ ├── QueueMessageSubject.java │ │ │ │ ├── ServiceInvokerMessage.java │ │ │ │ ├── TextMessage.java │ │ │ │ ├── TopicMessageSubject.java │ │ │ │ ├── UserMessageSubject.java │ │ │ │ └── simple │ │ │ │ ├── SimpleDataMessage.java │ │ │ │ ├── SimpleObjectMessage.java │ │ │ │ ├── SimpleServiceInvokerMessage.java │ │ │ │ └── SimpleTextMessage.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── message │ │ ├── MessagePublishHandler.java │ │ ├── SimpleMessagePublish.java │ │ ├── SimpleMessageSubscribe.java │ │ ├── SimpleMessageTests.java │ │ └── SimpleMessager.java ├── hsweb-message-jms │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── message │ │ │ └── jms │ │ │ ├── JmsMessagePublish.java │ │ │ ├── JmsMessageSubscribe.java │ │ │ └── JmsMessager.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── message │ │ │ └── jms │ │ │ ├── JmsMessagerTest.java │ │ │ └── SampleActiveMQApplication.java │ │ └── resources │ │ └── application.yml ├── hsweb-message-redis │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── message │ │ │ │ └── redis │ │ │ │ ├── RedissonMessagePublish.java │ │ │ │ ├── RedissonMessageSubscribe.java │ │ │ │ ├── RedissonMessager.java │ │ │ │ └── starter │ │ │ │ └── RedissonMessagerAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── message │ │ └── redis │ │ └── RedissonMessagerTest.java ├── hsweb-message-websocket │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── socket │ │ │ │ ├── CommandRequest.java │ │ │ │ ├── WebSocketSessionListener.java │ │ │ │ ├── authorize │ │ │ │ ├── AuthorizeCommandProcessor.java │ │ │ │ ├── SessionIdWebSocketTokenParser.java │ │ │ │ ├── WebSocketTokenParser.java │ │ │ │ └── XAccessTokenParser.java │ │ │ │ ├── handler │ │ │ │ ├── CommandWebSocketMessageDispatcher.java │ │ │ │ └── WebSocketCommandRequest.java │ │ │ │ ├── message │ │ │ │ ├── DefaultWebSocketMessager.java │ │ │ │ ├── WebSocketMessage.java │ │ │ │ └── WebSocketMessager.java │ │ │ │ ├── processor │ │ │ │ ├── AbstractCommandProcessor.java │ │ │ │ ├── CommandProcessor.java │ │ │ │ ├── CommandProcessorContainer.java │ │ │ │ └── DefaultCommandProcessorContainer.java │ │ │ │ └── starter │ │ │ │ └── CommandWebSocketAutoConfiguration.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── socket │ │ │ ├── TestProcessor.java │ │ │ ├── WebSocketClientTests.java │ │ │ └── WebSocketServerTests.java │ │ └── resources │ │ └── application.yml └── pom.xml ├── hsweb-starter ├── README.md ├── hsweb-spring-boot-starter │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── starter │ │ │ │ ├── AppProperties.java │ │ │ │ ├── CorsAutoConfiguration.java │ │ │ │ ├── HswebAutoConfiguration.java │ │ │ │ ├── RestControllerExceptionTranslator.java │ │ │ │ ├── SystemInitializeAutoConfiguration.java │ │ │ │ ├── SystemVersion.java │ │ │ │ ├── convert │ │ │ │ ├── FastJsonGenericHttpMessageConverter.java │ │ │ │ └── FastJsonHttpMessageConverter.java │ │ │ │ ├── entity │ │ │ │ ├── EntityFactoryInitConfiguration.java │ │ │ │ ├── EntityMappingCustomer.java │ │ │ │ └── EntityProperties.java │ │ │ │ ├── init │ │ │ │ ├── DependencyInstaller.java │ │ │ │ ├── DependencyUpgrader.java │ │ │ │ ├── InitializeCallBack.java │ │ │ │ ├── InstallerCallBack.java │ │ │ │ ├── SystemInitialize.java │ │ │ │ ├── UpgradeCallBack.java │ │ │ │ └── simple │ │ │ │ │ ├── SimpleDependencyInstaller.java │ │ │ │ │ └── SimpleDependencyUpgrader.java │ │ │ │ └── resolver │ │ │ │ ├── AuthorizationArgumentResolver.java │ │ │ │ ├── JsonParam.java │ │ │ │ └── JsonParamResolver.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── starter │ │ │ ├── InstallTests.java │ │ │ └── ValidatorTests.java │ │ └── resources │ │ └── hsweb-starter.js └── pom.xml ├── hsweb-system ├── README.md ├── hsweb-system-authorization │ ├── README.md │ ├── hsweb-system-authorization-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── authorization │ │ │ │ ├── ActionEntity.java │ │ │ │ ├── AuthorizationSettingDetailEntity.java │ │ │ │ ├── AuthorizationSettingEntity.java │ │ │ │ ├── AuthorizationSettingMenuEntity.java │ │ │ │ ├── DataAccessEntity.java │ │ │ │ ├── MenuEntity.java │ │ │ │ ├── MenuGroupBindEntity.java │ │ │ │ ├── MenuGroupEntity.java │ │ │ │ ├── OptionalField.java │ │ │ │ ├── ParentPermission.java │ │ │ │ ├── PermissionEntity.java │ │ │ │ ├── RoleEntity.java │ │ │ │ ├── SimpleAuthorizationSettingDetailEntity.java │ │ │ │ ├── SimpleAuthorizationSettingEntity.java │ │ │ │ ├── SimpleAuthorizationSettingMenuEntity.java │ │ │ │ ├── SimpleMenuEntity.java │ │ │ │ ├── SimpleMenuGroupBindEntity.java │ │ │ │ ├── SimpleMenuGroupEntity.java │ │ │ │ ├── SimplePermissionEntity.java │ │ │ │ ├── SimpleRoleEntity.java │ │ │ │ ├── SimpleUserEntity.java │ │ │ │ ├── SimpleUserRoleEntity.java │ │ │ │ ├── UserEntity.java │ │ │ │ ├── UserMenuEntity.java │ │ │ │ ├── UserRoleEntity.java │ │ │ │ ├── UserSettingEntity.java │ │ │ │ └── bind │ │ │ │ ├── BindRoleUserEntity.java │ │ │ │ └── SimpleBindRoleUserEntity.java │ │ │ └── service │ │ │ └── authorization │ │ │ ├── AuthorizationSettingMenuService.java │ │ │ ├── AuthorizationSettingService.java │ │ │ ├── AuthorizationSettingTypeSupplier.java │ │ │ ├── DataAccessFactory.java │ │ │ ├── MenuGroupBindService.java │ │ │ ├── MenuGroupService.java │ │ │ ├── MenuService.java │ │ │ ├── PasswordEncoder.java │ │ │ ├── PasswordStrengthValidator.java │ │ │ ├── PermissionService.java │ │ │ ├── RoleService.java │ │ │ ├── UserMenuManagerService.java │ │ │ ├── UserService.java │ │ │ ├── UserSettingService.java │ │ │ ├── UsernameValidator.java │ │ │ └── events │ │ │ ├── ClearUserAuthorizationCacheEvent.java │ │ │ └── UserModifiedEvent.java │ ├── hsweb-system-authorization-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── authorization │ │ │ │ │ ├── AuthorizationSettingDao.java │ │ │ │ │ ├── AuthorizationSettingDetailDao.java │ │ │ │ │ ├── AuthorizationSettingMenuDao.java │ │ │ │ │ ├── MenuDao.java │ │ │ │ │ ├── MenuGroupBindDao.java │ │ │ │ │ ├── MenuGroupDao.java │ │ │ │ │ ├── PermissionDao.java │ │ │ │ │ ├── RoleDao.java │ │ │ │ │ ├── UserDao.java │ │ │ │ │ ├── UserRoleDao.java │ │ │ │ │ └── UserSettingDao.java │ │ │ │ └── service │ │ │ │ └── authorization │ │ │ │ └── simple │ │ │ │ ├── CacheConstants.java │ │ │ │ ├── DefaultDataAccessFactory.java │ │ │ │ ├── SimpleAuthenticationManager.java │ │ │ │ ├── SimpleAuthorizationSettingMenuService.java │ │ │ │ ├── SimpleAuthorizationSettingService.java │ │ │ │ ├── SimpleMenuGroupBindService.java │ │ │ │ ├── SimpleMenuGroupService.java │ │ │ │ ├── SimpleMenuService.java │ │ │ │ ├── SimplePermissionService.java │ │ │ │ ├── SimpleRoleService.java │ │ │ │ ├── SimpleUserService.java │ │ │ │ ├── SimpleUserSettingService.java │ │ │ │ └── terms │ │ │ │ ├── CustomUserSqlTermAutoConfiguration.java │ │ │ │ └── UserInRoleSqlTerm.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── authorization │ │ │ ├── AuthorizationSettingDetailMapper.xml │ │ │ ├── AuthorizationSettingMapper.xml │ │ │ ├── AuthorizationSettingMenuMapper.xml │ │ │ ├── MenuGroupBindMapper.xml │ │ │ ├── MenuGroupMapper.xml │ │ │ ├── MenuMapper.xml │ │ │ ├── PermissionMapper.xml │ │ │ ├── RoleMapper.xml │ │ │ ├── UserMapper.xml │ │ │ ├── UserRoleMapper.xml │ │ │ └── UserSettingMapper.xml │ ├── hsweb-system-authorization-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── authorization │ │ │ │ │ └── starter │ │ │ │ │ ├── AuthorizationAutoConfiguration.java │ │ │ │ │ ├── AutoSyncPermission.java │ │ │ │ │ ├── BasicAuthorizationConfiguration.java │ │ │ │ │ └── BasicAuthorizationTokenParser.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── authorization │ │ │ │ └── starter │ │ │ │ ├── AuthorizationSettingTests.java │ │ │ │ ├── AutoSyncPermissionTest.java │ │ │ │ ├── LoginTests.java │ │ │ │ ├── PermissionTests.java │ │ │ │ ├── TestApplication.java │ │ │ │ ├── UserSettingControllerTest.groovy │ │ │ │ └── UserTests.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-authorization-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ └── controller │ │ │ ├── AuthorizationSettingController.java │ │ │ ├── MenuController.java │ │ │ ├── PermissionController.java │ │ │ ├── RoleController.java │ │ │ ├── UserController.java │ │ │ ├── UserSettingController.java │ │ │ └── model │ │ │ ├── ActionModel.java │ │ │ ├── DataAccessModel.java │ │ │ ├── FieldAccessModel.java │ │ │ ├── PermissionRoleModel.java │ │ │ ├── SimplePermissionRoleModel.java │ │ │ ├── SimpleUserModel.java │ │ │ └── UserModel.java │ └── pom.xml ├── hsweb-system-config │ ├── README.md │ ├── hsweb-system-config-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── config │ │ │ │ ├── ConfigContent.java │ │ │ │ ├── ConfigEntity.java │ │ │ │ └── SimpleConfigEntity.java │ │ │ └── service │ │ │ └── config │ │ │ └── ConfigService.java │ ├── hsweb-system-config-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── config │ │ │ │ │ └── ConfigDao.java │ │ │ │ └── service │ │ │ │ └── config │ │ │ │ └── simple │ │ │ │ └── SimpleConfigService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── config │ │ │ └── ConfigMapper.xml │ ├── hsweb-system-config-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── config │ │ │ │ │ └── starter │ │ │ │ │ └── ConfigAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── starter │ │ │ │ └── config │ │ │ │ └── ConfigTests.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-config-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── config │ │ │ └── ConfigController.java │ └── pom.xml ├── hsweb-system-dashboard │ ├── hsweb-system-dashboard-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dashboard │ │ │ ├── DashBoardConfigEntity.java │ │ │ ├── DashBoardService.java │ │ │ └── executor │ │ │ └── DashBoardExecutor.java │ ├── hsweb-system-dashboard-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dashboard │ │ │ │ └── local │ │ │ │ ├── DashBoardExecutorStrategy.java │ │ │ │ ├── DefaultDashBoardService.java │ │ │ │ ├── DefaultDashBordExecutor.java │ │ │ │ ├── dao │ │ │ │ └── DashBoardConfigDao.java │ │ │ │ └── strategy │ │ │ │ └── ScriptExecutorStrategy.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── dashboard │ │ │ └── DashBoardConfigMapper.xml │ ├── hsweb-system-dashboard-starter │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dashboard │ │ │ │ └── starter │ │ │ │ └── DashboardAutoConfiguration.java │ │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── hsweb-starter.js │ ├── hsweb-system-dashboard-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── dashboard │ │ │ ├── DashBoardConfigController.java │ │ │ ├── DashBoardUserConfigController.java │ │ │ └── model │ │ │ └── UserDashBoardResponse.java │ └── pom.xml ├── hsweb-system-database-manager │ ├── README.md │ ├── hsweb-system-database-manager-api │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── database │ │ │ │ └── manager │ │ │ │ ├── DatabaseManagerService.java │ │ │ │ ├── SqlExecuteRequest.java │ │ │ │ ├── SqlExecuteResult.java │ │ │ │ ├── SqlInfo.java │ │ │ │ ├── exception │ │ │ │ └── SqlExecuteException.java │ │ │ │ ├── meta │ │ │ │ ├── ObjectMetadata.java │ │ │ │ └── table │ │ │ │ │ ├── ColumnMetadata.java │ │ │ │ │ ├── Constraint.java │ │ │ │ │ ├── ForeignConstraint.java │ │ │ │ │ ├── TableMetadata.java │ │ │ │ │ └── parser │ │ │ │ │ ├── AbstractSqlTableMetaDataParser.java │ │ │ │ │ ├── MetaDataParser.java │ │ │ │ │ ├── MetaDataParserRegister.java │ │ │ │ │ ├── MetaDataParserSupplier.java │ │ │ │ │ ├── TableMetaDataParser.java │ │ │ │ │ └── support │ │ │ │ │ ├── H2TableMetaDataParser.java │ │ │ │ │ ├── MysqlTableMetaDataParser.java │ │ │ │ │ ├── OracleTableMetaDataParser.java │ │ │ │ │ └── SqlServerTableMetaDataParser.java │ │ │ │ └── sql │ │ │ │ ├── SqlExecutor.java │ │ │ │ ├── TransactionInfo.java │ │ │ │ └── TransactionSqlExecutor.java │ │ │ └── test │ │ │ └── src │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── database │ │ │ └── manager │ │ │ └── meta │ │ │ └── table │ │ │ └── parser │ │ │ └── support │ │ │ └── H2TableMetaDataParserTest.java │ ├── hsweb-system-database-manager-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── datasource │ │ │ └── manager │ │ │ └── simple │ │ │ ├── DefaultLocalTransactionExecutor.java │ │ │ ├── NonTransactionSqlExecutor.java │ │ │ ├── QueryResult.java │ │ │ ├── QueryResultWrapper.java │ │ │ ├── SimpleDatabaseManagerService.java │ │ │ └── TransactionExecutor.java │ ├── hsweb-system-database-manager-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── database │ │ │ │ │ └── manager │ │ │ │ │ ├── DataBaseManagerAutoConfiguration.java │ │ │ │ │ └── TableMetaDataParserAutoConfiguration.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── datasource │ │ │ │ └── manager │ │ │ │ └── simple │ │ │ │ └── SimpleDatabaseManagerServiceTest.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-database-manager-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── database │ │ │ └── manager │ │ │ └── web │ │ │ └── DataBaseManagerController.java │ └── pom.xml ├── hsweb-system-datasource │ ├── README.md │ ├── hsweb-system-datasource-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── datasource │ │ │ │ ├── DataSourceConfigEntity.java │ │ │ │ └── SimpleDataSourceConfigEntity.java │ │ │ └── service │ │ │ └── datasource │ │ │ └── DataSourceConfigService.java │ ├── hsweb-system-datasource-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── datasource │ │ │ │ │ └── DataSourceConfigDao.java │ │ │ │ └── service │ │ │ │ └── datasource │ │ │ │ └── simple │ │ │ │ ├── InDBDataSourceRepository.java │ │ │ │ ├── InDBDynamicDataSourceConfig.java │ │ │ │ ├── InDBDynamicDataSourceService.java │ │ │ │ ├── InDBJtaDynamicDataSourceService.java │ │ │ │ └── SimpleDataSourceConfigService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── datasource │ │ │ └── DataSourceConfigMapper.xml │ ├── hsweb-system-datasource-starter │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── datasource │ │ │ │ └── starter │ │ │ │ └── InDBDynamicDataSourceAutoConfiguration.java │ │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── hsweb-starter.js │ ├── hsweb-system-datasource-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── datasource │ │ │ └── DataSourceConfigController.java │ └── pom.xml ├── hsweb-system-dev-tools │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── hswebframework │ │ └── web │ │ └── dev │ │ └── tools │ │ ├── DevToolsAutoConfiguration.java │ │ ├── EnableDevTools.java │ │ ├── reader │ │ └── FileInfo.java │ │ ├── web │ │ └── FileManagerDevToolsController.java │ │ └── writer │ │ ├── ClassWriter.java │ │ ├── CodeWriter.java │ │ ├── DefaultCodeWriter.java │ │ └── GeneratedCode.java ├── hsweb-system-dictionary │ ├── README.md │ ├── hsweb-system-dictionary-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dictionary │ │ │ └── api │ │ │ ├── DictionaryInfo.java │ │ │ ├── DictionaryInfoService.java │ │ │ ├── DictionaryItemService.java │ │ │ ├── DictionaryParser.java │ │ │ ├── DictionaryParserService.java │ │ │ ├── DictionaryService.java │ │ │ ├── DictionaryWrapper.java │ │ │ ├── builder │ │ │ └── DictionaryParserBuilder.java │ │ │ ├── entity │ │ │ ├── DictionaryEntity.java │ │ │ ├── DictionaryItemEntity.java │ │ │ ├── DictionaryParserEntity.java │ │ │ ├── SimpleDictionaryEntity.java │ │ │ ├── SimpleDictionaryItemEntity.java │ │ │ └── SimpleDictionaryParserEntity.java │ │ │ ├── events │ │ │ └── ClearDictionaryCacheEvent.java │ │ │ └── parser │ │ │ └── SingleDictParser.java │ ├── hsweb-system-dictionary-local │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── dictionary │ │ │ │ │ └── simple │ │ │ │ │ ├── BoostDictDefineRepository.java │ │ │ │ │ ├── DefaultDictionaryHelper.java │ │ │ │ │ ├── DefaultDictionaryWrapper.java │ │ │ │ │ ├── DictionaryWrapperObject.java │ │ │ │ │ ├── SimpleDictionaryItemService.java │ │ │ │ │ ├── SimpleDictionaryParser.java │ │ │ │ │ ├── SimpleDictionaryParserService.java │ │ │ │ │ ├── SimpleDictionaryService.java │ │ │ │ │ ├── builder │ │ │ │ │ └── SimpleDictionaryParserBuilder.java │ │ │ │ │ ├── dao │ │ │ │ │ ├── DictionaryDao.java │ │ │ │ │ ├── DictionaryItemDao.java │ │ │ │ │ └── DictionaryParserDao.java │ │ │ │ │ └── parser │ │ │ │ │ ├── DictParserFormat.java │ │ │ │ │ ├── DictParserFormatter.java │ │ │ │ │ ├── FormatterResult.java │ │ │ │ │ ├── ScriptSingleDictParser.java │ │ │ │ │ ├── SimpleDictParserFormatter.java │ │ │ │ │ └── SimpleSingleDictParser.java │ │ │ └── resources │ │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dao │ │ │ │ └── mybatis │ │ │ │ └── mappers │ │ │ │ └── dictionary │ │ │ │ ├── DictionaryItemMapper.xml │ │ │ │ ├── DictionaryMapper.xml │ │ │ │ └── DictionaryParserMapper.xml │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dictionary │ │ │ └── simple │ │ │ ├── DefaultDictionaryWrapperTest.java │ │ │ ├── EmptyDictBean.java │ │ │ ├── TestBean.java │ │ │ └── TestDict.java │ ├── hsweb-system-dictionary-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── dictionary │ │ │ │ │ └── starter │ │ │ │ │ └── DictionaryFactoryAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── dictionary │ │ │ │ └── starter │ │ │ │ ├── DictionaryParserTests.java │ │ │ │ └── DictionaryTests.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-dictionary-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── dictionary │ │ │ ├── DictionaryController.java │ │ │ ├── DictionaryItemController.java │ │ │ └── DictionaryParserController.java │ └── pom.xml ├── hsweb-system-dynamic-form │ ├── README.md │ ├── hsweb-system-dynamic-form-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── form │ │ │ │ ├── DictConfig.java │ │ │ │ ├── DynamicFormColumnBindEntity.java │ │ │ │ ├── DynamicFormColumnEntity.java │ │ │ │ ├── DynamicFormDeployLogEntity.java │ │ │ │ ├── DynamicFormEntity.java │ │ │ │ ├── SimpleDynamicFormColumnEntity.java │ │ │ │ ├── SimpleDynamicFormDeployLogEntity.java │ │ │ │ └── SimpleDynamicFormEntity.java │ │ │ └── service │ │ │ └── form │ │ │ ├── DatabaseRepository.java │ │ │ ├── DynamicFormColumnService.java │ │ │ ├── DynamicFormDeployLogService.java │ │ │ ├── DynamicFormOperationService.java │ │ │ ├── DynamicFormService.java │ │ │ ├── FormDeployService.java │ │ │ ├── OptionalConvertBuilder.java │ │ │ ├── events │ │ │ ├── DatabaseInitEvent.java │ │ │ ├── FormDataInsertBeforeEvent.java │ │ │ ├── FormDataQueryBeforeEvent.java │ │ │ ├── FormDataUpdateBeforeEvent.java │ │ │ ├── FormDeployEvent.java │ │ │ └── FormUnDeployEvent.java │ │ │ └── initialize │ │ │ ├── ColumnInitializeContext.java │ │ │ ├── DynamicFormInitializeCustomer.java │ │ │ └── TableInitializeContext.java │ ├── hsweb-system-dynamic-form-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── form │ │ │ │ │ ├── DynamicFormColumnDao.java │ │ │ │ │ ├── DynamicFormDao.java │ │ │ │ │ └── DynamicFormDeployLogDao.java │ │ │ │ └── service │ │ │ │ └── form │ │ │ │ └── simple │ │ │ │ ├── DynamicFormException.java │ │ │ │ ├── SimpleDatabaseRepository.java │ │ │ │ ├── SimpleDynamicFormColumnService.java │ │ │ │ ├── SimpleDynamicFormDeployLogService.java │ │ │ │ ├── SimpleDynamicFormOperationService.java │ │ │ │ ├── SimpleDynamicFormService.java │ │ │ │ ├── cluster │ │ │ │ ├── ClusterDatabase.java │ │ │ │ └── ClusterDatabaseInit.java │ │ │ │ ├── convert │ │ │ │ └── SmartValueConverter.java │ │ │ │ ├── dict │ │ │ │ ├── DefaultOptionalConvertBuilder.java │ │ │ │ ├── DictionaryOptionalConvertBuilderStrategy.java │ │ │ │ ├── EnumDictOptionConverter.java │ │ │ │ ├── EnumDictValueConverter.java │ │ │ │ └── OptionalConvertBuilderStrategy.java │ │ │ │ └── validator │ │ │ │ ├── DynamicBeanValidator.java │ │ │ │ ├── DynamicBeanValidatorFactory.java │ │ │ │ ├── JSR303AnnotationInfo.java │ │ │ │ ├── JSR303AnnotationParserStrategy.java │ │ │ │ ├── MapBean.java │ │ │ │ └── jsr303 │ │ │ │ ├── AbstractStrategy.java │ │ │ │ ├── EmailStrategy.java │ │ │ │ ├── LengthStrategy.java │ │ │ │ ├── NotBlankStrategy.java │ │ │ │ ├── NotNullStrategy.java │ │ │ │ └── RangeStrategy.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── form │ │ │ ├── DynamicFormColumnMapper.xml │ │ │ ├── DynamicFormDeployLogMapper.xml │ │ │ └── DynamicFormMapper.xml │ ├── hsweb-system-dynamic-form-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── form │ │ │ │ │ └── DynamicFormAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── service │ │ │ │ └── form │ │ │ │ └── simple │ │ │ │ └── SimpleDynamicFormServiceTest.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-dynamic-form-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── form │ │ │ ├── DynamicFormAuthorizeDefinitionParser.java │ │ │ ├── DynamicFormColumnController.java │ │ │ ├── DynamicFormController.java │ │ │ ├── DynamicFormDeployLogController.java │ │ │ └── DynamicFormOperationController.java │ └── pom.xml ├── hsweb-system-file │ ├── README.md │ ├── hsweb-system-file-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── file │ │ │ │ ├── FileInfoEntity.java │ │ │ │ └── SimpleFileInfoEntity.java │ │ │ └── service │ │ │ └── file │ │ │ ├── FileInfoService.java │ │ │ └── FileService.java │ ├── hsweb-system-file-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── file │ │ │ │ │ └── FileInfoDao.java │ │ │ │ └── service │ │ │ │ └── file │ │ │ │ ├── fastdfs │ │ │ │ └── FdfsFileService.java │ │ │ │ └── simple │ │ │ │ ├── LocalFileService.java │ │ │ │ └── SimpleFileInfoService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── file │ │ │ └── FileInfoMapper.xml │ ├── hsweb-system-file-oauth2 │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── service │ │ │ │ └── file │ │ │ │ └── oauth2 │ │ │ │ ├── OAuth2FileAutoConfiguration.java │ │ │ │ ├── OAuth2FileInfoService.java │ │ │ │ └── OAuth2FileService.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ ├── hsweb-system-file-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── file │ │ │ │ │ └── starter │ │ │ │ │ ├── FastdfsServiceAutoConfiguration.java │ │ │ │ │ └── FileAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── service │ │ │ │ └── file │ │ │ │ └── FileUploadTests.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-file-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── file │ │ │ ├── FileController.java │ │ │ └── FileInfoController.java │ └── pom.xml ├── hsweb-system-oauth2-client │ ├── hsweb-system-oauth2-client-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── oauth2 │ │ │ │ └── client │ │ │ │ ├── OAuth2ServerConfigEntity.java │ │ │ │ ├── OAuth2UserTokenEntity.java │ │ │ │ ├── SimpleOAuth2ServerConfigEntity.java │ │ │ │ └── SimpleOAuth2UserTokenEntity.java │ │ │ └── service │ │ │ └── oauth2 │ │ │ └── client │ │ │ ├── OAuth2ServerConfigService.java │ │ │ └── OAuth2UserTokenService.java │ ├── hsweb-system-oauth2-client-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── oauth2 │ │ │ │ │ └── server │ │ │ │ │ └── client │ │ │ │ │ ├── OAuth2ServerConfigDao.java │ │ │ │ │ └── OAuth2UserTokenDao.java │ │ │ │ └── service │ │ │ │ └── oauth2 │ │ │ │ └── client │ │ │ │ └── simple │ │ │ │ ├── SimpleOAuth2ServerConfigService.java │ │ │ │ └── SimpleOAuth2UserTokenService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── oauth2 │ │ │ └── client │ │ │ ├── OAuth2ServerConfigMapper.xml │ │ │ └── OAuth2UserTokenMapper.xml │ ├── hsweb-system-oauth2-client-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── service │ │ │ │ │ └── oauth2 │ │ │ │ │ └── client │ │ │ │ │ └── starter │ │ │ │ │ └── OAuth2ClientAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── starter │ │ │ │ └── oauth2 │ │ │ │ └── client │ │ │ │ ├── OAuth2ServerConfigTests.java │ │ │ │ ├── QQResponseConvertSupport.java │ │ │ │ └── QQResponseJudgeSupport.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-oauth2-client-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ └── oauth2 │ │ │ └── controller │ │ │ ├── OAuth2ClientController.java │ │ │ ├── OAuth2ServerConfigController.java │ │ │ └── OAuth2UserTokenController.java │ └── pom.xml ├── hsweb-system-oauth2-server │ ├── hsweb-system-oauth2-server-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── oauth2 │ │ │ │ │ └── server │ │ │ │ │ ├── AuthorizationCodeDao.java │ │ │ │ │ ├── OAuth2AccessDao.java │ │ │ │ │ └── OAuth2ClientDao.java │ │ │ │ ├── entity │ │ │ │ └── oauth2 │ │ │ │ │ └── server │ │ │ │ │ ├── AuthorizationCodeEntity.java │ │ │ │ │ ├── OAuth2AccessEntity.java │ │ │ │ │ ├── OAuth2ClientEntity.java │ │ │ │ │ ├── SimpleAuthorizationCodeEntity.java │ │ │ │ │ ├── SimpleOAuth2AccessEntity.java │ │ │ │ │ └── SimpleOAuth2ClientEntity.java │ │ │ │ └── service │ │ │ │ └── oauth2 │ │ │ │ └── server │ │ │ │ └── simple │ │ │ │ ├── CodeGenerator.java │ │ │ │ ├── SimpleAccessTokenService.java │ │ │ │ ├── SimpleAuthorizationCodeService.java │ │ │ │ ├── SimpleClientConfigRepository.java │ │ │ │ ├── SimplePasswordService.java │ │ │ │ └── TokenGenerator.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── oauth2 │ │ │ ├── OAuth2AccessMapper.xml │ │ │ ├── OAuth2ClientMapper.xml │ │ │ └── OAuth2CodeMapper.xml │ ├── hsweb-system-oauth2-server-starter │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── oauth2 │ │ │ │ ├── OAuth2GrantEventListener.java │ │ │ │ ├── OAuth2GranterAutoConfiguration.java │ │ │ │ └── authorization │ │ │ │ └── OAuth2UserTokenParser.java │ │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── hsweb-starter.js │ ├── hsweb-system-oauth2-server-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── authorization │ │ │ └── oauth2 │ │ │ ├── controller │ │ │ ├── OAuth2AuthorizeController.java │ │ │ ├── OAuth2ClientConfigController.java │ │ │ ├── OAuth2TokenController.java │ │ │ └── OAuth2UserInfoController.java │ │ │ └── model │ │ │ ├── AccessTokenModel.java │ │ │ ├── AuthorizationCodeModel.java │ │ │ └── ImplicitAccessTokenModel.java │ └── pom.xml ├── hsweb-system-organizational │ ├── README.md │ ├── hsweb-system-organizational-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── organizational │ │ │ │ ├── DepartmentEntity.java │ │ │ │ ├── DistrictEntity.java │ │ │ │ ├── OrganizationalEntity.java │ │ │ │ ├── PersonAuthBindEntity.java │ │ │ │ ├── PersonEntity.java │ │ │ │ ├── PersonPositionEntity.java │ │ │ │ ├── PersonUserEntity.java │ │ │ │ ├── PositionEntity.java │ │ │ │ ├── RelationDefineEntity.java │ │ │ │ ├── RelationInfoEntity.java │ │ │ │ ├── SimpleDepartmentEntity.java │ │ │ │ ├── SimpleDistrictEntity.java │ │ │ │ ├── SimpleOrganizationalEntity.java │ │ │ │ ├── SimplePersonAuthBindEntity.java │ │ │ │ ├── SimplePersonEntity.java │ │ │ │ ├── SimplePersonPositionEntity.java │ │ │ │ ├── SimplePositionEntity.java │ │ │ │ ├── SimpleRelationDefineEntity.java │ │ │ │ └── SimpleRelationInfoEntity.java │ │ │ └── service │ │ │ └── organizational │ │ │ ├── DepartmentService.java │ │ │ ├── DistrictService.java │ │ │ ├── OrganizationalService.java │ │ │ ├── PersonService.java │ │ │ ├── PositionService.java │ │ │ ├── RelationDefineService.java │ │ │ ├── RelationInfoService.java │ │ │ └── event │ │ │ └── ClearPersonCacheEvent.java │ ├── hsweb-system-organizational-authorization │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── organizational │ │ │ │ │ └── authorization │ │ │ │ │ ├── DefaultPersonnelAuthenticationSupplier.java │ │ │ │ │ ├── Department.java │ │ │ │ │ ├── District.java │ │ │ │ │ ├── Organization.java │ │ │ │ │ ├── OrganizationalAuthorizationAutoConfiguration.java │ │ │ │ │ ├── Personnel.java │ │ │ │ │ ├── PersonnelAuthentication.java │ │ │ │ │ ├── PersonnelAuthenticationHolder.java │ │ │ │ │ ├── PersonnelAuthenticationManager.java │ │ │ │ │ ├── PersonnelAuthenticationSettingTypeSupplier.java │ │ │ │ │ ├── PersonnelAuthenticationSupplier.java │ │ │ │ │ ├── Position.java │ │ │ │ │ ├── TreeNode.java │ │ │ │ │ ├── access │ │ │ │ │ ├── DataAccessType.java │ │ │ │ │ ├── DepartmentAttachEntity.java │ │ │ │ │ ├── DistrictAttachEntity.java │ │ │ │ │ ├── OrgAttachEntity.java │ │ │ │ │ ├── PersonAttachEntity.java │ │ │ │ │ └── PositionAttachEntity.java │ │ │ │ │ ├── relation │ │ │ │ │ ├── DepartmentRelations.java │ │ │ │ │ ├── LinkedRelations.java │ │ │ │ │ ├── OrgRelations.java │ │ │ │ │ ├── PersonRelations.java │ │ │ │ │ ├── Relation.java │ │ │ │ │ ├── RelationTargetHolder.java │ │ │ │ │ ├── RelationTargetSupplier.java │ │ │ │ │ ├── RelationTargetSupplierAutoRegister.java │ │ │ │ │ ├── Relations.java │ │ │ │ │ ├── RelationsManager.java │ │ │ │ │ ├── SimpleRelation.java │ │ │ │ │ └── SimpleRelations.java │ │ │ │ │ └── simple │ │ │ │ │ ├── CustomScope.java │ │ │ │ │ ├── CustomScopeDataAccessConfigConvert.java │ │ │ │ │ ├── ScopeDataAccessConfigConvert.java │ │ │ │ │ ├── SimpleCustomScopeDataAccessConfig.java │ │ │ │ │ ├── SimpleDepartment.java │ │ │ │ │ ├── SimpleDistrict.java │ │ │ │ │ ├── SimpleOrganization.java │ │ │ │ │ ├── SimplePersonnel.java │ │ │ │ │ ├── SimplePersonnelAuthentication.java │ │ │ │ │ ├── SimplePersonnelAuthorizationBuilder.java │ │ │ │ │ ├── SimplePosition.java │ │ │ │ │ ├── SimpleScopeDataAccessConfig.java │ │ │ │ │ └── handler │ │ │ │ │ ├── AbstractScopeDataAccessHandler.java │ │ │ │ │ ├── CustomScopeHandler.java │ │ │ │ │ ├── DepartmentScopeDataAccessHandler.java │ │ │ │ │ ├── DistrictScopeDataAccessHandler.java │ │ │ │ │ ├── OrgScopeDataAccessHandler.java │ │ │ │ │ ├── PersonScopeDataAccessHandler.java │ │ │ │ │ └── PositionScopeDataAccessHandler.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── spring.factories │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── organizational │ │ │ └── authorization │ │ │ └── simple │ │ │ └── SimplePersonnelAuthenticationBuilderTest.java │ ├── hsweb-system-organizational-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── organizational │ │ │ │ │ ├── DepartmentDao.java │ │ │ │ │ ├── DistrictDao.java │ │ │ │ │ ├── OrganizationalDao.java │ │ │ │ │ ├── PersonDao.java │ │ │ │ │ ├── PersonPositionDao.java │ │ │ │ │ ├── PositionDao.java │ │ │ │ │ ├── RelationDefineDao.java │ │ │ │ │ └── RelationInfoDao.java │ │ │ │ └── service │ │ │ │ └── organizational │ │ │ │ └── simple │ │ │ │ ├── SimpleDepartmentService.java │ │ │ │ ├── SimpleDistrictService.java │ │ │ │ ├── SimpleOrganizationalService.java │ │ │ │ ├── SimplePersonService.java │ │ │ │ ├── SimplePositionService.java │ │ │ │ ├── SimpleRelationDefineService.java │ │ │ │ ├── SimpleRelationInfoService.java │ │ │ │ ├── relations │ │ │ │ ├── DefaultDepartmentRelations.java │ │ │ │ ├── DefaultLinkedRelations.java │ │ │ │ ├── DefaultOrgRelations.java │ │ │ │ ├── DefaultPersonRelations.java │ │ │ │ ├── DefaultRelationsManager.java │ │ │ │ └── ServiceContext.java │ │ │ │ └── terms │ │ │ │ ├── CustomSqlTermConfiguration.java │ │ │ │ ├── InServiceTreeInSqlTerm.java │ │ │ │ ├── UserInDepartmentSqlTerm.java │ │ │ │ ├── UserInDistSqlTerm.java │ │ │ │ ├── UserInOrgSqlTerm.java │ │ │ │ ├── UserInPositionSqlTerm.java │ │ │ │ └── UserInSqlTerm.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── organizational │ │ │ ├── DepartmentMapper.xml │ │ │ ├── DistrictMapper.xml │ │ │ ├── OrganizationalMapper.xml │ │ │ ├── PersonMapper.xml │ │ │ ├── PersonPositionMapper.xml │ │ │ ├── PositionMapper.xml │ │ │ ├── RelationDefineMapper.xml │ │ │ └── RelationInfoMapper.xml │ ├── hsweb-system-organizational-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── organizational │ │ │ │ │ └── starter │ │ │ │ │ └── AuthorizationAutoConfigration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── starter │ │ │ │ └── organizational │ │ │ │ ├── DepartmentTests.java │ │ │ │ ├── OrganizationalTests.java │ │ │ │ ├── PersonTests.java │ │ │ │ ├── PositionTests.java │ │ │ │ ├── RelationsManagerTests.groovy │ │ │ │ └── TestApplication.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-organizational-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── organizational │ │ │ ├── DepartmentController.java │ │ │ ├── DistrictController.java │ │ │ ├── OrganizationalController.java │ │ │ ├── PersonController.java │ │ │ ├── PositionController.java │ │ │ ├── RelationDefineController.java │ │ │ └── RelationInfoController.java │ └── pom.xml ├── hsweb-system-schedule │ ├── README.md │ ├── hsweb-system-schedule-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── schedule │ │ │ │ ├── ScheduleJobEntity.java │ │ │ │ └── SimpleScheduleJobEntity.java │ │ │ └── service │ │ │ └── schedule │ │ │ ├── ScheduleJobExecutor.java │ │ │ ├── ScheduleJobService.java │ │ │ └── ScheduleTriggerBuilder.java │ ├── hsweb-system-schedule-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── schedule │ │ │ │ │ └── ScheduleJobDao.java │ │ │ │ └── service │ │ │ │ └── schedule │ │ │ │ └── simple │ │ │ │ ├── DefaultScriptScheduleJobExecutor.java │ │ │ │ ├── DynamicJob.java │ │ │ │ ├── DynamicJobFactory.java │ │ │ │ ├── SimpleScheduleJobService.java │ │ │ │ └── SmartScheduleTriggerBuilder.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── schedule │ │ │ └── ScheduleJobMapper.xml │ ├── hsweb-system-schedule-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── schedule │ │ │ │ │ └── configuration │ │ │ │ │ ├── AutoCreateTable.java │ │ │ │ │ ├── ScheduleAutoConfiguration.java │ │ │ │ │ └── SchedulerProperties.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ ├── hsweb-starter.js │ │ │ │ └── quartz │ │ │ │ └── sql │ │ │ │ ├── quartz-h2-create.sql │ │ │ │ ├── quartz-mysql-create.sql │ │ │ │ └── quartz-oracle-create.sql │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── schedule │ │ │ │ └── test │ │ │ │ ├── DynamicScheduleTests.java │ │ │ │ └── ScheduleTests.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-schedule-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── schedule │ │ │ └── ScheduleJobController.java │ └── pom.xml ├── hsweb-system-script │ ├── README.md │ ├── hsweb-system-script-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── script │ │ │ │ ├── ScriptEntity.java │ │ │ │ └── SimpleScriptEntity.java │ │ │ └── service │ │ │ └── script │ │ │ ├── ScriptExecutorService.java │ │ │ └── ScriptService.java │ ├── hsweb-system-script-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── script │ │ │ │ │ └── ScriptDao.java │ │ │ │ └── service │ │ │ │ └── script │ │ │ │ └── simple │ │ │ │ ├── DefaultScriptExecutorService.java │ │ │ │ └── SimpleScriptService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── script │ │ │ └── ScriptMapper.xml │ ├── hsweb-system-script-starter │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── service │ │ │ │ │ └── dynamic │ │ │ │ │ └── script │ │ │ │ │ └── DynamicScriptAutoConfiguration.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── hsweb-starter.js │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── workflow │ │ │ │ └── flowable │ │ │ │ └── ControllerTest.java │ │ │ └── resources │ │ │ └── application.yml │ ├── hsweb-system-script-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── script │ │ │ └── ScriptController.java │ └── pom.xml ├── hsweb-system-template │ ├── README.md │ ├── hsweb-system-template-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ ├── entity │ │ │ └── template │ │ │ │ ├── SimpleTemplateEntity.java │ │ │ │ └── TemplateEntity.java │ │ │ └── service │ │ │ └── template │ │ │ ├── TemplateRendeFacotry.java │ │ │ ├── TemplateRender.java │ │ │ └── TemplateService.java │ ├── hsweb-system-template-local │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ ├── dao │ │ │ │ └── template │ │ │ │ │ └── TemplateDao.java │ │ │ │ └── service │ │ │ │ └── template │ │ │ │ └── simple │ │ │ │ └── SimpleTemplateService.java │ │ │ └── resources │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── dao │ │ │ └── mybatis │ │ │ └── mappers │ │ │ └── template │ │ │ └── TemplateMapper.xml │ ├── hsweb-system-template-starter │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── template │ │ │ │ └── starter │ │ │ │ └── TemplateAutoConfiguration.java │ │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── hsweb-starter.js │ ├── hsweb-system-template-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── hswebframework │ │ │ └── web │ │ │ └── controller │ │ │ └── template │ │ │ └── TemplateController.java │ └── pom.xml ├── hsweb-system-workflow │ ├── README.md │ ├── hsweb-system-workflow-local │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── workflow │ │ │ │ │ ├── dao │ │ │ │ │ ├── ActivityConfigDao.java │ │ │ │ │ ├── ProcessDefineConfigDao.java │ │ │ │ │ ├── ProcessHistoryDao.java │ │ │ │ │ └── entity │ │ │ │ │ │ ├── ActivityConfigEntity.java │ │ │ │ │ │ ├── ListenerConfig.java │ │ │ │ │ │ ├── ProcessDefineConfigEntity.java │ │ │ │ │ │ └── ProcessHistoryEntity.java │ │ │ │ │ ├── dimension │ │ │ │ │ ├── CandidateDimension.java │ │ │ │ │ ├── CandidateDimensionParser.java │ │ │ │ │ ├── DefaultCandidateDimensionParser.java │ │ │ │ │ ├── DefaultPermissionDimensionParser.java │ │ │ │ │ ├── DimensionContext.java │ │ │ │ │ ├── PermissionDimensionParser.java │ │ │ │ │ └── parser │ │ │ │ │ │ ├── CandidateDimensionParserStrategy.java │ │ │ │ │ │ ├── DepartmentCandidateDimensionParserStrategy.java │ │ │ │ │ │ ├── OrgCandidateDimensionParserStrategy.java │ │ │ │ │ │ ├── PositionCandidateDimensionParserStrategy.java │ │ │ │ │ │ ├── RoleCandidateDimensionParserStrategy.java │ │ │ │ │ │ ├── ScriptCandiateDimensionParserStrategy.java │ │ │ │ │ │ └── UserCandidateDimensionParserStrategy.java │ │ │ │ │ ├── flowable │ │ │ │ │ ├── FlowableAutoConfiguration.java │ │ │ │ │ └── utils │ │ │ │ │ │ ├── ActivitiUserUtil.java │ │ │ │ │ │ ├── CustomGroupEntityManager.java │ │ │ │ │ │ ├── CustomGroupEntityManagerFactory.java │ │ │ │ │ │ ├── CustomUserEntityManager.java │ │ │ │ │ │ ├── CustomUserEntityManagerFactory.java │ │ │ │ │ │ └── JumpTaskCmd.java │ │ │ │ │ ├── listener │ │ │ │ │ ├── GlobalEventListenerDispatcher.java │ │ │ │ │ ├── ProcessEvent.java │ │ │ │ │ ├── ProcessEventListener.java │ │ │ │ │ ├── TaskEvent.java │ │ │ │ │ └── TaskEventListener.java │ │ │ │ │ ├── service │ │ │ │ │ ├── ActivityConfigService.java │ │ │ │ │ ├── BpmActivityService.java │ │ │ │ │ ├── BpmProcessService.java │ │ │ │ │ ├── BpmTaskService.java │ │ │ │ │ ├── ProcessDefineConfigService.java │ │ │ │ │ ├── ProcessHistoryService.java │ │ │ │ │ ├── WorkFlowFormService.java │ │ │ │ │ ├── config │ │ │ │ │ │ ├── ActivityConfiguration.java │ │ │ │ │ │ ├── CandidateInfo.java │ │ │ │ │ │ ├── ProcessConfiguration.java │ │ │ │ │ │ └── ProcessConfigurationService.java │ │ │ │ │ ├── imp │ │ │ │ │ │ ├── AbstractFlowableService.java │ │ │ │ │ │ ├── ActivityConfigServiceImpl.java │ │ │ │ │ │ ├── BpmActivityServiceImpl.java │ │ │ │ │ │ ├── BpmProcessServiceImpl.java │ │ │ │ │ │ ├── BpmTaskServiceImpl.java │ │ │ │ │ │ ├── ProcessConfigurationServiceImpl.java │ │ │ │ │ │ ├── ProcessDefineConfigServiceImpl.java │ │ │ │ │ │ ├── ProcessHistoryServiceImpl.java │ │ │ │ │ │ └── WorkFlowFormServiceImpl.java │ │ │ │ │ └── request │ │ │ │ │ │ ├── CompleteTaskRequest.java │ │ │ │ │ │ ├── JumpTaskRequest.java │ │ │ │ │ │ ├── RejectTaskRequest.java │ │ │ │ │ │ ├── SaveFormRequest.java │ │ │ │ │ │ └── StartProcessRequest.java │ │ │ │ │ ├── terms │ │ │ │ │ ├── ClaimSqlTerm.java │ │ │ │ │ ├── CompletedSqlTerm.java │ │ │ │ │ ├── ProcessParticipateSqlTerm.java │ │ │ │ │ ├── TodoSqlTerm.java │ │ │ │ │ └── WorkflowTermsAutoConfiguration.java │ │ │ │ │ ├── util │ │ │ │ │ └── QueryUtils.java │ │ │ │ │ └── web │ │ │ │ │ ├── FlowableDeploymentController.java │ │ │ │ │ ├── FlowableModelManagerController.java │ │ │ │ │ ├── FlowableProcessController.java │ │ │ │ │ ├── ProcessActivityConfigController.java │ │ │ │ │ ├── ProcessDefineConfigController.java │ │ │ │ │ ├── diagram │ │ │ │ │ ├── BaseProcessDefinitionDiagramLayoutResource.java │ │ │ │ │ ├── ProcessDefinitionDiagramLayoutResource.java │ │ │ │ │ ├── ProcessInstanceDiagramLayoutResource.java │ │ │ │ │ └── ProcessInstanceHighlightsResource.java │ │ │ │ │ ├── request │ │ │ │ │ └── ModelCreateRequest.java │ │ │ │ │ └── response │ │ │ │ │ ├── ActivityInfo.java │ │ │ │ │ ├── CandidateDetail.java │ │ │ │ │ ├── ProcessDefinitionInfo.java │ │ │ │ │ ├── ProcessInfo.java │ │ │ │ │ └── TaskInfo.java │ │ │ └── resources │ │ │ │ ├── hsweb-starter.js │ │ │ │ ├── org │ │ │ │ └── hswebframework │ │ │ │ │ └── web │ │ │ │ │ └── dao │ │ │ │ │ └── mybatis │ │ │ │ │ └── mappers │ │ │ │ │ └── workflow │ │ │ │ │ ├── ActivityConfigMapper.xml │ │ │ │ │ ├── ProcessDefineConfigMapper.xml │ │ │ │ │ └── ProcessHistoryMapper.xml │ │ │ │ └── processes │ │ │ │ └── README.md │ │ │ └── test │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── workflow │ │ │ │ ├── dimension │ │ │ │ └── DefaultCandidateDimensionParserTest.groovy │ │ │ │ └── flowable │ │ │ │ ├── TestApplication.java │ │ │ │ ├── WorkFlowModelTests.groovy │ │ │ │ └── WorkFlowProcessTests.groovy │ │ │ └── resources │ │ │ ├── application-dev.yml │ │ │ ├── application.yml │ │ │ └── processes │ │ │ ├── README.md │ │ │ └── SimpleProcess.bpmn20.xml │ ├── hsweb-system-workflow-starter │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── workflow │ │ │ │ └── starter │ │ │ │ └── WorkFlowAutoConfiguration.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring.factories │ └── pom.xml └── pom.xml ├── hsweb-tests ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── hswebframework │ └── web │ └── tests │ ├── SimpleWebApplicationTests.java │ ├── TestProcess.java │ ├── TestProcessSetUp.java │ └── TestResult.java ├── hsweb-thirdparty ├── README.md ├── hsweb-thirdparty-ueditor │ ├── README.md │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ ├── com │ │ │ │ └── baidu │ │ │ │ │ └── ueditor │ │ │ │ │ ├── ActionEnter.java │ │ │ │ │ ├── ConfigManager.java │ │ │ │ │ ├── Context.java │ │ │ │ │ ├── Encoder.java │ │ │ │ │ ├── PathFormat.java │ │ │ │ │ ├── define │ │ │ │ │ ├── ActionMap.java │ │ │ │ │ ├── ActionState.java │ │ │ │ │ ├── AppInfo.java │ │ │ │ │ ├── BaseState.java │ │ │ │ │ ├── FileType.java │ │ │ │ │ ├── MIMEType.java │ │ │ │ │ ├── MultiState.java │ │ │ │ │ └── State.java │ │ │ │ │ ├── hunter │ │ │ │ │ ├── FileManager.java │ │ │ │ │ └── ImageHunter.java │ │ │ │ │ └── upload │ │ │ │ │ ├── Base64Uploader.java │ │ │ │ │ ├── BinaryUploader.java │ │ │ │ │ ├── StorageManager.java │ │ │ │ │ └── Uploader.java │ │ │ └── org │ │ │ │ └── hswebframework │ │ │ │ └── web │ │ │ │ └── thirdpart │ │ │ │ └── ueditor │ │ │ │ ├── UeditorAutoConfiguration.java │ │ │ │ └── UeditorController.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ └── spring.factories │ │ └── test │ │ └── java │ │ └── com │ │ └── baidu │ │ └── ueditor │ │ └── define │ │ └── MultiStateTest.java └── pom.xml ├── pom.xml └── quick-start ├── AUTZ.md ├── README.md ├── USE-CRUD.md ├── UTILS.md └── img ├── create-application-java.gif ├── create-application-yml.gif ├── create-controller.gif ├── create-dao.gif ├── create-entity.gif ├── create-mybatis-mapper.gif ├── create-project.gif ├── create-service.gif ├── idea-test.gif ├── import-authorization-module.gif ├── import-commons-module.gif ├── start-application.gif └── test-auth.gif /.gitignore: -------------------------------------------------------------------------------- 1 | **/pom.xml.versionsBackup 2 | **/target/ 3 | **/out/ 4 | **/log/ 5 | *.class 6 | # Mobile Tools for Java (J2ME) 7 | .mtj.tmp/ 8 | .idea/ 9 | /nbproject 10 | *.ipr 11 | *.iws 12 | *.iml 13 | 14 | # Package Files # 15 | *.jar 16 | *.war 17 | *.ear 18 | *.log 19 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 20 | hs_err_pid* 21 | **/transaction-logs/ 22 | pom.xml.versionsBackup 23 | build/ -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | sudo: false 3 | jdk: 4 | - oraclejdk8 5 | addons: 6 | sonarcloud: 7 | organization: "hsweb" 8 | token: 9 | secure: "fba01e9fb57104fd0cfbed380e8c90301e35ff09" 10 | script: 11 | - mvn test sonar:sonar 12 | after_success: 13 | - bash <(curl -s https://codecov.io/bash) 14 | cache: 15 | directories: 16 | - '$HOME/.m2/repository' 17 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 贡献你的代码 2 | 1. fork 本仓库 3 | 2. 修改,增加代码 4 | 3. 执行`mvn test`通过 5 | 4. 提交`pull request` 6 | 5. 坐等审查 7 | 6. 合并 8 | 9 | # BUG 10 | 如果知道导致bug的位置,你可以直接修改后`pull request`,也可以[勾出bug所在位置](docs/help/submit-code-issues.md),然后提交[issues](https://github.com/hs-web/hsweb-framework/issues/new) 11 | 并 `@zhou-hao`,label 选择`bug`.我们会尽快解决. 12 | 13 | # 需求&优化 14 | 你可以通过issues提交你希望`hsweb`增加的特性以及功能优化,并可以在 [projects](https://github.com/hs-web/hsweb-framework/projects)中查看`hsweb`的开发进展以及计划. 15 | 16 | # 社区&交流 17 | 你可以通过提交`issues`或者加入官方QQ群:[515649185](http://shang.qq.com/wpa/qunwpa?idkey=3d66b5dd14991d7645af694e7649b373f3a9ce1216131094c78cb2348d542c41) 18 | 以及发送邮件和我们取得联系. 19 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 1. 问题描述: 2 | 2. 复现步骤: 3 | 3. 日志内容: -------------------------------------------------------------------------------- /hsweb-authorization/README.md: -------------------------------------------------------------------------------- 1 | # 授权认证模块 2 | 用于整个系统的授权认证管理 3 | 4 | # 目录介绍 5 | 1. [hsweb-authorization-api](hsweb-authorization-api):权限控制API 6 | 2. [hsweb-authorization-oauth2](hsweb-authorization-oauth2):oauth2支持 7 | 3. [hsweb-authorization-basic](hsweb-authorization-basic):权限控制基础实现 8 | 4. [hsweb-authorization-jwt](hsweb-authorization-jwt):权限控制jwt拓展 9 | 10 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/define.md: -------------------------------------------------------------------------------- 1 | # 权限配置定义 2 | 3 | 用于告诉权限框架哪些请求需要进行权限控制,怎么控制. -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/AuthenticationRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0.0-RC 8 | */ 9 | public interface AuthenticationRequest extends Serializable { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/CustomDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | /** 4 | * 自定义控制器的数据级权限控制器 5 | * 6 | * @author zhouhao 7 | * @see DefaultType#CUSTOM 8 | */ 9 | public interface CustomDataAccessConfig extends DataAccessConfig { 10 | 11 | /** 12 | * @return 自定义的控制器 13 | */ 14 | DataAccessController getController(); 15 | 16 | @Override 17 | default String getType() { 18 | return DefaultType.CUSTOM; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/DataAccessController.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | import org.hswebframework.web.authorization.define.AuthorizingContext; 4 | 5 | /** 6 | * 数据级别权限控制器,通过此控制器对当前登录用户进行的操作进行数据级别的权限控制。 7 | * 如:A用户只能查询自己创建的B数据,A用户只能修改自己创建的B数据 8 | * 9 | * @author zhouhao 10 | * @since 3.0 11 | */ 12 | public interface DataAccessController { 13 | /** 14 | * 执行权限控制 15 | * @param access 控制方式以及配置 16 | * @param context 权限验证上下文,用于传递验证过程用到的参数 17 | * @return 授权是否通过 18 | */ 19 | boolean doAccess(DataAccessConfig access, AuthorizingContext context); 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/DataAccessHandler.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | import org.hswebframework.web.authorization.define.AuthorizingContext; 4 | 5 | /** 6 | * 数据级别权限控制处理器接口,负责处理支持的权限控制配置 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface DataAccessHandler { 11 | 12 | /** 13 | * 是否支持处理此配置 14 | * 15 | * @param access 控制配置 16 | * @return 是否支持 17 | */ 18 | boolean isSupport(DataAccessConfig access); 19 | 20 | /** 21 | * 执行处理,返回处理结果 22 | * 23 | * @param access 控制配置 24 | * @param context 参数上下文 25 | * @return 处理结果 26 | */ 27 | boolean handle(DataAccessConfig access, AuthorizingContext context); 28 | } 29 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/FieldFilterDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 对字段进行过滤操作配置,实现字段级别的权限控制 7 | * 8 | * @author zhouhao 9 | * @see DataAccessConfig 10 | * @see org.hswebframework.web.authorization.simple.SimpleFieldFilterDataAccessConfig 11 | */ 12 | public interface FieldFilterDataAccessConfig extends DataAccessConfig { 13 | Set getFields(); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/FieldScopeDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | 4 | import static org.hswebframework.web.authorization.access.DataAccessConfig.DefaultType.FIELD_SCOPE; 5 | 6 | /** 7 | * 范围数据权限控制配置,控制某个字段的值在范围内 8 | * 9 | * @author zhouhao 10 | * @see ScopeDataAccessConfig 11 | * @since 3.0 12 | */ 13 | public interface FieldScopeDataAccessConfig extends ScopeDataAccessConfig { 14 | /** 15 | * @return 字段信息 16 | */ 17 | String getField(); 18 | 19 | @Override 20 | default String getType() { 21 | return FIELD_SCOPE; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/OwnCreatedDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | /** 4 | * 只能操作由自己创建的数据 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface OwnCreatedDataAccessConfig extends DataAccessConfig { 9 | @Override 10 | default String getType() { 11 | return DefaultType.OWN_CREATED; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/ScopeDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 范围数据权限控制配置 7 | * 8 | * @author zhouhao 9 | * @see DataAccessConfig 10 | * @since 3.0 11 | */ 12 | public interface ScopeDataAccessConfig extends DataAccessConfig { 13 | 14 | /** 15 | * @return 范围类型 16 | */ 17 | String getScopeType(); 18 | 19 | /** 20 | * @return 自定义的控制范围 21 | */ 22 | Set getScope(); 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/access/ScriptDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.access; 2 | 3 | /** 4 | * 通过脚本来控制数据操作权限.脚本可以在前端设置角色的时候进行编辑 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface ScriptDataAccessConfig extends DataAccessConfig { 9 | @Override 10 | default String getType() { 11 | return DefaultType.SCRIPT; 12 | } 13 | 14 | /** 15 | * 脚本语言: javascript(js),groovy 16 | * 17 | * @return 语言 18 | */ 19 | String getScriptLanguage(); 20 | 21 | /** 22 | * 脚本内容,在进行验证的时候会执行脚本 23 | * 24 | * @return 脚本 25 | */ 26 | String getScript(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/builder/AuthenticationBuilderFactory.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.builder; 2 | 3 | /** 4 | * 权限构造器工厂 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface AuthenticationBuilderFactory { 9 | /** 10 | * @return 新建一个权限构造器 11 | */ 12 | AuthenticationBuilder create(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/builder/DataAccessConfigBuilder.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.builder; 2 | 3 | import org.hswebframework.web.authorization.access.DataAccessConfig; 4 | 5 | /** 6 | * 7 | * @author zhouhao 8 | */ 9 | public interface DataAccessConfigBuilder { 10 | DataAccessConfigBuilder fromJson(String json); 11 | 12 | DataAccessConfig build(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/builder/DataAccessConfigBuilderFactory.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.builder; 2 | 3 | /** 4 | * 数据权限配置构造器工厂 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface DataAccessConfigBuilderFactory { 9 | /** 10 | * @return 新建一个数据权限配置构造器工厂 11 | */ 12 | DataAccessConfigBuilder create(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/AopAuthorizeDefinition.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.define; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 1.0 8 | */ 9 | public interface AopAuthorizeDefinition extends AuthorizeDefinition { 10 | Class getTargetClass(); 11 | 12 | Method getTargetMethod(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/DataAccessDefinition.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.define; 2 | 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * 8 | * @author zhouhao 9 | * @see org.hswebframework.web.authorization.annotation.RequiresDataAccess 10 | */ 11 | public interface DataAccessDefinition extends Serializable { 12 | 13 | String getController(); 14 | 15 | String getIdParameterName(); 16 | 17 | Phased getPhased(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/HandleType.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.define; 2 | 3 | public enum HandleType{ 4 | RBAC,DATA 5 | } -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/Phased.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.define; 2 | 3 | public enum Phased { 4 | before, after 5 | } -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/Script.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.define; 2 | 3 | 4 | /** 5 | * 使用脚本进行权限控制 6 | * 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | public interface Script { 11 | /** 12 | * @return 脚本语言, js,groovy,spel等 13 | */ 14 | String getLanguage(); 15 | 16 | /** 17 | * js: 18 | *
19 |      *    return auth.hasRole("admin");
20 |      * 
21 | * 22 | * @return 脚本内容 23 | */ 24 | String getScript(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/exception/AccessDenyException.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.exception; 2 | 3 | /** 4 | * 权限验证异常 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public class AccessDenyException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = -5135300127303801430L; 12 | 13 | public AccessDenyException() { 14 | this("权限不足,拒绝访问!"); 15 | } 16 | 17 | public AccessDenyException(String message) { 18 | super(message); 19 | } 20 | 21 | public AccessDenyException(String message, Throwable cause) { 22 | super(message, cause); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/listener/AuthorizationListener.java: -------------------------------------------------------------------------------- 1 | 2 | package org.hswebframework.web.authorization.listener; 3 | 4 | 5 | import org.hswebframework.web.authorization.listener.event.AuthorizationEvent; 6 | 7 | /** 8 | * 授权监听器,用于监听授权过程,以及自定义授权逻辑 9 | * 已弃用,请使用{@link org.springframework.context.ApplicationListener} 10 | * 11 | * @author zhouhao 12 | * @see AuthorizationEvent 13 | * @since 3.0 14 | */ 15 | @Deprecated 16 | public interface AuthorizationListener { 17 | void on(E event); 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/AbstractDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import org.hswebframework.web.authorization.access.DataAccessConfig; 4 | 5 | /** 6 | * @author zhouhao 7 | * @see DataAccessConfig 8 | * @since 3.0 9 | */ 10 | public abstract class AbstractDataAccessConfig implements DataAccessConfig { 11 | 12 | private static final long serialVersionUID = -9025349704771557106L; 13 | 14 | private String action; 15 | 16 | @Override 17 | public String getAction() { 18 | return action; 19 | } 20 | 21 | public void setAction(String action) { 22 | this.action = action; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/PlainTextUsernamePasswordAuthenticationRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hswebframework.web.authorization.AuthenticationRequest; 8 | 9 | /** 10 | * @author zhouhao 11 | * @since 3.0.0-RC 12 | */ 13 | @Getter 14 | @Setter 15 | @AllArgsConstructor 16 | @NoArgsConstructor 17 | public class PlainTextUsernamePasswordAuthenticationRequest implements AuthenticationRequest { 18 | private String username; 19 | 20 | private String password; 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/SimpleOwnCreatedDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import org.hswebframework.web.authorization.access.OwnCreatedDataAccessConfig; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public class SimpleOwnCreatedDataAccessConfig extends AbstractDataAccessConfig implements OwnCreatedDataAccessConfig { 10 | 11 | private static final long serialVersionUID = -6059330812806119730L; 12 | 13 | public SimpleOwnCreatedDataAccessConfig() { 14 | } 15 | 16 | public SimpleOwnCreatedDataAccessConfig(String action) { 17 | setAction(action); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/SimpleRole.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import lombok.*; 4 | import org.hswebframework.web.authorization.Role; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | @Getter 10 | @Setter 11 | @Builder 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class SimpleRole implements Role { 15 | 16 | private static final long serialVersionUID = 7460859165231311347L; 17 | 18 | private String id; 19 | 20 | private String name; 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/SimpleScriptDataAccessConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import lombok.*; 4 | import org.hswebframework.web.authorization.access.ScriptDataAccessConfig; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | @Getter 10 | @Setter 11 | @Builder 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class SimpleScriptDataAccessConfig extends AbstractDataAccessConfig implements ScriptDataAccessConfig { 15 | 16 | private static final long serialVersionUID = 2667127339980983720L; 17 | 18 | private String script; 19 | 20 | private String scriptLanguage; 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/SimpleUser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple; 2 | 3 | import lombok.*; 4 | import org.hswebframework.web.authorization.User; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | @Builder 14 | public class SimpleUser implements User { 15 | 16 | private static final long serialVersionUID = 2194541828191869091L; 17 | 18 | private String id; 19 | 20 | private String username; 21 | 22 | private String name; 23 | 24 | private String type; 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/builder/DataAccessConfigConvert.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.simple.builder; 2 | 3 | import org.hswebframework.web.authorization.access.DataAccessConfig; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface DataAccessConfigConvert { 9 | 10 | boolean isSupport(String type, String action, String config); 11 | 12 | DataAccessConfig convert(String type, String action, String config); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/AllopatricLoginMode.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.token; 2 | 3 | /** 4 | * 异地登录模式 5 | */ 6 | public enum AllopatricLoginMode { 7 | /** 8 | * 如果用户已在其他地方登录,则拒绝登录 9 | */ 10 | deny, 11 | /** 12 | * 可以登录,同一个用户可在不同的地点登录 13 | */ 14 | allow, 15 | /** 16 | * 如果用户已在其他地方登录,则将已登录的用户踢下线 17 | */ 18 | offlineOther 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/ThirdPartAuthenticationManager.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.token; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 1.0 8 | */ 9 | public interface ThirdPartAuthenticationManager { 10 | 11 | /** 12 | * @return 支持的tokenType 13 | */ 14 | String getTokenType(); 15 | 16 | /** 17 | * 根据用户ID获取权限信息 18 | * 19 | * @param userId 用户ID 20 | * @return 权限信息 21 | */ 22 | Authentication getByUserId(String userId); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserTokenHolder.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.token; 2 | 3 | import org.hswebframework.web.ThreadLocalUtils; 4 | import org.hswebframework.web.authorization.token.UserToken; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public final class UserTokenHolder { 10 | 11 | private UserTokenHolder() { 12 | } 13 | 14 | public static UserToken currentToken() { 15 | return ThreadLocalUtils.get(UserToken.class.getName()); 16 | } 17 | 18 | public static UserToken setCurrent(UserToken token) { 19 | ThreadLocalUtils.put(UserToken.class.getName(), token); 20 | return token; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/event/UserTokenCreatedEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.token.event; 2 | 3 | import org.hswebframework.web.authorization.token.UserToken; 4 | import org.hswebframework.web.authorization.listener.event.AuthorizationEvent; 5 | import org.springframework.context.ApplicationEvent; 6 | 7 | public class UserTokenCreatedEvent extends ApplicationEvent implements AuthorizationEvent { 8 | private UserToken detail; 9 | 10 | public UserTokenCreatedEvent(UserToken detail) { 11 | super(detail); 12 | this.detail = detail; 13 | } 14 | 15 | public UserToken getDetail() { 16 | return detail; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/event/UserTokenRemovedEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.token.event; 2 | 3 | import org.hswebframework.web.authorization.listener.event.AuthorizationEvent; 4 | import org.hswebframework.web.authorization.token.UserToken; 5 | import org.springframework.context.ApplicationEvent; 6 | 7 | public class UserTokenRemovedEvent extends ApplicationEvent implements AuthorizationEvent { 8 | 9 | private static final long serialVersionUID = -6662943150068863177L; 10 | 11 | public UserTokenRemovedEvent(UserToken token) { 12 | super(token); 13 | } 14 | 15 | public UserToken getDetail() { 16 | return ((UserToken) getSource()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.authorization.simple.DefaultAuthorizationAutoConfiguration -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-api/token.md: -------------------------------------------------------------------------------- 1 | # 用户令牌管理 2 | 用于管理已授权的用户,并这些用户进行操作,如: 统计人数,踢下线,禁止多地点同时登录等操作 3 | 4 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/aop/AopMethodAuthorizeDefinitionCustomizerParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.aop; 2 | 3 | import org.hswebframework.web.authorization.define.AuthorizeDefinition; 4 | import org.hswebframework.web.boost.aop.context.MethodInterceptorContext; 5 | 6 | import java.lang.reflect.Method; 7 | 8 | /** 9 | * 自定义权限控制定义,在拦截到方法后,优先使用此接口来获取权限控制方式 10 | * @see AuthorizeDefinition 11 | * @author zhouhao 12 | */ 13 | public interface AopMethodAuthorizeDefinitionCustomizerParser { 14 | AuthorizeDefinition parse(Class target, Method method,MethodInterceptorContext context); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/configuration/EnableAopAuthorize.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.configuration; 2 | 3 | import org.springframework.boot.autoconfigure.ImportAutoConfiguration; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | @Target(ElementType.TYPE) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Documented 13 | @Inherited 14 | @ImportAutoConfiguration({AopAuthorizeAutoConfiguration.class, AuthorizingHandlerAutoConfiguration.class}) 15 | public @interface EnableAopAuthorize { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/define/DefaultDataAccessDefinition.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.define; 2 | 3 | import lombok.*; 4 | import org.hswebframework.web.authorization.define.DataAccessDefinition; 5 | import org.hswebframework.web.authorization.define.Phased; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | @Getter 11 | @Setter 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @ToString 15 | public class DefaultDataAccessDefinition implements DataAccessDefinition { 16 | 17 | private static final long serialVersionUID = 8285566729547666068L; 18 | 19 | private String controller; 20 | 21 | private String idParameterName="id"; 22 | 23 | private Phased phased; 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/AuthorizingHandler.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.handler; 2 | 3 | import org.hswebframework.web.authorization.define.AuthorizingContext; 4 | 5 | /** 6 | * aop方式权限控制处理器 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface AuthorizingHandler { 11 | void handRBAC(AuthorizingContext context); 12 | 13 | void handleDataAccess(AuthorizingContext context); 14 | 15 | default void handle(AuthorizingContext context) { 16 | handRBAC(context); 17 | handleDataAccess(context); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/handler/access/InvokeResultUtils.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.handler.access; 2 | 3 | import org.hswebframework.web.controller.message.ResponseMessage; 4 | import org.springframework.http.ResponseEntity; 5 | 6 | public class InvokeResultUtils { 7 | public static Object convertRealResult(Object result) { 8 | if (result instanceof ResponseMessage) { 9 | return ((ResponseMessage) result).getResult(); 10 | } 11 | if (result instanceof ResponseEntity) { 12 | return ((ResponseEntity) result).getBody(); 13 | } 14 | return result; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/AuthorizedToken.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.web; 2 | 3 | /** 4 | * 已完成认证的令牌,如果返回此令牌,将直接使用{@link this#getUserId()}来绑定用户信息 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface AuthorizedToken extends ParsedToken { 9 | 10 | /** 11 | * @return 令牌绑定的用户id 12 | */ 13 | String getUserId(); 14 | 15 | /** 16 | * @return 令牌有效期,单位毫秒,-1为长期有效 17 | */ 18 | default long getMaxInactiveInterval() { 19 | return -1; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/ParsedToken.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.web; 2 | 3 | /** 4 | * 令牌解析结果 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface ParsedToken { 9 | /** 10 | * @return 令牌 11 | */ 12 | String getToken(); 13 | 14 | /** 15 | * @return 令牌类型 16 | */ 17 | String getType(); 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/UserTokenForTypeParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.web; 2 | 3 | public interface UserTokenForTypeParser extends UserTokenParser { 4 | String getTokenType(); 5 | } 6 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/UserTokenGenerator.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.web; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | 5 | /** 6 | * 7 | * 用户令牌生产器,用于在用户进行授权后生成令牌 8 | * @author zhouhao 9 | * 10 | */ 11 | public interface UserTokenGenerator { 12 | String TOKEN_TYPE_SESSION_ID = "sessionId"; 13 | 14 | String TOKEN_TYPE_SIMPLE = "simple-token"; 15 | 16 | String getSupportTokenType(); 17 | 18 | GeneratedToken generate(Authentication authentication); 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/UserTokenParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.basic.web; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import java.util.function.Predicate; 5 | 6 | /** 7 | * 令牌解析器,用于在接受到请求到时候,从请求中获取令牌 8 | * @author zhouhao 9 | * @see 3.0 10 | * @see ParsedToken 11 | * @see AuthorizedToken 12 | */ 13 | public interface UserTokenParser { 14 | ParsedToken parseToken(HttpServletRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-basic/src/main/resources/META-INF/additional-spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": [ 3 | { 4 | "name": "hsweb.authorize.auto-parse", 5 | "type": "java.lang.Boolean", 6 | "defaultValue": "false", 7 | "description": "是否自动解析代码中的权限定义信息并触发AuthorizeDefinitionInitializedEvent事件." 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-jwt/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.authorization.jwt.JwtAutoConfiguration -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/README.md: -------------------------------------------------------------------------------- 1 | # oauth2 认证模块 2 | 3 | # 模块说明 4 | | 模块 | 说明 | 进度 | 5 | | ------------- |:-------------:| ----| 6 | |[hsweb-authorization-oauth2-client](hsweb-authorization-oauth2-client)|OAuth2 客户端API| 90%| 7 | |[hsweb-authorization-oauth2-server](hsweb-authorization-oauth2-server)|OAuth2 服务端API| 90%| -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/src/main/java/org/hswebframework/web/authorization/oauth2/server/event/OAuth2GrantEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.oauth2.server.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.authorization.oauth2.server.OAuth2AccessToken; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 1.0 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public class OAuth2GrantEvent { 14 | private OAuth2AccessToken accessToken; 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-auth-server/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.authorization.oauth2.server.OAuth2ServerAutoConfiguration -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/exception/UnCheckException.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.oauth2.client.exception; 2 | 3 | /** 4 | * 5 | * @author zhouhao 6 | * @since 3.0 7 | */ 8 | public class UnCheckException extends RuntimeException { 9 | public UnCheckException(Throwable cause) { 10 | super(cause); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/simple/OAuth2ServerConfigRepository.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.oauth2.client.simple; 2 | 3 | import org.hswebframework.web.authorization.oauth2.client.OAuth2ServerConfig; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface OAuth2ServerConfigRepository { 10 | OAuth2ServerConfig findById(String id); 11 | 12 | OAuth2ServerConfig save(OAuth2ServerConfig config); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.authorization.oauth2.client.OAuth2ClientAutoConfiguration -------------------------------------------------------------------------------- /hsweb-boost/README.md: -------------------------------------------------------------------------------- 1 | # 增强模块,提供一些增强工具如验证器 -------------------------------------------------------------------------------- /hsweb-boost/hsweb-boost-aop/README.md: -------------------------------------------------------------------------------- 1 | # AOP增强模块 2 | 提供aop常用操作需要的公共类 3 | -------------------------------------------------------------------------------- /hsweb-boost/hsweb-boost-excel/src/main/java/org/hswebframework/web/excel/ExcelCellConverter.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.excel; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0.0-RC 6 | */ 7 | public interface ExcelCellConverter { 8 | T convertFromCell(Object from); 9 | 10 | Object convertToCell(T from); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-boost/hsweb-boost-excel/src/test/resources/test.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/hsweb-boost/hsweb-boost-excel/src/test/resources/test.xls -------------------------------------------------------------------------------- /hsweb-commons/README.md: -------------------------------------------------------------------------------- 1 | # 通用功能模块 2 | 实现通用CRUD功能,增删改查,直接继承之. 3 | # 目录介绍 4 | 1. [hsweb-commons-controller](hsweb-commons-controller):通用springmvc控制器 5 | 1. [hsweb-commons-dao](hsweb-commons-dao):通用dao实现 6 | 1. [hsweb-commons-entity](hsweb-commons-entity):通用实体类 7 | 1. [hsweb-commons-service](hsweb-commons-service):通用服务类 8 | 1. [hsweb-commons-utils](hsweb-commons-utils):工具类 9 | 10 | # 使用 11 | [如何建一个增删改查功能](create-crud.md) -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-bean/src/main/java/org/hswebframework/web/commons/bean/ValidateBean.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.bean; 2 | 3 | /** 4 | * 支持验证的bean 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface ValidateBean extends Bean { 10 | 11 | /** 12 | * 尝试验证此bean,如果验证未通过,将抛出{@link org.hswebframework.web.validate.ValidationException} 13 | * 14 | * @param group 验证分组 15 | * @param 当前对象类型 16 | * @return 当前对象 17 | */ 18 | default T tryValidate(Class... group) { 19 | BeanValidator.tryValidate(this, group); 20 | return (T) this; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-bean/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.commons.bean.BeanValidatorAutoConfiguration -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/README.md: -------------------------------------------------------------------------------- 1 | # 通用DAO实现 2 | 3 | 支持动态条件的通用CRUD实现 4 | 5 | ⚠️注意:目前仅提供了[mybatis](hsweb-commons-dao-mybatis)实现. 6 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/MybatisMapperCustomer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis; 2 | 3 | /** 4 | * 排除不需要加载的mapper.xml 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface MybatisMapperCustomer { 10 | String[] getExcludes(); 11 | 12 | String[] getIncludes(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/ChangedTermValue.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis.mapper; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0.0-RC 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | public class ChangedTermValue implements Serializable { 15 | private static final long serialVersionUID = 6373611532663483048L; 16 | 17 | private Object old; 18 | 19 | private Object value; 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/SqlTermCustomer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis.mapper; 2 | 3 | import org.hswebframework.ezorm.rdb.render.dialect.Dialect; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0.0-RC 8 | */ 9 | public interface SqlTermCustomer extends Dialect.TermTypeMapper { 10 | String getTermType(); 11 | 12 | Dialect[] forDialect(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.dao.mybatis.MybatisDaoAutoConfiguration -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/DataType.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.crud; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.dict.EnumDict; 6 | 7 | @Getter 8 | @AllArgsConstructor 9 | public enum DataType implements EnumDict { 10 | TYPE1((byte) 1, "类型1"), 11 | TYPE2((byte) 2, "类型2"), 12 | TYPE3((byte) 3, "类型3"), 13 | TYPE4((byte) 4, "类型4"); 14 | 15 | private Byte value; 16 | 17 | private String text; 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.crud; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 7 | * @author zhouhao 8 | * @since 9 | */ 10 | @Data 11 | public class NestEntity { 12 | private String name; 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.crud; 2 | 3 | import org.hswebframework.web.commons.entity.Entity; 4 | import org.hswebframework.web.dao.CrudDao; 5 | 6 | import java.util.List; 7 | 8 | public interface TestDao extends CrudDao { 9 | List queryNest(Entity queryEntity); 10 | 11 | int countNest(Entity queryEntity); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/TestQueryEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis.builder; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.hswebframework.web.commons.entity.QueryEntity; 8 | 9 | @Data 10 | @Builder 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class TestQueryEntity implements QueryEntity { 14 | 15 | private String name$like; 16 | 17 | private int age$gt; 18 | 19 | private TestQueryEntity or; 20 | } -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/AbstractEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis.builder.jpa; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import javax.persistence.Column; 7 | 8 | /** 9 | * TODO 完成注释 10 | * 11 | * @author zhouhao 12 | * @since 13 | */ 14 | @Getter 15 | @Setter 16 | public class AbstractEntity { 17 | 18 | @Column(name = "id") 19 | private Long id; 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/mybatis/builder/jpa/JpaAnnotationParserTest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.mybatis.builder.jpa; 2 | 3 | import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; 4 | import org.junit.Assert; 5 | import org.junit.Test; 6 | 7 | import static org.junit.Assert.*; 8 | 9 | /** 10 | * TODO 完成注释 11 | * 12 | * @author zhouhao 13 | * @since 14 | */ 15 | public class JpaAnnotationParserTest { 16 | 17 | 18 | @Test 19 | public void testParse() { 20 | RDBTableMetaData metaData = JpaAnnotationParser.parseMetaDataFromEntity(TestEntity.class); 21 | 22 | Assert.assertNotNull(metaData); 23 | Assert.assertEquals(metaData.getColumns().size(), 5); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | logging: 2 | level: 3 | org.hswebframework: DEBUG 4 | org.hswebframework.expands: ERROR 5 | com.ruiqi: DEBUG 6 | access-logger: INFO 7 | com.netflix: ERROR 8 | spring: 9 | aop: 10 | auto: true 11 | proxy-target-class: true 12 | profiles: 13 | active: dev 14 | datasource: 15 | url: jdbc:h2:mem:test 16 | username : sa 17 | password : 18 | type: com.alibaba.druid.pool.DruidDataSource 19 | jpa: 20 | generate-ddl: true 21 | show-sql: true 22 | hibernate: 23 | ddl-auto: update 24 | mybatis: 25 | mapper-locations: org/hswebframework/web/dao/test/*.xml -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/CloneableEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity; 2 | 3 | /** 4 | * @author zhouhao 5 | */ 6 | public interface CloneableEntity extends Entity, Cloneable { 7 | CloneableEntity clone(); 8 | } 9 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/DataStatus.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity; 2 | 3 | /** 4 | * @author zhouhao 5 | * @see DataStatusEnum 6 | */ 7 | public interface DataStatus { 8 | Byte STATUS_ENABLED = 1; 9 | Byte STATUS_DISABLED = 0; 10 | Byte STATUS_LOCKED = -1; 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/DataStatusEnum.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.dict.EnumDict; 6 | 7 | @AllArgsConstructor 8 | @Getter 9 | public enum DataStatusEnum implements EnumDict { 10 | ENABLED((byte) 1, "正常"), 11 | DISABLED((byte) 0, "禁用"), 12 | LOCK((byte) -1, "锁定"), 13 | DELETED((byte) -10, "删除"); 14 | 15 | private Byte value; 16 | 17 | private String text; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/RecordCreationEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity; 2 | 3 | /** 4 | * 记录创建信息的实体类,包括创建人和创建时间。 5 | * 此实体类与行级权限控制相关联:只能操作自己创建的数据 6 | * 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | public interface RecordCreationEntity extends Entity { 11 | 12 | String creatorId = "creatorId"; 13 | String createTime = "createTime"; 14 | 15 | String getCreatorId(); 16 | 17 | void setCreatorId(String creatorId); 18 | 19 | Long getCreateTime(); 20 | 21 | void setCreateTime(Long createTime); 22 | 23 | default void setCreateTimeNow() { 24 | setCreateTime(System.currentTimeMillis()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/factory/DefaultMapperFactory.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity.factory; 2 | 3 | import java.util.function.Function; 4 | 5 | /** 6 | * 默认的实体映射 7 | * 8 | * @author zhouhao 9 | */ 10 | @FunctionalInterface 11 | public interface DefaultMapperFactory extends Function { 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/factory/DefaultPropertyCopier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity.factory; 2 | 3 | /** 4 | * 默认的属性复制器 5 | * 6 | * @author zhouhao 7 | */ 8 | @FunctionalInterface 9 | public interface DefaultPropertyCopier extends PropertyCopier { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/factory/PropertyCopier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity.factory; 2 | 3 | /** 4 | * 属性复制接口,用于自定义属性复制 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface PropertyCopier { 10 | T copyProperties(S source, T target); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/test/java/org/hswebframework/web/commons/entity/MenuEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Getter 8 | @Setter 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class MenuEntity extends SimpleTreeSortSupportEntity { 13 | private static final long serialVersionUID = 5548107788893085691L; 14 | 15 | private String name; 16 | 17 | private List children; 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/test/java/org/hswebframework/web/commons/entity/factory/NewTestEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity.factory; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class NewTestEntity extends TestEntity { 9 | private static final long serialVersionUID = -8151514416436801617L; 10 | private String nickName; 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-entity/src/test/java/org/hswebframework/web/commons/entity/factory/TestEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.commons.entity.factory; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.hswebframework.web.commons.entity.SimpleGenericEntity; 6 | 7 | @Getter 8 | @Setter 9 | public class TestEntity extends SimpleGenericEntity { 10 | private static final long serialVersionUID = 2468328156748007412L; 11 | 12 | private String name; 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-api/src/main/java/org/hswebframework/web/service/Validator.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service; 2 | 3 | /** 4 | * @author zhouhao 5 | */ 6 | public interface Validator { 7 | boolean validate(T data); 8 | 9 | default String getErrorMessage() { 10 | return "{validation_fail}"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/src/main/java/org/hswebframework/web/service/oauth2/OAuth2CrudService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.oauth2; 2 | 3 | public interface OAuth2CrudService extends OAuth2QueryService 4 | , OAuth2QueryByEntityService 5 | , OAuth2DeleteService 6 | , OAuth2InsertService 7 | , OAuth2UpdateService { 8 | } 9 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/src/main/java/org/hswebframework/web/service/oauth2/OAuth2DeleteService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.oauth2; 2 | 3 | import org.hswebframework.web.service.DeleteService; 4 | 5 | public interface OAuth2DeleteService extends DeleteService, OAuth2ServiceSupport { 6 | @Override 7 | default E deleteByPk(PK pk) { 8 | return createRequest("/" + pk).delete().as(getEntityType()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/src/main/java/org/hswebframework/web/service/oauth2/OAuth2InsertService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.oauth2; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import org.hswebframework.web.service.InsertService; 5 | 6 | public interface OAuth2InsertService extends InsertService, OAuth2ServiceSupport { 7 | @Override 8 | default PK insert(E data) { 9 | return createRequest("/").requestBody(JSON.toJSONString(data)).post().as(getPrimaryKeyType()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/src/test/java/org/hswebframework/web/service/oauth2/TestEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.oauth2; 2 | 3 | import lombok.*; 4 | import org.hswebframework.web.commons.entity.SimpleGenericEntity; 5 | 6 | import java.util.Date; 7 | 8 | @Getter 9 | @Setter 10 | @Builder 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class TestEntity extends SimpleGenericEntity { 14 | private static final long serialVersionUID = 6405200441627288263L; 15 | private String name; 16 | 17 | private boolean boy; 18 | 19 | private Date createTime; 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-service/hsweb-commons-service-oauth2/src/test/java/org/hswebframework/web/service/oauth2/TestEntityService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.oauth2; 2 | 3 | public class TestEntityService extends AbstractOAuth2CrudService{ 4 | @Override 5 | public String getServiceId() { 6 | return "test"; 7 | } 8 | 9 | @Override 10 | public String getUriPrefix() { 11 | return "/test"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/ExpressionUtilsTests.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import java.util.Collections; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | public class ExpressionUtilsTests { 11 | 12 | @Test 13 | public void testAnalytical() throws Exception { 14 | String result = ExpressionUtils.analytical("test${1+2}", "spel"); 15 | 16 | Assert.assertEquals(result, "test3"); 17 | 18 | result = ExpressionUtils.analytical("test${#param}", Collections.singletonMap("param", "3"), "spel"); 19 | Assert.assertEquals(result, "test3"); 20 | } 21 | } -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/ListsTests.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web; 2 | 3 | import org.junit.Test; 4 | 5 | import java.util.ArrayList; 6 | import java.util.Comparator; 7 | import java.util.LinkedList; 8 | 9 | import static org.junit.Assert.*; 10 | 11 | public class ListsTests { 12 | 13 | @Test 14 | public void testCreate() { 15 | 16 | assertEquals(Lists.buildList(2).add(1) 17 | .get().get(0), (Integer) 2); 18 | 19 | 20 | assertEquals(Lists.buildList(new ArrayList<>()).add(2,1) 21 | .get().get(0), 2); 22 | 23 | assertEquals(Lists.buildList(ArrayList::new) 24 | .add(2,1) 25 | .get() 26 | .get(0), 2); 27 | 28 | } 29 | } -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/MapsTests.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web; 2 | 3 | import org.junit.Test; 4 | 5 | import java.util.HashMap; 6 | 7 | import static org.junit.Assert.*; 8 | 9 | public class MapsTests { 10 | 11 | @Test 12 | public void testCreateMap() { 13 | assertEquals(Maps.buildMap() 14 | .put("1", 1) 15 | .get().get("1"), 1); 16 | 17 | assertEquals(Maps.buildMap(new HashMap<>()) 18 | .put("1", 1) 19 | .get().get("1"), 1); 20 | 21 | assertEquals(Maps.buildMap(HashMap::new) 22 | .put("1", 1) 23 | .get().get("1"), 1); 24 | 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/RegexUtilsTests.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import java.util.Arrays; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | public class RegexUtilsTests { 11 | 12 | @Test 13 | public void test() { 14 | Arrays.asList('\\', '$', '(', ')', '*', '+', '.', '[', ']', '?', '^', '{', '}', '|') 15 | .forEach((s) -> assertEquals(RegexUtils.escape(String.valueOf(s)), "\\" + s)); 16 | 17 | } 18 | } -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/README.md: -------------------------------------------------------------------------------- 1 | # 异步任务工具,支持多线程事务 2 | ```xml 3 | 4 | 5 | org.hswebframework.web 6 | hsweb-concurrent-async-job 7 | ${project.verion} 8 | 9 | ``` 10 | 11 | ```java 12 | @Autowired 13 | private AsyncJobService asyncJobService; 14 | 15 | 16 | public void testJob(){ 17 | List results= asyncJobService.batch() 18 | .submit(()->...) //提交job 19 | .submit(()->...) //提交另外一个job 20 | .submit(()->...,true) //提交支持事务的job 21 | .getResult(); 22 | } 23 | 24 | ``` -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/main/java/org/hswebframework/web/async/AsyncJobService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.async; 2 | 3 | /** 4 | * 异步任务服务 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface AsyncJobService { 9 | /** 10 | * @return 创建一个异步任务容器 11 | */ 12 | BatchAsyncJobContainer batch(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/main/java/org/hswebframework/web/async/BatchAsyncJobContainer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.async; 2 | 3 | import java.util.List; 4 | import java.util.concurrent.Callable; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface BatchAsyncJobContainer { 10 | 11 | default BatchAsyncJobContainer submit(Callable callable) { 12 | submit(callable, false); 13 | return this; 14 | } 15 | 16 | BatchAsyncJobContainer submit(Callable callable, boolean enableTransaction); 17 | 18 | 19 | List getResult() throws Exception; 20 | 21 | BatchAsyncJobContainer cancel(); 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/main/java/org/hswebframework/web/async/TransactionSupportJob.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.async; 2 | 3 | import java.util.concurrent.Callable; 4 | 5 | /** 6 | * 支持事务的异步任务 7 | * @author zhouhao 8 | */ 9 | public interface TransactionSupportJob extends Callable { 10 | 11 | /** 12 | * 回滚 13 | */ 14 | void rollBackOnly(); 15 | 16 | /** 17 | * 提交事务 18 | */ 19 | void commit(); 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/main/java/org/hswebframework/web/async/TransactionSupportJobWrapper.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.async; 2 | 3 | import java.util.concurrent.Callable; 4 | 5 | /** 6 | * 支持事务的任务包装器 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface TransactionSupportJobWrapper { 11 | /** 12 | * 将一个普通任务包装为支持事务的任务 13 | * 14 | * @param callable 普通任务 15 | * @param 任务返回值类型 16 | * @return 支持事务的任务 17 | */ 18 | TransactionSupportJob wrapper(Callable callable); 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.async.AsyncJobServiceAutoConfiguration -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-async-job/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:async_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | initial-size: 100 11 | max-active: 2000 12 | hsweb: 13 | app: 14 | name: 异步任务 15 | version: 3.0.0 16 | logging: 17 | level: 18 | org.hswebframework: debug -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-cache/src/main/java/org/hswebframework/web/cache/monitor/MonitorSupportCache.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.cache.monitor; 2 | 3 | import org.springframework.cache.Cache; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * 支持监控的缓存 9 | * 10 | * @author zhouhao 11 | */ 12 | public interface MonitorSupportCache extends Cache { 13 | long getTotalTimes(); 14 | 15 | long getHitTimes(); 16 | 17 | long getUpdateTimes(); 18 | 19 | long size(); 20 | 21 | Set keySet(); 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-cache/src/main/java/org/hswebframework/web/cache/spring/fix/FixUseSupperClassCacheAnnotationParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.cache.spring.fix; 2 | 3 | import org.springframework.cache.annotation.CacheAnnotationParser; 4 | import org.springframework.cache.interceptor.CacheOperation; 5 | 6 | import java.lang.reflect.Method; 7 | import java.util.Collection; 8 | 9 | /** 10 | * TODO 完成注释 11 | * 12 | * @author zhouhao 13 | */ 14 | public interface FixUseSupperClassCacheAnnotationParser extends CacheAnnotationParser { 15 | 16 | Collection parseCacheAnnotations(Class targetClass, Method method); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-cache/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.cache.FixUseSupperClassAutoConfiguration -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/src/main/java/org/hswebframework/web/concurrent/counter/CounterAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.concurrent.counter; 2 | 3 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | @Configuration 12 | public class CounterAutoConfiguration { 13 | 14 | @Bean 15 | @ConditionalOnMissingBean(CounterManager.class) 16 | public CounterManager counterManager() { 17 | return new SimpleCounterManager(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/src/main/java/org/hswebframework/web/concurrent/counter/SimpleCounterManager.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.concurrent.counter; 2 | 3 | /** 4 | * @author zhouhao 5 | */ 6 | public class SimpleCounterManager extends AbstractCounterManager { 7 | @Override 8 | protected Counter createCount(String name) { 9 | return new SimpleCounter(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.concurrent.counter.CounterAutoConfiguration -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-counter/hsweb-concurrent-counter-redis/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.counter.redis.RedisCounterAutoConfiguration -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.concurrent.lock.starter.LockManagerAutoConfiguration,\ 4 | org.hswebframework.web.concurrent.lock.starter.RedisLockManagerAutoConfiguration -------------------------------------------------------------------------------- /hsweb-concurrent/hsweb-concurrent-lock/hsweb-concurrent-lock-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url : jdbc:h2:mem:test_mem 4 | username : sa 5 | password : 6 | type: com.alibaba.druid.pool.DruidDataSource 7 | driver-class-name : org.h2.Driver 8 | 9 | hsweb: 10 | app: 11 | name: lock测试 12 | version: 3.0.0 -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/ScriptScope.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | @Target({ElementType.TYPE}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Documented 11 | public @interface ScriptScope { 12 | 13 | String value() default ""; 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/bean/BeanFactory.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | public interface BeanFactory { 4 | 5 | T newInstance(Class beanType); 6 | } 7 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/bean/Converter.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | @FunctionalInterface 4 | public interface Converter { 5 | T convert(Object source, Class targetClass,Class[] genericType); 6 | } -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/bean/Copier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | import java.util.Arrays; 4 | import java.util.HashSet; 5 | import java.util.Set; 6 | 7 | public interface Copier { 8 | void copy(Object source, Object target, Set ignore, Converter converter); 9 | 10 | default void copy(Object source, Object target, String... ignore){ 11 | copy(source,target,new HashSet<>(Arrays.asList(ignore)),FastBeanCopier.DEFAULT_CONVERT); 12 | } 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/bean/ToStringOperator.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | 4 | import java.util.*; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ToStringOperator { 11 | 12 | default String toString(T target, String... ignoreProperty) { 13 | return toString(target, -1, ignoreProperty == null ? new java.util.HashSet<>() : new HashSet<>(Arrays.asList(ignoreProperty))); 14 | } 15 | 16 | String toString(T target, long features, Set ignoreProperty); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/convert/CustomMessageConverter.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.convert; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public interface CustomMessageConverter { 8 | boolean support(Class clazz); 9 | 10 | Object convert(Class clazz, byte[] message); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/ClassDictDefine.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public interface ClassDictDefine extends DictDefine { 8 | String getField(); 9 | } 10 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/DictDefine.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | public interface DictDefine extends Serializable { 11 | String getId(); 12 | 13 | String getAlias(); 14 | 15 | String getComments(); 16 | 17 | String getParserId(); 18 | 19 | List> getItems(); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/DictDefineRepository.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 1.0 8 | */ 9 | public interface DictDefineRepository { 10 | DictDefine getDefine(String id); 11 | 12 | List getAllDefine(); 13 | 14 | @Deprecated 15 | List getDefine(Class type); 16 | 17 | void addDefine(DictDefine dictDefine); 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/DictParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public interface DictParser { 8 | String getId(); 9 | 10 | String parseText(DictDefine dictDefine, Object value); 11 | 12 | String parseValue(DictDefine dictDefine, String text); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/DictSupportApi.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | @Deprecated 8 | public interface DictSupportApi { 9 | DictParser getParser(String id, String defaultId); 10 | 11 | default DictParser getParser(String id) { 12 | return getParser(id, "default"); 13 | } 14 | 15 | T wrap(T target); 16 | 17 | T unwrap(T target); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/Item.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 字典选项注解 7 | * 8 | * @author zhouhao 9 | * @see Dict 10 | * @since 3.0 11 | */ 12 | @Target({ElementType.ANNOTATION_TYPE}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Documented 15 | public @interface Item { 16 | 17 | /** 18 | * @return 选项文本, 如: 男 19 | */ 20 | String text() default ""; 21 | 22 | /** 23 | * @return 选项值, 如: 1 24 | */ 25 | String value() default ""; 26 | 27 | /** 28 | * @return 字典说明 29 | */ 30 | String[] comments() default {}; 31 | } 32 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/ItemDefine.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface ItemDefine extends EnumDict { 10 | String getText(); 11 | 12 | String getValue(); 13 | 14 | String getComments(); 15 | 16 | int getOrdinal(); 17 | 18 | @Override 19 | default int ordinal() { 20 | return getOrdinal(); 21 | } 22 | 23 | List getChildren(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/apply/DictApply.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict.apply; 2 | 3 | /** 4 | * 数据字典应用类 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface DictApply { 10 | 11 | T apply(T bean); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/apply/DictWrapper.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict.apply; 2 | 3 | import org.hswebframework.web.dict.DictDefineRepository; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface DictWrapper { 10 | DictWrapper empty = (bean, repository) -> {}; 11 | 12 | void wrap(Object bean, DictDefineRepository repository); 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/defaults/DefaultItemDefine.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict.defaults; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.hswebframework.web.dict.ItemDefine; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author zhouhao 13 | * @since 3.0 14 | */ 15 | @Data 16 | @Builder 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class DefaultItemDefine implements ItemDefine { 20 | private String text; 21 | private String value; 22 | private String comments; 23 | private int ordinal; 24 | private List children; 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/dict/defaults/TrueOrFalse.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict.defaults; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.dict.EnumDict; 6 | 7 | @Getter 8 | @AllArgsConstructor 9 | public enum TrueOrFalse implements EnumDict { 10 | 11 | TRUE((byte) 1, "是"), 12 | 13 | FALSE((byte) 0, "否"); 14 | 15 | private Byte value; 16 | 17 | private String text; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/validator/group/CreateGroup.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.validator.group; 2 | 3 | /** 4 | * 使用此Group,只在新增时验证数据 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface CreateGroup { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-core/src/main/java/org/hswebframework/web/validator/group/UpdateGroup.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.validator.group; 2 | 3 | /** 4 | * 使用此group,只在修改的时候才进行验证 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface UpdateGroup { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-core/src/test/java/org/hswebframework/web/bean/Color.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.dict.EnumDict; 6 | 7 | @Getter 8 | @AllArgsConstructor 9 | public enum Color implements EnumDict { 10 | RED(1, "红色"), 11 | BLUE(2, "蓝色"); 12 | 13 | private Integer value; 14 | 15 | private String text; 16 | 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-core/src/test/java/org/hswebframework/web/bean/NestObject.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.bean; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 8 | */ 9 | @Getter 10 | @Setter 11 | @Builder 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class NestObject implements Cloneable { 15 | 16 | @Override 17 | public String toString() { 18 | return ToString.toString(this); 19 | } 20 | 21 | private String name; 22 | 23 | private int age; 24 | 25 | @ToString.Ignore 26 | private String password; 27 | 28 | 29 | @Override 30 | public NestObject clone() throws CloneNotSupportedException { 31 | return (NestObject) super.clone(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /hsweb-core/src/test/java/org/hswebframework/web/dict/UseDictEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0 11 | */ 12 | @Data 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class UseDictEntity { 16 | @Dict( 17 | alias = "statusText" 18 | , items = { 19 | @Item(text = "正常", value = "1"), 20 | @Item(text = "失效", value = "0") 21 | }) 22 | private Byte status; 23 | 24 | private String statusText; 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-core/src/test/java/org/hswebframework/web/dict/UseDictEntity2.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dict; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | @EqualsAndHashCode(callSuper = true) 10 | @Data 11 | @Builder 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class UseDictEntity2 extends UseDictEntity { 15 | @Dict(id = "test-code", 16 | items = { 17 | @Item(text = "编码1", value = "1"), 18 | @Item(text = "编码2", value = "2") 19 | }) 20 | private String code; 21 | 22 | private UserCode userCode=UserCode.SIMPLE; 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSource.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource; 2 | 3 | import org.hswebframework.web.datasource.switcher.DataSourceSwitcher; 4 | 5 | import javax.sql.DataSource; 6 | 7 | /** 8 | * 动态数据源 9 | * 10 | * @author zhouhao 11 | * @since 3.0 12 | */ 13 | public interface DynamicDataSource { 14 | 15 | /** 16 | * @return 数据源ID 17 | * @see DataSourceSwitcher#currentDataSourceId() 18 | */ 19 | String getId(); 20 | 21 | /** 22 | * @return 数据库类型 23 | * @see DatabaseType 24 | */ 25 | DatabaseType getType(); 26 | 27 | /** 28 | * @return 原始数据源 29 | */ 30 | DataSource getNative(); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource; 2 | 3 | import org.hswebframework.web.datasource.exception.DataSourceNotFoundException; 4 | 5 | /** 6 | * 动态数据源服务类 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface DynamicDataSourceService { 12 | 13 | /** 14 | * 根据数据源ID获取动态数据源,数据源不存在将抛出{@link DataSourceNotFoundException} 15 | * 16 | * @param dataSourceId 数据源ID 17 | * @return 动态数据源 18 | */ 19 | DynamicDataSource getDataSource(String dataSourceId); 20 | 21 | /** 22 | * @return 默认数据源 23 | */ 24 | DynamicDataSource getDefaultDataSource(); 25 | } 26 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/annotation/UseDefaultDataSource.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | @Target({ElementType.TYPE, ElementType.METHOD}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Documented 11 | @Inherited 12 | public @interface UseDefaultDataSource { 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/config/DynamicDataSourceConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.config; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class DynamicDataSourceConfig implements Serializable { 9 | private static final long serialVersionUID = 2776152081818934459L; 10 | private String id; 11 | 12 | private String name; 13 | 14 | private String describe; 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/config/DynamicDataSourceConfigRepository.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.config; 2 | 3 | import java.util.List; 4 | 5 | public interface DynamicDataSourceConfigRepository { 6 | List findAll(); 7 | 8 | C findById(String dataSourceId); 9 | 10 | C add(C config); 11 | 12 | C remove(String dataSourceId); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/config/InSpringDynamicDataSourceConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.config; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | 6 | @EqualsAndHashCode(callSuper = true) 7 | @Data 8 | public class InSpringDynamicDataSourceConfig extends DynamicDataSourceConfig { 9 | private static final long serialVersionUID = -8434216403009495774L; 10 | 11 | private String beanName; 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/switcher/TableSwitcher.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.switcher; 2 | 3 | /** 4 | * 表切换器 5 | * 6 | * @author zhouhao 7 | * @since 3.0.0-RC 8 | */ 9 | public interface TableSwitcher { 10 | void use(String source, String target); 11 | 12 | String getTable(String name); 13 | 14 | void reset(); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.datasource.DynamicDataSourceAutoConfiguration -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaDataSourceRepository.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.jta; 2 | 3 | import org.hswebframework.web.datasource.config.DynamicDataSourceConfigRepository; 4 | 5 | /** 6 | * @author zhouhao 7 | * @see org.hswebframework.web.datasource.config.DynamicDataSourceConfigRepository 8 | */ 9 | public interface JtaDataSourceRepository extends DynamicDataSourceConfigRepository { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutorAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.jta; 2 | 3 | import org.hswebframework.ezorm.rdb.executor.SqlExecutor; 4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * @author zhouhao 10 | * @see JtaJdbcSqlExecutor 11 | * @since 3.0 12 | */ 13 | @ConditionalOnClass(SqlExecutor.class) 14 | @Configuration 15 | public class JtaJdbcSqlExecutorAutoConfiguration { 16 | @Bean 17 | public JtaJdbcSqlExecutor jtaJdbcSqlExecutor() { 18 | return new JtaJdbcSqlExecutor(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-jta/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.datasource.jta.AtomikosDataSourceAutoConfiguration,\ 4 | org.hswebframework.web.datasource.jta.JtaJdbcSqlExecutorAutoConfiguration -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-web/src/main/java/org/hswebframework/web/datasource/web/DatasourceWebApiAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.web; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | public class DatasourceWebApiAutoConfiguration { 8 | 9 | @Bean 10 | public DatasourceController datasourceController() { 11 | return new DatasourceController(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-datasource/hsweb-datasource-web/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.datasource.web.DatasourceWebApiAutoConfiguration -------------------------------------------------------------------------------- /hsweb-logging/README.md: -------------------------------------------------------------------------------- 1 | # 日志模块 2 | 3 | ## 访问日志 API 4 | 5 | controller类或者方法上,注解 `@AccessLogger("功能描述")` 如果正在使用swagger,只需要注解swagger的`@Api(tags="功能说明",value="XXX功能")` 6 | 7 | 8 | ## 开启访问日志 9 | 引入依赖,`hsweb-access-logging-aop`,在启动类中注解`@EnableAccessLogger`. 10 | 11 | 自定义日志监听,创建类,实现: ``AccessLoggerListener``接口并注入到spring容器, 12 | 当有日志产生时,会调用接口方法`onLogger`,并传入日志信息 13 | 14 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-aop/src/main/java/org/hswebframework/web/loggin/aop/AccessLoggerParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.loggin.aop; 2 | 3 | 4 | import org.hswebframework.web.boost.aop.context.MethodInterceptorHolder; 5 | import org.hswebframework.web.logging.LoggerDefine; 6 | 7 | import java.lang.reflect.Method; 8 | 9 | public interface AccessLoggerParser { 10 | boolean support(Class clazz, Method method); 11 | 12 | LoggerDefine parse(MethodInterceptorHolder holder); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | hsweb-logging 7 | org.hswebframework.web 8 | 3.0.0 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | hsweb-access-logging-api 14 | 15 | 访问日志API模块 16 | 17 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/AccessLoggerListener.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.logging; 2 | 3 | import org.hswebframework.web.logging.events.AccessLoggerAfterEvent; 4 | 5 | /** 6 | * 访问日志监听器,实现此接口并注入到spring容器即可获取访问日志信息 7 | * 8 | * @author zhouhao 9 | * @see AccessLoggerAfterEvent 10 | * @see org.hswebframework.web.logging.events.AccessLoggerBeforeEvent 11 | * @since 3.0 12 | */ 13 | public interface AccessLoggerListener { 14 | 15 | /** 16 | * 当产生访问日志时,将调用此方法.注意,此方法内的操作应尽量设置为异步操作,否则可能影响请求性能 17 | * 18 | * @param loggerInfo 产生的日志信息 19 | */ 20 | void onLogger(AccessLoggerInfo loggerInfo); 21 | 22 | default void onLogBefore(AccessLoggerInfo loggerInfo) { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/LoggerDefine.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.logging; 2 | 3 | 4 | public class LoggerDefine { 5 | private String action; 6 | 7 | private String describe; 8 | 9 | public LoggerDefine(String action,String describe){ 10 | this.action=action; 11 | this.describe=describe; 12 | } 13 | 14 | public String getDescribe() { 15 | return describe; 16 | } 17 | 18 | public void setAction(String action) { 19 | this.action = action; 20 | } 21 | 22 | public String getAction() { 23 | return action; 24 | } 25 | 26 | public void setDescribe(String describe) { 27 | this.describe = describe; 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/events/AccessLoggerAfterEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.logging.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.logging.AccessLoggerInfo; 6 | 7 | @AllArgsConstructor 8 | @Getter 9 | public class AccessLoggerAfterEvent { 10 | 11 | private AccessLoggerInfo logger; 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/events/AccessLoggerBeforeEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.logging.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.logging.AccessLoggerInfo; 6 | 7 | @AllArgsConstructor 8 | @Getter 9 | public class AccessLoggerBeforeEvent { 10 | 11 | private AccessLoggerInfo logger; 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/Message.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.message; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface Message extends Serializable { 9 | } 10 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/MessagerAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.message; 2 | 3 | import org.hswebframework.web.message.memory.MemoryMessager; 4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * TODO 完成注释 10 | * 11 | * @author zhouhao 12 | */ 13 | @Configuration 14 | @ConditionalOnMissingBean(Messager.class) 15 | public class MessagerAutoConfiguration { 16 | @Bean 17 | public Messager messager() { 18 | return new MemoryMessager(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/support/MultipleQueueMessageSubject.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.message.support; 2 | 3 | import org.hswebframework.web.message.MessageSubject; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * TODO 完成注释 9 | * 10 | * @author zhouhao 11 | */ 12 | public interface MultipleQueueMessageSubject extends MessageSubject { 13 | Set getQueueName(); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/support/QueueMessageSubject.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.message.support; 2 | 3 | import org.hswebframework.web.message.MessageSubject; 4 | 5 | /** 6 | * TODO 完成注释 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface QueueMessageSubject extends MessageSubject { 11 | String getQueueName(); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.message.MessagerAutoConfiguration -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-jms/src/test/java/org/hswebframework/web/message/jms/SampleActiveMQApplication.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.message.jms; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.jms.annotation.EnableJms; 5 | 6 | @SpringBootApplication 7 | @EnableJms 8 | public class SampleActiveMQApplication { 9 | 10 | } -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-jms/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | activemq: 3 | in-memory: true 4 | datasource: 5 | url : jdbc:h2:mem:test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | jms: 11 | pub-sub-domain: true 12 | 13 | hsweb: 14 | app: 15 | name: jms测试 16 | version: 3.0.0 -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-redis/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.message.redis.starter.RedissonMessagerAutoConfiguration -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/CommandRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | import org.springframework.web.socket.WebSocketSession; 5 | 6 | import java.util.Map; 7 | 8 | /** 9 | * @author zhouhao 10 | */ 11 | public interface CommandRequest { 12 | Authentication getAuthentication(); 13 | 14 | Map getParameters(); 15 | 16 | WebSocketSession getSession(); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/WebSocketSessionListener.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket; 2 | 3 | import org.springframework.web.socket.WebSocketSession; 4 | 5 | public interface WebSocketSessionListener { 6 | /** 7 | * 当session创建时,调用此方法 8 | * 9 | * @param session WebSocketSession 实例 10 | * @throws Exception 11 | */ 12 | void onSessionConnect(WebSocketSession session); 13 | 14 | /** 15 | * 当session关闭时,调用此方法 16 | * 17 | * @param session WebSocketSession 实例 18 | * @throws Exception 19 | */ 20 | void onSessionClose(WebSocketSession session); 21 | 22 | } -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/authorize/WebSocketTokenParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket.authorize; 2 | 3 | import org.springframework.web.socket.WebSocketSession; 4 | 5 | public interface WebSocketTokenParser { 6 | String parseToken(WebSocketSession session); 7 | } 8 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/authorize/XAccessTokenParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket.authorize; 2 | 3 | import org.springframework.web.socket.WebSocketSession; 4 | 5 | import java.util.List; 6 | 7 | public class XAccessTokenParser implements WebSocketTokenParser { 8 | @Override 9 | public String parseToken(WebSocketSession session) { 10 | List tokens = session.getHandshakeHeaders().get("x-access-token"); 11 | return tokens == null || tokens.isEmpty() ? null : tokens.get(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/handler/WebSocketCommandRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket.handler; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public class WebSocketCommandRequest { 9 | private String command; 10 | 11 | private Map parameters; 12 | 13 | public String getCommand() { 14 | return command; 15 | } 16 | 17 | public void setCommand(String command) { 18 | this.command = command; 19 | } 20 | 21 | public Map getParameters() { 22 | return parameters; 23 | } 24 | 25 | public void setParameters(Map parameters) { 26 | this.parameters = parameters; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/processor/CommandProcessor.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket.processor; 2 | 3 | import org.hswebframework.web.socket.CommandRequest; 4 | 5 | /** 6 | * TODO 完成注释 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface CommandProcessor { 11 | String getName(); 12 | 13 | void execute(CommandRequest command); 14 | 15 | default void init() { 16 | } 17 | 18 | default void destroy() { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/processor/CommandProcessorContainer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.socket.processor; 2 | 3 | 4 | import java.util.List; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface CommandProcessorContainer { 10 | CommandProcessor install(CommandProcessor command); 11 | 12 | CommandProcessor uninstall(String name); 13 | 14 | CommandProcessor getProcessor(String name); 15 | 16 | List getAllProcessor(); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.socket.starter.CommandWebSocketAutoConfiguration -------------------------------------------------------------------------------- /hsweb-message/hsweb-message-websocket/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | activemq: 3 | broker-url: tcp://localhost:61616 4 | in-memory: false 5 | jms: 6 | pub-sub-domain: true 7 | 8 | hsweb: 9 | websocket: 10 | allowed-origins: "*" 11 | app: 12 | name: websocket测试 13 | version: 3.0.0 14 | server: 15 | port: 8081 -------------------------------------------------------------------------------- /hsweb-starter/README.md: -------------------------------------------------------------------------------- 1 | ## 系统启动模块 2 | 3 | 整合系统常用的启动方式,如spring-boot自动配置,自动维护表结构.启动执行脚本等等 -------------------------------------------------------------------------------- /hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/entity/EntityMappingCustomer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.starter.entity; 2 | 3 | import org.hswebframework.web.commons.entity.factory.MapperEntityFactory; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface EntityMappingCustomer { 9 | void customize(MapperEntityFactory entityFactory); 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/init/InitializeCallBack.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.starter.init; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * TODO 完成注释 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface InitializeCallBack { 11 | void execute(Map context); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-starter/hsweb-spring-boot-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.starter.HswebAutoConfiguration,\ 4 | org.hswebframework.web.starter.SystemInitializeAutoConfiguration,\ 5 | org.hswebframework.web.starter.CorsAutoConfiguration -------------------------------------------------------------------------------- /hsweb-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | hsweb-framework 7 | org.hswebframework.web 8 | 3.0.0 9 | 10 | 4.0.0 11 | 12 | hsweb-starter 13 | pom 14 | 15 | hsweb-spring-boot-starter 16 | 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/entity/authorization/ParentPermission.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.entity.authorization; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hswebframework.web.commons.entity.Entity; 8 | 9 | import java.util.Set; 10 | 11 | @Getter 12 | @Setter 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | public class ParentPermission implements Entity { 16 | 17 | private static final long serialVersionUID = -7099575758680437572L; 18 | 19 | private String permission; 20 | 21 | private Set actions; 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/entity/authorization/RoleEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.entity.authorization; 2 | 3 | import org.hswebframework.web.commons.entity.GenericEntity; 4 | 5 | /** 6 | * 角色实体 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface RoleEntity extends GenericEntity { 11 | 12 | String name = "name"; 13 | String describe = "describe"; 14 | String status = "status"; 15 | 16 | String getName(); 17 | 18 | void setName(String name); 19 | 20 | String getDescribe(); 21 | 22 | void setDescribe(String describe); 23 | 24 | void setStatus(Byte status); 25 | 26 | Byte getStatus(); 27 | } 28 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/entity/authorization/UserRoleEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.entity.authorization; 2 | 3 | import org.hswebframework.web.commons.entity.CloneableEntity; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface UserRoleEntity extends CloneableEntity { 9 | 10 | String getUserId(); 11 | 12 | void setUserId(String userId); 13 | 14 | String getRoleId(); 15 | 16 | void setRoleId(String roleId); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/entity/authorization/bind/BindRoleUserEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.entity.authorization.bind; 2 | 3 | import org.hswebframework.web.entity.authorization.UserEntity; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | public interface BindRoleUserEntity extends UserEntity { 11 | List getRoles(); 12 | 13 | void setRoles(List roles); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/DataAccessFactory.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization; 2 | 3 | import org.hswebframework.web.authorization.access.DataAccessConfig; 4 | import org.hswebframework.web.authorization.builder.DataAccessConfigBuilderFactory; 5 | import org.hswebframework.web.entity.authorization.DataAccessEntity; 6 | 7 | /** 8 | * 数据权限配置工厂,用户将动态数据权限配置转为权限框架需要的配置,便于实现自定义数据权限 9 | * 10 | * @author zhouhao 11 | * @since 3.0 12 | * @see DataAccessConfig 13 | * @see DataAccessConfigBuilderFactory 14 | */ 15 | public interface DataAccessFactory { 16 | DataAccessConfig create(DataAccessEntity entity); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/PasswordStrengthValidator.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization; 2 | 3 | import org.hswebframework.web.service.Validator; 4 | 5 | /** 6 | * 密码强度验证器,在保存用户信息,需要修改密码的时候,会调用此接口来验证密码强度. 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface PasswordStrengthValidator extends Validator { 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/PermissionService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization; 2 | 3 | import org.hswebframework.web.entity.authorization.PermissionEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 权限管理服务,就一个简单的crud 8 | * 9 | * @author zhouhao 10 | * @since 3.0 11 | */ 12 | public interface PermissionService extends CrudService { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/UserSettingService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization; 2 | 3 | import org.hswebframework.web.entity.authorization.UserSettingEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0 11 | */ 12 | public interface UserSettingService extends CrudService { 13 | List selectByUser(String userId, String key); 14 | 15 | UserSettingEntity selectByUser(String userId, String key, String settingId); 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/UsernameValidator.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization; 2 | 3 | import org.hswebframework.web.service.Validator; 4 | 5 | /** 6 | * 用户名验证器,在保存用户信息的时候,用于验证用户名是否合法 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface UsernameValidator extends Validator { 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/events/ClearUserAuthorizationCacheEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author zhouhao 8 | * @see org.springframework.context.event.EventListener 9 | * @since 3.0.0-RC 10 | */ 11 | @AllArgsConstructor 12 | @Getter 13 | public class ClearUserAuthorizationCacheEvent { 14 | private String userId; 15 | 16 | private boolean all; 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/service/authorization/events/UserModifiedEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.authorization.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.web.entity.authorization.UserEntity; 6 | 7 | /** 8 | * 用户密码发生修改时事件 9 | * 10 | * @author zhouhao 11 | * @see org.springframework.context.event.EventListener 12 | * @see org.springframework.context.ApplicationEventPublisher 13 | * @since 3.0 14 | */ 15 | @AllArgsConstructor 16 | @Getter 17 | public class UserModifiedEvent { 18 | private UserEntity userEntity; 19 | 20 | private boolean passwordModified; 21 | 22 | private boolean roleModified; 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/PermissionDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.authorization; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.authorization.PermissionEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface PermissionDao extends CrudDao { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/RoleDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.authorization; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.authorization.RoleEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface RoleDao extends CrudDao { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.authorization; 2 | 3 | import org.hswebframework.web.entity.authorization.UserEntity; 4 | import org.hswebframework.web.dao.CrudDao; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface UserDao extends CrudDao { 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserRoleDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.authorization; 2 | 3 | import org.hswebframework.web.dao.Dao; 4 | import org.hswebframework.web.entity.authorization.UserRoleEntity; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author zhouhao 10 | */ 11 | public interface UserRoleDao extends Dao { 12 | int deleteByUserId(String userId); 13 | 14 | int deleteByRoleId(String roleId); 15 | 16 | void insert(UserRoleEntity userRoleBean); 17 | 18 | List selectByUserId(String userId); 19 | 20 | List selectByRoleId(String roleId); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/dao/authorization/UserSettingDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.authorization; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.authorization.UserSettingEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | public interface UserSettingDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": [ 3 | { 4 | "name": "hsweb.authorize.sync", 5 | "type": "java.lang.Boolean", 6 | "defaultValue": "false", 7 | "description": "是否自动将解析的权限定义信息同步到数据库,需满足hsweb.authorize.auto-parse=true." 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.authorization.starter.AuthorizationAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/test/java/org/hswebframework/web/authorization/starter/TestApplication.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.authorization.starter; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.test.context.web.WebAppConfiguration; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @SpringBootApplication 11 | @WebAppConfiguration 12 | public class TestApplication { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:permission_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 权限管理测试 13 | version: 3.0.0 14 | authorize: 15 | sync: true 16 | auto-parse: true 17 | logging: 18 | level: 19 | org.springframework: WARN 20 | org.hswebframework: WARN 21 | org.hswebframework.web: DEBUG -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-config/README.md: -------------------------------------------------------------------------------- 1 | ## 配置管理功能 2 | 管理配置,可在线更新配置信息,实时生效 3 | 4 | ##API 5 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-config/hsweb-system-config-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.config.starter.ConfigAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-config/hsweb-system-config-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:config_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 配置管理测试 13 | version: 3.0.0 14 | web: 15 | mappings: 16 | config: /config #default -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/src/main/java/org/hswebframework/web/dashboard/DashBoardService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dashboard; 2 | 3 | import org.hswebframework.web.service.CrudService; 4 | 5 | import java.util.List; 6 | 7 | public interface DashBoardService extends CrudService { 8 | 9 | List selectAllDefaults(); 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/src/main/java/org/hswebframework/web/dashboard/executor/DashBoardExecutor.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dashboard.executor; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | import org.hswebframework.web.dashboard.DashBoardConfigEntity; 5 | 6 | public interface DashBoardExecutor { 7 | Object execute(DashBoardConfigEntity entity, Authentication authentication); 8 | } 9 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/DashBoardExecutorStrategy.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dashboard.local; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | import org.hswebframework.web.dashboard.DashBoardConfigEntity; 5 | 6 | public interface DashBoardExecutorStrategy { 7 | 8 | boolean support(DashBoardConfigEntity entity); 9 | 10 | Object execute(DashBoardConfigEntity entity, Authentication authentication); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/java/org/hswebframework/web/dashboard/local/dao/DashBoardConfigDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dashboard.local.dao; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.dashboard.DashBoardConfigEntity; 5 | 6 | public interface DashBoardConfigDao extends CrudDao { 7 | } 8 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/src/main/java/org/hswebframework/web/dashboard/starter/DashboardAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dashboard.starter; 2 | 3 | import org.hswebframework.web.dao.Dao; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.context.annotation.ComponentScan; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * @author zhouhao 10 | */ 11 | @Configuration 12 | @ComponentScan({"org.hswebframework.web.dashboard.local" 13 | , "org.hswebframework.web.controller.dashboard"}) 14 | @MapperScan(value = "org.hswebframework.web.dashboard.local.dao", markerInterface = Dao.class) 15 | public class DashboardAutoConfiguration { 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.dashboard.starter.DashboardAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/src/main/java/org/hswebframework/web/controller/dashboard/model/UserDashBoardResponse.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.controller.dashboard.model; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | @Data 11 | @ApiModel("用户自定义仪表盘配置") 12 | public class UserDashBoardResponse { 13 | private String id; 14 | 15 | private String type; 16 | 17 | private String name; 18 | 19 | private String template; 20 | 21 | // private Object data; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/README.md: -------------------------------------------------------------------------------- 1 | ## 数据库维护功能 2 | 获取数据库表结构,创建、更新表结构,执行sql等 3 | 4 | ##API 5 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/DatabaseManagerService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager; 2 | 3 | import org.hswebframework.web.database.manager.meta.ObjectMetadata; 4 | import org.hswebframework.web.database.manager.sql.SqlExecutor; 5 | import org.hswebframework.web.database.manager.sql.TransactionSqlExecutor; 6 | import org.hswebframework.web.datasource.DynamicDataSource; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | /** 12 | * @author zhouhao 13 | */ 14 | public interface DatabaseManagerService extends SqlExecutor,TransactionSqlExecutor { 15 | Map> getMetas(); 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/SqlExecuteRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | /** 12 | * @author zhouhao 13 | */ 14 | @Data 15 | @Builder 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class SqlExecuteRequest implements Serializable{ 19 | private static final long serialVersionUID = 8640714319329779262L; 20 | private List sql; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/SqlExecuteResult.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * @author zhouhao 10 | */ 11 | @Data 12 | @Builder 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class SqlExecuteResult { 16 | 17 | private SqlInfo sqlInfo; 18 | 19 | private Object result; 20 | 21 | private boolean success; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/SqlInfo.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | @Data 11 | public class SqlInfo implements Serializable { 12 | private static final long serialVersionUID = -2119739552930123239L; 13 | private String sql; 14 | 15 | private String datasourceId; 16 | 17 | private String type; 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/exception/SqlExecuteException.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.exception; 2 | 3 | import org.hswebframework.web.BusinessException; 4 | 5 | public class SqlExecuteException extends BusinessException { 6 | private static final long serialVersionUID = -2109245893594218935L; 7 | private String sql; 8 | 9 | public SqlExecuteException(String message, Throwable cause, String sql) { 10 | super(message, cause); 11 | this.sql = sql; 12 | } 13 | 14 | public String getSql() { 15 | return sql; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/ForeignConstraint.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.meta.table; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | @Data 9 | public class ForeignConstraint extends Constraint { 10 | private static final long serialVersionUID = -7146549641064694467L; 11 | private String targetTable; 12 | 13 | private String targetColumn; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.meta.table.parser; 2 | 3 | import org.hswebframework.web.database.manager.meta.ObjectMetadata; 4 | 5 | import java.sql.SQLException; 6 | import java.util.List; 7 | 8 | public interface MetaDataParser { 9 | 10 | List parseAll() throws SQLException; 11 | 12 | M parse(String objectName) throws SQLException; 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserRegister.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.meta.table.parser; 2 | 3 | import org.hswebframework.web.database.manager.meta.ObjectMetadata; 4 | import org.hswebframework.web.datasource.DatabaseType; 5 | 6 | public interface MetaDataParserRegister { 7 | void registerMetaDataParser(DatabaseType databaseType, ObjectMetadata.ObjectType objectType, MetaDataParser parser); 8 | } 9 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/MetaDataParserSupplier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.meta.table.parser; 2 | 3 | import org.hswebframework.web.database.manager.meta.ObjectMetadata; 4 | import org.hswebframework.web.datasource.DatabaseType; 5 | 6 | public interface MetaDataParserSupplier { 7 | boolean isSupport(DatabaseType type); 8 | 9 | MetaDataParser get(); 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/meta/table/parser/TableMetaDataParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.meta.table.parser; 2 | 3 | import org.hswebframework.web.database.manager.meta.table.TableMetadata; 4 | 5 | public interface TableMetaDataParser extends MetaDataParser { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/sql/SqlExecutor.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.sql; 2 | 3 | import org.hswebframework.web.database.manager.SqlExecuteRequest; 4 | import org.hswebframework.web.database.manager.SqlExecuteResult; 5 | 6 | import java.util.List; 7 | 8 | public interface SqlExecutor { 9 | List execute(SqlExecuteRequest request)throws Exception; 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/sql/TransactionInfo.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.database.manager.sql; 2 | 3 | import lombok.Data; 4 | import org.hswebframework.web.database.manager.SqlInfo; 5 | 6 | import java.io.Serializable; 7 | import java.util.ArrayList; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | @Data 12 | public class TransactionInfo implements Serializable { 13 | private static final long serialVersionUID = -4174268983558799472L; 14 | private String id; 15 | 16 | private List sqlHistory=new ArrayList<>(); 17 | 18 | private Date createTime; 19 | 20 | private Date lastExecuteTime; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResult.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.manager.simple; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | @Data 10 | public class QueryResult { 11 | private List columns; 12 | 13 | private List> data=new ArrayList<>(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-local/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.datasource.manager.simple; 2 | 3 | import org.hswebframework.web.database.manager.SqlExecuteRequest; 4 | import org.hswebframework.web.database.manager.SqlExecuteResult; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author zhouhao 10 | */ 11 | public interface TransactionExecutor extends Runnable { 12 | String getTransactionId(); 13 | 14 | String getDatasourceId(); 15 | 16 | void commit(); 17 | 18 | void rollback(); 19 | 20 | boolean isRunning(); 21 | 22 | List execute(SqlExecuteRequest request)throws Exception; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.database.manager.DataBaseManagerAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:dbm_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 数据库管理测试 13 | version: 3.0.0 14 | logging: 15 | level: 16 | org.hswebframework: debug -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-datasource/README.md: -------------------------------------------------------------------------------- 1 | ## 数据源管理 2 | 动态维护数据源信息,热加载数据源,实现动态数据源以及分布式事务 3 | 4 | ## API 5 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-datasource/hsweb-system-datasource-api/src/main/java/org/hswebframework/web/service/datasource/DataSourceConfigService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.datasource; 2 | 3 | import org.hswebframework.web.entity.datasource.DataSourceConfigEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 数据源配置 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface DataSourceConfigService extends CrudService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-datasource/hsweb-system-datasource-local/src/main/java/org/hswebframework/web/dao/datasource/DataSourceConfigDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.datasource; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.datasource.DataSourceConfigEntity; 5 | 6 | /** 7 | * 数据源配置 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface DataSourceConfigDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-datasource/hsweb-system-datasource-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.datasource.starter.InDBDynamicDataSourceAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dev-tools/src/main/java/org/hswebframework/web/dev/tools/EnableDevTools.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dev.tools; 2 | 3 | import org.springframework.boot.autoconfigure.ImportAutoConfiguration; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | @Target(ElementType.TYPE) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Documented 14 | @Inherited 15 | @ImportAutoConfiguration(DevToolsAutoConfiguration.class) 16 | public @interface EnableDevTools { 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dev-tools/src/main/java/org/hswebframework/web/dev/tools/writer/CodeWriter.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dev.tools.writer; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface CodeWriter { 10 | String write(List codes); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/README.md: -------------------------------------------------------------------------------- 1 | ## 数据字典功能 2 | 3 | 提供数据字典功能,支持字典解析与反解析。支持树形结构的字典。 4 | 5 | ## 字典解析 6 | 7 | 详见: [DictionaryParserTests](hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryParserTests.java) -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/src/main/java/org/hswebframework/web/dictionary/api/DictionaryInfoService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.api; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface DictionaryInfoService { 10 | int insert(List dictionaryInfo); 11 | 12 | List select(String targetKey, String targetId, String dictionaryId); 13 | 14 | int delete(String targetKey, String targetId, String dictionaryId); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/src/main/java/org/hswebframework/web/dictionary/api/DictionaryWrapper.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.api; 2 | 3 | /** 4 | * 字典包装器,用于将实体类中的字段保存到数据库,或者将数据库中的字典信息包装到实体中 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface DictionaryWrapper { 10 | /** 11 | * 向一个实体类里填充数据字典 12 | * 13 | * @param id 实体类的id 14 | * @param bean 实体类 15 | * @param 实体类型 16 | * @return 填充后的实体类 17 | */ 18 | T wrap(Object id, T bean); 19 | 20 | /** 21 | * 把实体类中的 22 | * @param id 23 | * @param bean 24 | * @param 25 | * @return 26 | */ 27 | T persistent(Object id, T bean); 28 | } 29 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/src/main/java/org/hswebframework/web/dictionary/api/builder/DictionaryParserBuilder.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.api.builder; 2 | 3 | 4 | import org.hswebframework.web.dictionary.api.parser.SingleDictParser; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface DictionaryParserBuilder { 10 | SingleDictParser build(String config); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/src/main/java/org/hswebframework/web/dictionary/api/events/ClearDictionaryCacheEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.api.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @AllArgsConstructor 11 | @Getter 12 | public class ClearDictionaryCacheEvent { 13 | private String dictionaryId; 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-api/src/main/java/org/hswebframework/web/dictionary/api/parser/SingleDictParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.api.parser; 2 | 3 | import java.io.Serializable; 4 | import java.util.Optional; 5 | 6 | /** 7 | * TODO 完成注释 8 | * 9 | * @author zhouhao 10 | */ 11 | public interface SingleDictParser extends Serializable { 12 | Optional parse(String target, Object context); 13 | 14 | default Optional parse(String target) { 15 | return parse(target, null); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/DefaultDictionaryHelper.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.simple; 2 | 3 | 4 | /** 5 | * @author zhouhao 6 | * @since 3.0 7 | */ 8 | public interface DefaultDictionaryHelper { 9 | Object getDictEnum(Object id, String targetKey, String dictId, Class type); 10 | 11 | void persistent(Object id, String targetKey, String dictId, Class type,Object value); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/DictionaryWrapperObject.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.simple; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public interface DictionaryWrapperObject { 8 | 9 | void wrap(Object id, Object bean, DefaultDictionaryHelper helper); 10 | 11 | void persistent(Object id, Object bean, DefaultDictionaryHelper helper); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/main/java/org/hswebframework/web/dictionary/simple/parser/DictParserFormatter.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.simple.parser; 2 | 3 | import java.util.List; 4 | import java.util.function.BiFunction; 5 | 6 | /** 7 | * @author zhouhao 8 | * @see 3.0 9 | */ 10 | public interface DictParserFormatter { 11 | List> format(DictParserFormat format, Object value, BiFunction mapping); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/test/java/org/hswebframework/web/dictionary/simple/EmptyDictBean.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.simple; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 8 | */ 9 | @Data 10 | public class EmptyDictBean { 11 | private String id; 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-local/src/test/java/org/hswebframework/web/dictionary/simple/TestBean.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dictionary.simple; 2 | 3 | import lombok.Data; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 11 | */ 12 | @Data 13 | @Getter 14 | @Setter 15 | @ToString 16 | public class TestBean { 17 | private TestDict[] dict; 18 | 19 | private TestDict dict2; 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.dictionary.starter.DictionaryFactoryAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:dictionary_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 数据字典测试 13 | version: 3.0.0 -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/README.md: -------------------------------------------------------------------------------- 1 | ## 动态表单功能 2 | 在线可视化设计表单,直接生成数据库表结构. 提供统一的CRUD API。 3 | 4 | ## API 5 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DatabaseRepository.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form; 2 | 3 | import org.hswebframework.ezorm.rdb.RDBDatabase; 4 | 5 | /** 6 | * 数据库仓库,用于获取默认数据库信息,指定数据源的信息以及当前激活的数据库信息 7 | * 8 | * @author zhouhao 9 | * @see RDBDatabase 10 | * @since 3.0 11 | */ 12 | public interface DatabaseRepository { 13 | RDBDatabase getDefaultDatabase(); 14 | 15 | RDBDatabase getDatabase(String datasourceId); 16 | 17 | RDBDatabase getCurrentDatabase(); 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/DynamicFormColumnService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form; 2 | 3 | import org.hswebframework.web.entity.form.DynamicFormColumnEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 动态表单 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface DynamicFormColumnService extends CrudService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/FormDeployService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form; 2 | 3 | import org.hswebframework.web.entity.form.DynamicFormColumnEntity; 4 | import org.hswebframework.web.entity.form.DynamicFormEntity; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0.0-RC 11 | */ 12 | public interface FormDeployService { 13 | void deploy(String formId); 14 | 15 | void deploy(DynamicFormEntity form, List columns, boolean updateMeta); 16 | 17 | void unDeploy(String formId); 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/OptionalConvertBuilder.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form; 2 | 3 | import org.hswebframework.ezorm.core.OptionConverter; 4 | import org.hswebframework.ezorm.core.ValueConverter; 5 | import org.hswebframework.web.entity.form.DictConfig; 6 | import org.hswebframework.web.entity.form.DynamicFormColumnEntity; 7 | 8 | /** 9 | * 10 | * @author zhouhao 11 | */ 12 | public interface OptionalConvertBuilder { 13 | OptionConverter build(DictConfig dictConfig); 14 | 15 | ValueConverter buildValueConverter(DictConfig dictConfig); 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/DatabaseInitEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.ezorm.rdb.RDBDatabase; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | @AllArgsConstructor 12 | public class DatabaseInitEvent { 13 | 14 | @Getter 15 | private RDBDatabase database; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataInsertBeforeEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.ezorm.rdb.RDBTable; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | @AllArgsConstructor 12 | @Getter 13 | public class FormDataInsertBeforeEvent { 14 | private String formId; 15 | 16 | private RDBTable table; 17 | 18 | private T data; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataQueryBeforeEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.ezorm.rdb.RDBTable; 6 | import org.hswebframework.web.commons.entity.param.QueryParamEntity; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0.0-RC 11 | */ 12 | @AllArgsConstructor 13 | @Getter 14 | public class FormDataQueryBeforeEvent { 15 | private String formId; 16 | 17 | private RDBTable table; 18 | 19 | private QueryParamEntity param; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDataUpdateBeforeEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.hswebframework.ezorm.rdb.RDBTable; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | @AllArgsConstructor 12 | @Getter 13 | public class FormDataUpdateBeforeEvent { 14 | private String formId; 15 | 16 | private RDBTable table; 17 | 18 | private T data; 19 | 20 | private Object id; 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormDeployEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @AllArgsConstructor 11 | @Getter 12 | public class FormDeployEvent { 13 | private String formId; 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/events/FormUnDeployEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.events; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @AllArgsConstructor 11 | @Getter 12 | public class FormUnDeployEvent { 13 | private String formId; 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/ColumnInitializeContext.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.initialize; 2 | 3 | import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData; 4 | import org.hswebframework.web.entity.form.DynamicFormColumnEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | public interface ColumnInitializeContext extends TableInitializeContext { 10 | DynamicFormColumnEntity getColumnEntity(); 11 | 12 | RDBColumnMetaData getColumn(); 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/DynamicFormInitializeCustomer.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.initialize; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public interface DynamicFormInitializeCustomer { 8 | void customTableSetting(TableInitializeContext context); 9 | 10 | void customTableColumnSetting(ColumnInitializeContext context); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-api/src/main/java/org/hswebframework/web/service/form/initialize/TableInitializeContext.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.initialize; 2 | 3 | import org.hswebframework.ezorm.rdb.RDBDatabase; 4 | import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData; 5 | import org.hswebframework.web.entity.form.DynamicFormEntity; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | public interface TableInitializeContext { 11 | 12 | RDBDatabase getDatabase(); 13 | 14 | DynamicFormEntity getFormEntity(); 15 | 16 | RDBTableMetaData getTable(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormColumnDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.form; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.form.DynamicFormColumnEntity; 5 | 6 | /** 7 | * 动态表单 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface DynamicFormColumnDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.form; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.form.DynamicFormEntity; 5 | 6 | import java.util.concurrent.atomic.AtomicInteger; 7 | 8 | /** 9 | * 动态表单 DAO接口 10 | * 11 | * @author hsweb-generator-online 12 | */ 13 | public interface DynamicFormDao extends CrudDao { 14 | void incrementVersion(String formId); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/dao/form/DynamicFormDeployLogDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.form; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.form.DynamicFormDeployLogEntity; 5 | 6 | /** 7 | * 表单发布日志 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface DynamicFormDeployLogDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/DynamicFormException.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.simple; 2 | 3 | /** 4 | * 动态表单操作异常 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public class DynamicFormException extends RuntimeException { 10 | public DynamicFormException(String message, Throwable cause) { 11 | super(message, cause); 12 | } 13 | 14 | public DynamicFormException(Throwable cause) { 15 | super(cause); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationInfo.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.simple.validator; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.Map; 7 | 8 | @Setter 9 | @Getter 10 | public class JSR303AnnotationInfo { 11 | private Class annotation; 12 | 13 | private Map properties; 14 | } -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/JSR303AnnotationParserStrategy.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.simple.validator; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0.0-RC 8 | */ 9 | public interface JSR303AnnotationParserStrategy { 10 | 11 | boolean support(String type); 12 | 13 | JSR303AnnotationInfo parse(Map configMap); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotBlankStrategy.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.simple.validator.jsr303; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.hibernate.validator.constraints.NotBlank; 5 | import org.springframework.stereotype.Component; 6 | 7 | import javax.validation.constraints.NotNull; 8 | 9 | /** 10 | * @author zhouhao 11 | * @since 3.0.0-RC 12 | */ 13 | @Component 14 | @Slf4j 15 | public class NotBlankStrategy extends AbstractStrategy { 16 | 17 | @Override 18 | protected Class getAnnotationType() { 19 | return NotBlank.class; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-local/src/main/java/org/hswebframework/web/service/form/simple/validator/jsr303/NotNullStrategy.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.form.simple.validator.jsr303; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.stereotype.Component; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | /** 9 | * @author zhouhao 10 | * @since 3.0.0-RC 11 | */ 12 | @Component 13 | @Slf4j 14 | public class NotNullStrategy extends AbstractStrategy { 15 | 16 | @Override 17 | protected Class getAnnotationType() { 18 | return NotNull.class; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.form.DynamicFormAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-dynamic-form/hsweb-system-dynamic-form-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:form_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 动态表单测试 13 | version: 3.0.0 14 | logging: 15 | level: 16 | org.hswebframework: debug -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-file/hsweb-system-file-api/src/main/java/org/hswebframework/web/service/file/FileInfoService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.file; 2 | 3 | import org.hswebframework.web.entity.file.FileInfoEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 文件信息 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface FileInfoService extends CrudService { 12 | FileInfoEntity selectByMd5(String md5); 13 | 14 | FileInfoEntity selectByIdOrMd5(String idOrMd5); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-file/hsweb-system-file-local/src/main/java/org/hswebframework/web/dao/file/FileInfoDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.file; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.file.FileInfoEntity; 5 | 6 | /** 7 | * 文件信息 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface FileInfoDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-file/hsweb-system-file-oauth2/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.service.file.oauth2.OAuth2FileAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-file/hsweb-system-file-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.file.starter.FileAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.service.oauth2.client.starter.OAuth2ClientAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-oauth2-client/hsweb-system-oauth2-client-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:oauth2.client_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: OAuth2服务配置测试 13 | version: 3.0.0 -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-oauth2-server/hsweb-system-oauth2-server-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.oauth2.OAuth2GranterAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/src/main/java/org/hswebframework/web/service/organizational/RelationDefineService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.organizational; 2 | 3 | import org.hswebframework.web.entity.organizational.RelationDefineEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 关系定义 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface RelationDefineService extends CrudService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/src/main/java/org/hswebframework/web/service/organizational/RelationInfoService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.organizational; 2 | 3 | import org.hswebframework.web.entity.organizational.RelationInfoEntity; 4 | import org.hswebframework.web.organizational.authorization.relation.Relations; 5 | import org.hswebframework.web.service.CrudService; 6 | 7 | 8 | /** 9 | * 关系信息 服务类 10 | * 11 | * @author hsweb-generator-online 12 | */ 13 | public interface RelationInfoService extends CrudService { 14 | Relations getRelations(String relationTypeFrom, String relationFrom); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-api/src/main/java/org/hswebframework/web/service/organizational/event/ClearPersonCacheEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.organizational.event; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0 6 | */ 7 | public class ClearPersonCacheEvent { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/Department.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface Department extends Serializable { 10 | String getId(); 11 | 12 | String getName(); 13 | 14 | String getCode(); 15 | 16 | Organization getOrg(); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/District.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 行政区域 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface District extends Serializable { 12 | /** 13 | * @return 行政区域ID 14 | */ 15 | String getId(); 16 | 17 | /** 18 | * @return 行政区域名称, 如:江津区 19 | */ 20 | String getName(); 21 | 22 | /** 23 | * @return 行政区域全名, 如:重庆市江津区 24 | */ 25 | String getFullName(); 26 | 27 | /** 28 | * @return 行政区域代码, 如: 500116 29 | */ 30 | String getCode(); 31 | } 32 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/Personnel.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 人员基本信息 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface Personnel extends Serializable { 12 | String getId(); 13 | 14 | String getName(); 15 | 16 | String getPhone(); 17 | 18 | String getEmail(); 19 | 20 | String getPhoto(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthenticationManager.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | /** 4 | * 人员权限信息管理器 5 | * 6 | * @author zhouhao 7 | */ 8 | public interface PersonnelAuthenticationManager { 9 | PersonnelAuthentication getPersonnelAuthorizationByPersonId(String personId); 10 | 11 | PersonnelAuthentication getPersonnelAuthorizationByUserId(String userId); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthenticationSupplier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | import java.util.function.Supplier; 4 | 5 | /** 6 | * 人员权限提供者,用于根据人员或者用户id获取权限信息 7 | * 8 | * @author zhouhao 9 | * @see 3.0 10 | */ 11 | public interface PersonnelAuthenticationSupplier extends Supplier { 12 | PersonnelAuthentication getByPersonId(String personId); 13 | 14 | PersonnelAuthentication getByUserId(String userId); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/Position.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface Position extends Serializable { 10 | String getId(); 11 | 12 | String getCode(); 13 | 14 | String getName(); 15 | 16 | Department getDepartment(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/access/DistrictAttachEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.access; 2 | 3 | import org.hswebframework.web.commons.entity.Entity; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface DistrictAttachEntity extends Entity { 9 | String districtId = "districtId"; 10 | 11 | String getDistrictId(); 12 | 13 | void setDistrictId(String districtId); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/access/OrgAttachEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.access; 2 | 3 | import org.hswebframework.web.commons.entity.Entity; 4 | 5 | /** 6 | * 关联机构信息实体,实现该接口,表示实体与机构进行关联,在进行权限控制时,将会使用到该接口 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface OrgAttachEntity extends Entity { 12 | String orgId = "orgId"; 13 | 14 | String getOrgId(); 15 | 16 | void setOrgId(String orgId); 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/access/PersonAttachEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.access; 2 | 3 | import org.hswebframework.web.commons.entity.Entity; 4 | 5 | /** 6 | * 关联人员信息实体,实现该接口,表示实体与机构进行关联,在进行权限控制时,将会使用到该接口 7 | * @author zhouhao 8 | */ 9 | public interface PersonAttachEntity extends Entity { 10 | String personId = "personId"; 11 | 12 | String getPersonId(); 13 | 14 | void setPersonId(String personId); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/access/PositionAttachEntity.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.access; 2 | 3 | import org.hswebframework.web.commons.entity.Entity; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface PositionAttachEntity extends Entity { 9 | String positionId = "positionId"; 10 | 11 | String getPositionId(); 12 | 13 | void setPositionId(String positionId); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/DepartmentRelations.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.relation; 2 | 3 | 4 | public interface DepartmentRelations extends LinkedRelations { 5 | 6 | /** 7 | * 设置包含子级部门 8 | * 9 | * @return 部门关系链 10 | */ 11 | DepartmentRelations andChildren(); 12 | 13 | /** 14 | * 设置包含父级部门 15 | * 16 | * @return 部门关系链 17 | */ 18 | DepartmentRelations andParents(); 19 | 20 | /** 21 | * 获取部门下的人员关系链 22 | * 23 | * @return 人员关系链 24 | */ 25 | PersonRelations persons(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/OrgRelations.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.relation; 2 | 3 | 4 | public interface OrgRelations extends LinkedRelations { 5 | 6 | /** 7 | * 设置包含子级机构 8 | * 9 | * @return 机构关系链 10 | */ 11 | OrgRelations andChildren(); 12 | 13 | /** 14 | * 设置包含父级机构 15 | * 16 | * @return 机构关系链 17 | */ 18 | OrgRelations andParents(); 19 | 20 | /** 21 | * 获取全部的部门关系链 22 | * 23 | * @return 部门关系链 24 | */ 25 | DepartmentRelations department(); 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/PersonRelations.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.relation; 2 | 3 | public interface PersonRelations extends LinkedRelations { 4 | 5 | /** 6 | * @return 人员所在部门关系链 7 | */ 8 | DepartmentRelations department(); 9 | 10 | /** 11 | * @return 人员所在机构关系链 12 | */ 13 | OrgRelations org(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/RelationTargetSupplier.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.relation; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface RelationTargetSupplier { 10 | 11 | boolean support(String targetType, String target); 12 | 13 | Serializable get(String target); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelation.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.organizational.authorization.relation; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author zhouhao 9 | */ 10 | @Data 11 | public class SimpleRelation implements Relation { 12 | private static final long serialVersionUID = 1_0; 13 | 14 | private String dimension; 15 | 16 | private String relation; 17 | 18 | private String target; 19 | 20 | private Serializable targetObject; 21 | 22 | private String name; 23 | 24 | private Direction direction; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.organizational.authorization.OrganizationalAuthorizationAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/DistrictDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.organizational; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.organizational.DistrictEntity; 5 | 6 | /** 7 | * 表单发布日志 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface DistrictDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationDefineDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.organizational; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.organizational.RelationDefineEntity; 5 | 6 | /** 7 | * 关系定义 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface RelationDefineDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-local/src/main/java/org/hswebframework/web/dao/organizational/RelationInfoDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.organizational; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.organizational.RelationInfoEntity; 5 | 6 | /** 7 | * 关系信息 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface RelationInfoDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.organizational.starter.AuthorizationAutoConfigration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/src/test/java/org/hswebframework/web/starter/organizational/TestApplication.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.starter.organizational; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.test.context.web.WebAppConfiguration; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @SpringBootApplication 11 | @WebAppConfiguration 12 | public class TestApplication { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-organizational/hsweb-system-organizational-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | datasource: 5 | url : jdbc:h2:mem:org_test_mem 6 | username : sa 7 | password : 8 | type: com.alibaba.druid.pool.DruidDataSource 9 | driver-class-name : org.h2.Driver 10 | hsweb: 11 | app: 12 | name: 组织架构测试 13 | version: 3.0.0 14 | logging: 15 | level: 16 | org.hswebframework: debug -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/README.md: -------------------------------------------------------------------------------- 1 | ## 任务调度管理 2 | 在线维护定时任务 3 | ## API 4 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobExecutor.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.schedule; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * @author zhouhao 7 | */ 8 | public interface ScheduleJobExecutor { 9 | Object doExecuteJob(String jobId, Map parameter); 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleJobService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.schedule; 2 | 3 | import org.hswebframework.web.entity.schedule.ScheduleJobEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 调度任务 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface ScheduleJobService extends CrudService { 12 | 13 | void enable(String id); 14 | 15 | void disable(String id); 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-api/src/main/java/org/hswebframework/web/service/schedule/ScheduleTriggerBuilder.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.schedule; 2 | 3 | import org.quartz.spi.MutableTrigger; 4 | 5 | /** 6 | * TODO 完成注释 7 | * 8 | * @author zhouhao 9 | */ 10 | public interface ScheduleTriggerBuilder { 11 | MutableTrigger buildTrigger(String config); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/dao/schedule/ScheduleJobDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.schedule; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.schedule.ScheduleJobEntity; 5 | 6 | /** 7 | * 调度任务 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface ScheduleJobDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-local/src/main/java/org/hswebframework/web/service/schedule/simple/DynamicJob.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.schedule.simple; 2 | 3 | import org.quartz.DisallowConcurrentExecution; 4 | import org.quartz.Job; 5 | import org.quartz.JobExecutionContext; 6 | import org.quartz.JobExecutionException; 7 | 8 | /** 9 | * TODO 完成注释 10 | * 11 | * @author zhouhao 12 | */ 13 | @DisallowConcurrentExecution 14 | public class DynamicJob implements Job { 15 | @Override 16 | public void execute(JobExecutionContext context) throws JobExecutionException { 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.schedule.configuration.ScheduleAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-schedule/hsweb-system-schedule-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | proxy-target-class: true 5 | datasource: 6 | url : jdbc:h2:file:./target/workflow-test;DB_CLOSE_ON_EXIT=FALSE 7 | username : sa 8 | password : 9 | type: com.alibaba.druid.pool.DruidDataSource 10 | driver-class-name : org.h2.Driver 11 | cache: 12 | type: simple 13 | 14 | logging: 15 | level: 16 | org.quartz: debug 17 | # org.activiti: debug 18 | mybatis: 19 | dynamic-datasource: false 20 | server: 21 | port: 8080 22 | scheduler: 23 | enable-cluster: false 24 | execute-tags: core -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/README.md: -------------------------------------------------------------------------------- 1 | ## 动态脚本管理 2 | 通过脚本(js,groovy...)在线编写代码,后端执行 3 | 4 | ## API -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/hsweb-system-script-api/src/main/java/org/hswebframework/web/service/script/ScriptExecutorService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.script; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 7 | * @author zhouhao 8 | */ 9 | public interface ScriptExecutorService { 10 | Object execute(String id, Map parameters) throws Exception; 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/hsweb-system-script-api/src/main/java/org/hswebframework/web/service/script/ScriptService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.script; 2 | 3 | import org.hswebframework.web.entity.script.ScriptEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 动态脚本 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface ScriptService extends CrudService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/hsweb-system-script-local/src/main/java/org/hswebframework/web/dao/script/ScriptDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.script; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.script.ScriptEntity; 5 | 6 | /** 7 | * 动态脚本 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface ScriptDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/hsweb-system-script-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.service.dynamic.script.DynamicScriptAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-script/hsweb-system-script-starter/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | proxy-target-class: true 5 | datasource: 6 | url : jdbc:h2:file:./target/script-test 7 | username : sa 8 | password : 9 | type: com.alibaba.druid.pool.DruidDataSource 10 | cache: 11 | type: simple 12 | 13 | logging: 14 | level: 15 | org.flowable: debug 16 | org.hswebframework.web: debug 17 | # org.activiti: debug 18 | mybatis: 19 | dynamic-datasource: false 20 | server: 21 | port: 8088 -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/README.md: -------------------------------------------------------------------------------- 1 | ## 模板管理 2 | 在线编辑模板,指定模板语言,传入数据,渲染模板 3 | ##API 4 | //todo -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-api/src/main/java/org/hswebframework/web/service/template/TemplateRendeFacotry.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.template; 2 | 3 | import org.hswebframework.web.entity.template.TemplateEntity; 4 | 5 | /** 6 | * 模板渲染器工厂 7 | * 8 | * @author zhouhao 9 | * @since 3.0 10 | */ 11 | public interface TemplateRendeFacotry { 12 | boolean isSupport(String type); 13 | 14 | TemplateRender create(TemplateEntity templateEntity); 15 | } 16 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-api/src/main/java/org/hswebframework/web/service/template/TemplateRender.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.template; 2 | 3 | /** 4 | * 模板渲染器 5 | * 6 | * @author zhouhao 7 | * @since 3.0 8 | */ 9 | public interface TemplateRender { 10 | String render(Object context); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-api/src/main/java/org/hswebframework/web/service/template/TemplateService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.service.template; 2 | 3 | import org.hswebframework.web.entity.template.TemplateEntity; 4 | import org.hswebframework.web.service.CrudService; 5 | 6 | /** 7 | * 模板 服务类 8 | * 9 | * @author hsweb-generator-online 10 | */ 11 | public interface TemplateService extends CrudService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-local/src/main/java/org/hswebframework/web/dao/template/TemplateDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.dao.template; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.entity.template.TemplateEntity; 5 | 6 | /** 7 | * 模板 DAO接口 8 | * @author hsweb-generator-online 9 | */ 10 | public interface TemplateDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-starter/src/main/java/org/hswebframework/web/template/starter/TemplateAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.template.starter; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0 9 | */ 10 | @Configuration 11 | @ComponentScan({"org.hswebframework.web.service.template.simple" 12 | , "org.hswebframework.web.controller.template"}) 13 | public class TemplateAutoConfiguration { 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-template/hsweb-system-template-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.template.starter.TemplateAutoConfiguration -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/README.md: -------------------------------------------------------------------------------- 1 | ## 工作流模板 2 | 使用flowable(前activiti) 整合组织架构和动态表单。实现灵活的工作流配置和运行。 3 | 4 | ## SQL条件 5 | `hsweb-system-workflow-local`模块中提供了一些自定义的查询条件,用于对流程的关联查询.可以在动态查询中 6 | 进行使用,例如: 7 | 8 | ```java 9 | 10 | //查询id为userId用户的待办任务 11 | createQuery().where("processInstanceId","user-wf-todo",userId).list(); 12 | 13 | ``` 14 | 注意: 表中需要存在与属性`processInstanceId`关联的字段 15 | 16 | 1. user-wf-claim : 用户待签收(领取)的流程数据 17 | 2. user-wf-todo : 用户待处理的流程数据 18 | 3. user-wf-completed : 用户已处理的流程数据 19 | 4. user-wf-part : 用户参与的流程数据,通过options来参与的类型: `where("processInstanceId$user-wf-part$starter","admin")`.(参与类型为`starter`) 20 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ActivityConfigDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dao; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.workflow.dao.entity.ActivityConfigEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ActivityConfigDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessDefineConfigDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dao; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.workflow.dao.entity.ProcessDefineConfigEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ProcessDefineConfigDao extends CrudDao { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/ProcessHistoryDao.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dao; 2 | 3 | import org.hswebframework.web.dao.CrudDao; 4 | import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ProcessHistoryDao extends CrudDao { 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dao/entity/ListenerConfig.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dao.entity; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | @Getter 11 | @Setter 12 | public class ListenerConfig { 13 | private String eventType; 14 | 15 | private String language; 16 | 17 | private String script; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/CandidateDimension.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dimension; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface CandidateDimension { 11 | 12 | List getCandidateUserIdList(); 13 | 14 | CandidateDimension empty = Collections::emptyList; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/CandidateDimensionParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dimension; 2 | 3 | /** 4 | * @author zhouhao 5 | * @see CandidateDimension 6 | * @since 3.0.0-RC 7 | */ 8 | public interface CandidateDimensionParser { 9 | CandidateDimension parse(DimensionContext context, String jsonConfig); 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DefaultPermissionDimensionParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dimension; 2 | 3 | import org.hswebframework.web.authorization.AuthenticationPredicate; 4 | import org.hswebframework.web.authorization.AuthenticationUtils; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | @Component 12 | public class DefaultPermissionDimensionParser implements PermissionDimensionParser { 13 | @Override 14 | public AuthenticationPredicate parse(String jsonConfig) { 15 | 16 | return AuthenticationUtils.createPredicate(jsonConfig); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/DimensionContext.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dimension; 2 | 3 | 4 | import lombok.*; 5 | import org.activiti.engine.task.TaskInfo; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | @Getter 12 | @Setter 13 | @Builder 14 | @NoArgsConstructor 15 | @AllArgsConstructor 16 | public class DimensionContext { 17 | 18 | /** 19 | * 流程发起人ID 20 | */ 21 | private String creatorId; 22 | 23 | private String processDefineId; 24 | 25 | private String activityId; 26 | 27 | /** 28 | * 当前环节 29 | */ 30 | private TaskInfo task; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/dimension/PermissionDimensionParser.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.dimension; 2 | 3 | import org.hswebframework.web.authorization.AuthenticationPredicate; 4 | 5 | /** 6 | * @author zhouhao 7 | * @see AuthenticationPredicate 8 | * @since 3.0.0-RC 9 | */ 10 | public interface PermissionDimensionParser { 11 | AuthenticationPredicate parse(String jsonConfig); 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/listener/ProcessEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.listener; 2 | 3 | import org.activiti.engine.runtime.ProcessInstance; 4 | 5 | /** 6 | * @author zhouhao 7 | * @since 3.0.0-RC 8 | */ 9 | public interface ProcessEvent { 10 | 11 | ProcessInstance getProcessInstance(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/listener/ProcessEventListener.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.listener; 2 | 3 | /** 4 | * 5 | * @author zhouhao 6 | * @since 3.0.0-RC 7 | */ 8 | public interface ProcessEventListener { 9 | 10 | void doEvent(ProcessEvent event); 11 | } 12 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/listener/TaskEvent.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.listener; 2 | 3 | import org.activiti.engine.runtime.ProcessInstance; 4 | import org.activiti.engine.task.Task; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface TaskEvent { 11 | Task getTask(); 12 | 13 | ProcessInstance getProcessInstance(); 14 | } 15 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/listener/TaskEventListener.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.listener; 2 | 3 | /** 4 | * @author zhouhao 5 | * @since 3.0.0-RC 6 | */ 7 | public interface TaskEventListener { 8 | void doEvent(TaskEvent event); 9 | } 10 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/ActivityConfigService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service; 2 | 3 | import org.hswebframework.web.service.CrudService; 4 | import org.hswebframework.web.workflow.dao.entity.ActivityConfigEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ActivityConfigService extends CrudService { 11 | 12 | ActivityConfigEntity selectByProcessDefineIdAndActivityId(String processDefineId, String activityId); 13 | 14 | ActivityConfigEntity selectByProcessDefineKeyAndActivityId(String processDefineKey, String activityId); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/ProcessDefineConfigService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service; 2 | 3 | import org.hswebframework.web.service.CrudService; 4 | import org.hswebframework.web.workflow.dao.entity.ActivityConfigEntity; 5 | import org.hswebframework.web.workflow.dao.entity.ProcessDefineConfigEntity; 6 | 7 | /** 8 | * @author zhouhao 9 | * @since 3.0.0-RC 10 | */ 11 | public interface ProcessDefineConfigService extends CrudService { 12 | 13 | ProcessDefineConfigEntity selectByProcessDefineId(String processDefineId); 14 | 15 | ProcessDefineConfigEntity selectByLatestProcessDefineKey(String processDefineKey); 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/ProcessHistoryService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service; 2 | 3 | import org.hswebframework.web.service.CrudService; 4 | import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity; 5 | 6 | /** 7 | * @author zhouhao 8 | * @since 3.0.0-RC 9 | */ 10 | public interface ProcessHistoryService extends CrudService { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/config/CandidateInfo.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service.config; 2 | 3 | import org.hswebframework.web.authorization.Authentication; 4 | import org.hswebframework.web.organizational.authorization.PersonnelAuthentication; 5 | 6 | /** 7 | * 候选人信息 8 | */ 9 | public interface CandidateInfo { 10 | /** 11 | * 候选人的用户授权信息 12 | * 13 | * @see Authentication 14 | */ 15 | Authentication user(); 16 | 17 | /** 18 | * 候选人的组织架构人员信息 19 | * 20 | * @see PersonnelAuthentication 21 | */ 22 | PersonnelAuthentication person(); 23 | } 24 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/config/ProcessConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service.config; 2 | 3 | 4 | import org.activiti.engine.repository.ProcessDefinition; 5 | import org.hswebframework.web.workflow.listener.ProcessEventListener; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * @author zhouhao 11 | * @since 3.0.0-RC 12 | */ 13 | public interface ProcessConfiguration { 14 | String getFormId(); 15 | 16 | void assertCanStartProcess(String userId, ProcessDefinition definition); 17 | 18 | boolean canStartProcess(String userId, ProcessDefinition definition); 19 | 20 | ProcessEventListener getProcessListener(String eventType); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/service/config/ProcessConfigurationService.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.service.config; 2 | 3 | 4 | public interface ProcessConfigurationService { 5 | 6 | ActivityConfiguration getActivityConfiguration(String doingUser, String processDefineId, String activityId); 7 | 8 | ProcessConfiguration getProcessConfiguration(String processDefineId); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/java/org/hswebframework/web/workflow/web/request/ModelCreateRequest.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.web.request; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import org.hibernate.validator.constraints.NotBlank; 7 | 8 | @Data 9 | @ApiModel("工作流模型创建请求") 10 | public class ModelCreateRequest { 11 | 12 | @ApiModelProperty(value = "模型标识",example = "test_model") 13 | @NotBlank 14 | private String key; 15 | 16 | @ApiModelProperty(value = "模型名称",example = "测试模型") 17 | @NotBlank 18 | private String name; 19 | 20 | @ApiModelProperty(value = "模型说明") 21 | private String description; 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/resources/processes/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/main/resources/processes/README.md -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/java/org/hswebframework/web/workflow/flowable/TestApplication.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.workflow.flowable; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.context.annotation.ComponentScan; 5 | 6 | /** 7 | * @author zhouhao 8 | */ 9 | @SpringBootApplication 10 | @ComponentScan("org.hswebframework.web.workflow") 11 | public class TestApplication { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url : jdbc:mysql://localhost:3306/hsweb?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false 4 | username : root 5 | password : root 6 | type: com.alibaba.druid.pool.DruidDataSource -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | aop: 3 | auto: true 4 | proxy-target-class: true 5 | datasource: 6 | url : jdbc:h2:file:./target/workflow-test 7 | username : sa 8 | password : 9 | type: com.alibaba.druid.pool.DruidDataSource 10 | cache: 11 | type: simple 12 | 13 | logging: 14 | level: 15 | org.flowable: debug 16 | org.hswebframework.web: debug 17 | # org.activiti: debug 18 | mybatis: 19 | dynamic-datasource: false 20 | server: 21 | port: 8088 -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/resources/processes/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-local/src/test/resources/processes/README.md -------------------------------------------------------------------------------- /hsweb-system/hsweb-system-workflow/hsweb-system-workflow-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.workflow.starter.WorkFlowAutoConfiguration -------------------------------------------------------------------------------- /hsweb-tests/src/main/java/org/hswebframework/web/tests/TestProcess.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.tests; 2 | 3 | public interface TestProcess { 4 | TestProcess setUp(TestProcessSetUp testProcessSetUp); 5 | 6 | TestResult exec() throws Exception; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /hsweb-tests/src/main/java/org/hswebframework/web/tests/TestProcessSetUp.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.tests; 2 | 3 | import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; 4 | 5 | public interface TestProcessSetUp { 6 | void setUp(MockHttpServletRequestBuilder requestBuilder); 7 | } -------------------------------------------------------------------------------- /hsweb-thirdparty/README.md: -------------------------------------------------------------------------------- 1 | # 对一些第三方插件的封装 2 | 3 | ```bash 4 | --------hsweb-thirdparty-ueditor # 百度ueditor的封装 5 | 6 | ``` -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/com/baidu/ueditor/Context.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor; 2 | 3 | import org.hswebframework.web.service.file.FileInfoService; 4 | import org.hswebframework.web.service.file.FileService; 5 | 6 | public class Context { 7 | public static FileService FILE_SERVICE; 8 | public static FileInfoService RESOURCES_SERVICE; 9 | } 10 | -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/com/baidu/ueditor/Encoder.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor; 2 | 3 | public class Encoder { 4 | 5 | public static String toUnicode ( String input ) { 6 | 7 | StringBuilder builder = new StringBuilder(); 8 | char[] chars = input.toCharArray(); 9 | 10 | for ( char ch : chars ) { 11 | 12 | if ( ch < 256 ) { 13 | builder.append( ch ); 14 | } else { 15 | builder.append("\\u").append(Integer.toHexString(ch & 0xffff)); 16 | } 17 | 18 | } 19 | 20 | return builder.toString(); 21 | 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/com/baidu/ueditor/define/ActionState.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor.define; 2 | 3 | public enum ActionState { 4 | UNKNOW_ERROR 5 | } 6 | -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/com/baidu/ueditor/define/MIMEType.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor.define; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class MIMEType { 7 | 8 | public static final Map types = new HashMap<>(); 9 | 10 | static { 11 | types.put("image/gif", ".gif"); 12 | types.put("image/jpeg", ".jpg"); 13 | types.put("image/jpg", ".jpg"); 14 | types.put("image/png", ".png"); 15 | types.put("image/bmp", ".bmp"); 16 | } 17 | 18 | public static String getSuffix(String mime) { 19 | return MIMEType.types.get(mime); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/com/baidu/ueditor/define/State.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor.define; 2 | 3 | /** 4 | * 处理状态接口 5 | * 6 | * @author hancong03@baidu.com 7 | */ 8 | public interface State { 9 | 10 | boolean isSuccess(); 11 | 12 | void putInfo(String name, String val); 13 | 14 | void putInfo(String name, long val); 15 | 16 | String toJSONString(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/java/org/hswebframework/web/thirdpart/ueditor/UeditorAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.hswebframework.web.thirdpart.ueditor; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration 7 | public class UeditorAutoConfiguration { 8 | 9 | @Bean 10 | public UeditorController ueditorController(){ 11 | return new UeditorController(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/resources/META-INF/additional-spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": [ 3 | { 4 | "name": "ueditor.rootPath", 5 | "type": "java.lang.String", 6 | "defaultValue": "/", 7 | "description": "ueditor访问的根路径,例如:/ , http://file_server/." 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | org.hswebframework.web.thirdpart.ueditor.UeditorAutoConfiguration -------------------------------------------------------------------------------- /hsweb-thirdparty/hsweb-thirdparty-ueditor/src/test/java/com/baidu/ueditor/define/MultiStateTest.java: -------------------------------------------------------------------------------- 1 | package com.baidu.ueditor.define; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | public class MultiStateTest { 8 | 9 | @Test 10 | public void toJSONString(){ 11 | MultiState state=new MultiState(true); 12 | 13 | state.addState(new BaseState()); 14 | state.putInfo("test",1); 15 | state.putInfo("test","1"); 16 | 17 | System.out.println(state.toJSONString()); 18 | 19 | } 20 | } -------------------------------------------------------------------------------- /hsweb-thirdparty/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | hsweb-framework 7 | org.hswebframework.web 8 | 3.0.0 9 | 10 | 4.0.0 11 | 12 | hsweb-thirdparty 13 | pom 14 | 15 | hsweb-thirdparty-ueditor 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /quick-start/UTILS.md: -------------------------------------------------------------------------------- 1 | # 实用工具包 2 | 3 | hsweb提供了一些实用的工具类 4 | 5 | 1. 实体类属性拷贝 6 | 7 | ```java 8 | //拷贝source的属性到target 9 | FastBeanCopier.copy(source,target); 10 | //id和createTime属性不拷贝 11 | FastBeanCopier.copy(source,target,"id","createTime"); 12 | //只拷贝name和age属性 13 | FastBeanCopier.copy(source,target,FastBeanCopier.include("name","age")); 14 | 15 | ``` 16 | 17 | 2. 枚举数据字典,[点击查看](../hsweb-core/README.md#数据字典]) 18 | 19 | -------------------------------------------------------------------------------- /quick-start/img/create-application-java.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-application-java.gif -------------------------------------------------------------------------------- /quick-start/img/create-application-yml.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-application-yml.gif -------------------------------------------------------------------------------- /quick-start/img/create-controller.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-controller.gif -------------------------------------------------------------------------------- /quick-start/img/create-dao.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-dao.gif -------------------------------------------------------------------------------- /quick-start/img/create-entity.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-entity.gif -------------------------------------------------------------------------------- /quick-start/img/create-mybatis-mapper.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-mybatis-mapper.gif -------------------------------------------------------------------------------- /quick-start/img/create-project.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-project.gif -------------------------------------------------------------------------------- /quick-start/img/create-service.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/create-service.gif -------------------------------------------------------------------------------- /quick-start/img/idea-test.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/idea-test.gif -------------------------------------------------------------------------------- /quick-start/img/import-authorization-module.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/import-authorization-module.gif -------------------------------------------------------------------------------- /quick-start/img/import-commons-module.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/import-commons-module.gif -------------------------------------------------------------------------------- /quick-start/img/start-application.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/start-application.gif -------------------------------------------------------------------------------- /quick-start/img/test-auth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yizhuoyan/hsweb-framework/250e107cddce964b5869b58a58e81b49f5058926/quick-start/img/test-auth.gif --------------------------------------------------------------------------------