From 0495cb488e3336ae6589b883c231d7f2149c6d72 Mon Sep 17 00:00:00 2001 From: Eric <01714308@yto.net.cn> Date: Wed, 11 Feb 2026 11:04:23 +0800 Subject: [PATCH] jdk 17 --- .idea/compiler.xml | 28 + .idea/encodings.xml | 22 + .idea/jarRepositories.xml | 50 ++ .idea/lingniu-platform.iml | 9 - .idea/misc.xml | 14 +- .idea/modules.xml | 8 - demo/backend/{ => demo}/.gitattributes | 0 demo/backend/{ => demo}/.gitignore | 0 demo/backend/{ => demo}/pom.xml | 0 .../example/demo/DemoApplication.java | 2 +- .../demo/controller/DemoController.java} | 16 +- .../java/org/lingniu}/example/demo/test.http | 6 + .../java/org/lingniu/example/demo/test2.http | 50 ++ .../src/main/resources/application-dev.yml} | 0 .../src/main/resources/application-test.yml | 70 ++ .../demo/src/main/resources/application.yml | 3 + .../example/demo/DemoApplicationTests.java | 2 +- demo/backend/mvnw | 295 -------- demo/backend/mvnw.cmd | 189 ----- demo/frontend/README.md | 5 - demo/frontend/demo/demo-sdk/.env.development | 9 + demo/frontend/demo/demo-sdk/.env.production | 7 + demo/frontend/{ => demo/demo-sdk}/.gitignore | 0 demo/frontend/demo/demo-sdk/README.md | 159 +++++ demo/frontend/{ => demo/demo-sdk}/index.html | 0 .../frontend/{ => demo/demo-sdk}/package.json | 3 +- .../{ => demo/demo-sdk}/pnpm-lock.yaml | 23 + .../{ => demo/demo-sdk}/pnpm-workspace.yaml | 0 .../{ => demo/demo-sdk}/public/vite.svg | 0 demo/frontend/demo/demo-sdk/src/App.vue | 160 +++++ .../{ => demo/demo-sdk}/src/assets/vue.svg | 0 .../demo-sdk/src/components/EChartsReport.vue | 142 ++++ demo/frontend/demo/demo-sdk/src/main.ts | 37 + .../demo/demo-sdk/src/router/index.ts | 90 +++ .../{ => demo/demo-sdk}/src/style.css | 0 .../demo/demo-sdk/src/views/Callback.vue | 111 +++ .../demo/demo-sdk/src/views/Dashboard.vue | 581 ++++++++++++++++ .../demo/demo-sdk/src/views/Profile.vue | 487 +++++++++++++ .../{ => demo/demo-sdk}/tsconfig.app.json | 0 .../{ => demo/demo-sdk}/tsconfig.json | 0 .../{ => demo/demo-sdk}/tsconfig.node.json | 0 .../{ => demo/demo-sdk}/vite.config.ts | 5 +- demo/frontend/src/App.vue | 9 - demo/frontend/src/components/Home.vue | 37 - demo/frontend/src/main.ts | 18 - demo/frontend/src/router/index.ts | 31 - idp/backend/idp-starter/.gitattributes | 2 - idp/backend/idp-starter/mvnw | 295 -------- idp/backend/idp-starter/mvnw.cmd | 189 ----- idp/backend/idp-starter/pom.xml | 2 +- .../idp/config/AuthorizationServerConfig.java | 1 + .../org/lingniu/idp/config/CaptchaConfig.java | 4 +- .../org/lingniu/idp/controller/login.http | 20 +- .../lingniu/idp/model/vo/AccessTokenInfo.java | 2 +- .../idp/utils/ClientCredentialUtil.java | 4 +- ...lication-local.yml => application-dev.yml} | 2 +- .../src/main/resources/application-test.yml | 2 +- .../src/main/resources/application.yml | 2 +- idp/frontend/{ => idp}/.env.development | 4 +- idp/frontend/{ => idp}/.env.production | 0 idp/frontend/{ => idp}/.env.staging | 0 idp/frontend/{ => idp}/README.md | 0 idp/frontend/{ => idp}/crypto-js.d.ts | 0 idp/frontend/{ => idp}/index.html | 0 idp/frontend/{ => idp}/package.json | 0 idp/frontend/{ => idp}/pnpm-lock.yaml | 0 idp/frontend/{ => idp}/src/App.vue | 0 idp/frontend/{ => idp}/src/api/login.ts | 0 .../{ => idp}/src/assets/401_images/401.gif | Bin .../{ => idp}/src/assets/404_images/404.png | Bin .../src/assets/404_images/404_cloud.png | Bin .../{ => idp}/src/assets/icons/svg/404.svg | 0 .../{ => idp}/src/assets/icons/svg/bug.svg | 0 .../{ => idp}/src/assets/icons/svg/build.svg | 0 .../{ => idp}/src/assets/icons/svg/button.svg | 0 .../src/assets/icons/svg/cascader.svg | 0 .../{ => idp}/src/assets/icons/svg/chart.svg | 0 .../src/assets/icons/svg/checkbox.svg | 0 .../src/assets/icons/svg/clipboard.svg | 0 .../{ => idp}/src/assets/icons/svg/code.svg | 0 .../{ => idp}/src/assets/icons/svg/color.svg | 0 .../src/assets/icons/svg/component.svg | 0 .../src/assets/icons/svg/dashboard.svg | 0 .../src/assets/icons/svg/date-range.svg | 0 .../{ => idp}/src/assets/icons/svg/date.svg | 0 .../{ => idp}/src/assets/icons/svg/dict.svg | 0 .../src/assets/icons/svg/documentation.svg | 0 .../src/assets/icons/svg/download.svg | 0 .../{ => idp}/src/assets/icons/svg/drag.svg | 0 .../{ => idp}/src/assets/icons/svg/druid.svg | 0 .../{ => idp}/src/assets/icons/svg/edit.svg | 0 .../src/assets/icons/svg/education.svg | 0 .../{ => idp}/src/assets/icons/svg/email.svg | 0 .../{ => idp}/src/assets/icons/svg/enter.svg | 0 .../src/assets/icons/svg/example.svg | 0 .../{ => idp}/src/assets/icons/svg/excel.svg | 0 .../src/assets/icons/svg/exit-fullscreen.svg | 0 .../src/assets/icons/svg/eye-open.svg | 0 .../{ => idp}/src/assets/icons/svg/eye.svg | 0 .../{ => idp}/src/assets/icons/svg/form.svg | 0 .../src/assets/icons/svg/fullscreen.svg | 0 .../{ => idp}/src/assets/icons/svg/github.svg | 0 .../{ => idp}/src/assets/icons/svg/guide.svg | 0 .../{ => idp}/src/assets/icons/svg/icon.svg | 0 .../{ => idp}/src/assets/icons/svg/input.svg | 0 .../src/assets/icons/svg/international.svg | 0 .../{ => idp}/src/assets/icons/svg/job.svg | 0 .../src/assets/icons/svg/language.svg | 0 .../{ => idp}/src/assets/icons/svg/link.svg | 0 .../{ => idp}/src/assets/icons/svg/list.svg | 0 .../{ => idp}/src/assets/icons/svg/lock.svg | 0 .../{ => idp}/src/assets/icons/svg/log.svg | 0 .../src/assets/icons/svg/logininfor.svg | 0 .../src/assets/icons/svg/message.svg | 0 .../{ => idp}/src/assets/icons/svg/money.svg | 0 .../src/assets/icons/svg/monitor.svg | 0 .../{ => idp}/src/assets/icons/svg/moon.svg | 0 .../src/assets/icons/svg/more-up.svg | 0 .../{ => idp}/src/assets/icons/svg/nested.svg | 0 .../{ => idp}/src/assets/icons/svg/number.svg | 0 .../{ => idp}/src/assets/icons/svg/online.svg | 0 .../src/assets/icons/svg/password.svg | 0 .../{ => idp}/src/assets/icons/svg/pdf.svg | 0 .../{ => idp}/src/assets/icons/svg/people.svg | 0 .../src/assets/icons/svg/peoples.svg | 0 .../{ => idp}/src/assets/icons/svg/phone.svg | 0 .../{ => idp}/src/assets/icons/svg/post.svg | 0 .../{ => idp}/src/assets/icons/svg/qq.svg | 0 .../src/assets/icons/svg/question.svg | 0 .../{ => idp}/src/assets/icons/svg/radio.svg | 0 .../{ => idp}/src/assets/icons/svg/rate.svg | 0 .../src/assets/icons/svg/redis-list.svg | 0 .../{ => idp}/src/assets/icons/svg/redis.svg | 0 .../{ => idp}/src/assets/icons/svg/row.svg | 0 .../{ => idp}/src/assets/icons/svg/search.svg | 0 .../{ => idp}/src/assets/icons/svg/select.svg | 0 .../{ => idp}/src/assets/icons/svg/server.svg | 0 .../src/assets/icons/svg/shopping.svg | 0 .../{ => idp}/src/assets/icons/svg/size.svg | 0 .../{ => idp}/src/assets/icons/svg/skill.svg | 0 .../{ => idp}/src/assets/icons/svg/slider.svg | 0 .../{ => idp}/src/assets/icons/svg/star.svg | 0 .../{ => idp}/src/assets/icons/svg/sunny.svg | 0 .../src/assets/icons/svg/swagger.svg | 0 .../{ => idp}/src/assets/icons/svg/switch.svg | 0 .../{ => idp}/src/assets/icons/svg/system.svg | 0 .../{ => idp}/src/assets/icons/svg/tab.svg | 0 .../{ => idp}/src/assets/icons/svg/table.svg | 0 .../src/assets/icons/svg/textarea.svg | 0 .../{ => idp}/src/assets/icons/svg/theme.svg | 0 .../src/assets/icons/svg/time-range.svg | 0 .../{ => idp}/src/assets/icons/svg/time.svg | 0 .../{ => idp}/src/assets/icons/svg/tool.svg | 0 .../src/assets/icons/svg/tree-table.svg | 0 .../{ => idp}/src/assets/icons/svg/tree.svg | 0 .../{ => idp}/src/assets/icons/svg/upload.svg | 0 .../{ => idp}/src/assets/icons/svg/user.svg | 0 .../src/assets/icons/svg/validCode.svg | 0 .../{ => idp}/src/assets/icons/svg/wechat.svg | 0 .../{ => idp}/src/assets/icons/svg/zip.svg | 0 .../{ => idp}/src/assets/images/login.png | Bin .../{ => idp}/src/assets/styles/btn.scss | 0 .../src/assets/styles/element-ui.scss | 0 .../{ => idp}/src/assets/styles/idp.scss | 0 .../{ => idp}/src/assets/styles/index.scss | 0 .../{ => idp}/src/assets/styles/mixin.scss | 0 .../{ => idp}/src/assets/styles/sidebar.scss | 0 .../src/assets/styles/transition.scss | 0 .../src/assets/styles/variables.module.scss | 0 .../{ => idp}/src/components/SvgIcon/index.ts | 0 .../src/components/SvgIcon/index.vue | 0 .../src/components/SvgIcon/svgicon.ts | 0 idp/frontend/{ => idp}/src/main.ts | 0 idp/frontend/{ => idp}/src/router/index.ts | 0 idp/frontend/{ => idp}/src/settings.ts | 0 idp/frontend/{ => idp}/src/stores/auth.ts | 0 idp/frontend/{ => idp}/src/stores/index.ts | 0 idp/frontend/{ => idp}/src/stores/user.ts | 0 .../{ => idp}/src/types/crypto-js.d.ts | 0 idp/frontend/{ => idp}/src/types/index.ts | 0 idp/frontend/{ => idp}/src/utils/auth.ts | 0 idp/frontend/{ => idp}/src/utils/cache.ts | 0 idp/frontend/{ => idp}/src/utils/encryptor.ts | 0 idp/frontend/{ => idp}/src/utils/errorCode.ts | 0 idp/frontend/{ => idp}/src/utils/jsencrypt.ts | 0 idp/frontend/{ => idp}/src/utils/request.ts | 0 idp/frontend/{ => idp}/src/utils/storage.ts | 0 idp/frontend/{ => idp}/src/utils/validate.ts | 0 .../{ => idp}/src/views/LoginPage.vue | 0 .../src/views/login/PasswordLogin.vue | 0 .../{ => idp}/src/views/login/SmsLogin.vue | 0 .../{ => idp}/src/views/login/Sso.vue | 10 +- .../src/views/login/ThirdPartyLogin.vue | 0 idp/frontend/{ => idp}/src/vite-env.d.ts | 0 idp/frontend/{ => idp}/tsconfig.json | 0 idp/frontend/{ => idp}/tsconfig.node.json | 0 idp/frontend/{ => idp}/vite-env.d.ts | 0 idp/frontend/{ => idp}/vite.config.ts | 0 .../{ => idp}/vite/plugins/auto-import.ts | 0 .../{ => idp}/vite/plugins/compression.ts | 0 idp/frontend/{ => idp}/vite/plugins/index.ts | 0 .../{ => idp}/vite/plugins/setup-extend.ts | 0 .../{ => idp}/vite/plugins/svg-icon.ts | 0 pom.xml | 18 + portal/backend/portal/.gitignore | 47 ++ portal/backend/{ => portal}/README.md | 0 portal/backend/{ => portal}/pom.xml | 0 .../backend/{ => portal}/portal-admin/pom.xml | 0 .../org/lingniu/portal/PortalApplication.java | 0 .../portal/PortalServletInitializer.java | 0 .../controller/common/CommonController.java | 0 .../controller/monitor/CacheController.java | 0 .../controller/monitor/ServerController.java | 0 .../monitor/SysLogininforController.java | 0 .../monitor/SysOperlogController.java | 0 .../monitor/SysUserOnlineController.java | 0 .../system/SysConfigController.java | 0 .../controller/system/SysDeptController.java | 0 .../system/SysDictDataController.java | 0 .../system/SysDictTypeController.java | 0 .../controller/system/SysIndexController.java | 0 .../controller/system/SysMenuController.java | 0 .../system/SysNoticeController.java | 0 .../controller/system/SysPostController.java | 0 .../system/SysProfileController.java | 0 .../system/SysRegisterController.java | 0 .../controller/system/SysRoleController.java | 0 .../controller/system/SysUserController.java | 0 .../META-INF/spring-devtools.properties | 0 .../src/main/resources}/application-local.yml | 16 +- .../src/main/resources/application-test.yml | 12 +- .../src/main/resources}/application.yml | 9 +- .../src/main/resources/banner.txt | 0 .../main/resources/i18n/messages.properties | 0 .../src/main/resources}/logback.xml | 2 +- .../main/resources/mybatis/mybatis-config.xml | 0 .../META-INF/spring-devtools.properties | 0 .../target/classes}/application-local.yml | 16 +- .../target/classes/application-test.yml | 12 +- .../target/classes}/application.yml | 7 +- .../portal-admin/target/classes/banner.txt | 0 .../target/classes/i18n/messages.properties | 0 .../portal-admin/target/classes}/logback.xml | 2 +- .../target/classes/mybatis/mybatis-config.xml | 0 .../lingniu/portal/PortalApplication.class | Bin .../portal/PortalServletInitializer.class | Bin .../controller/common/CommonController.class | Bin .../controller/monitor/CacheController.class | Bin .../controller/monitor/ServerController.class | Bin .../monitor/SysLogininforController.class | Bin .../monitor/SysOperlogController.class | Bin .../monitor/SysUserOnlineController.class | Bin .../system/SysConfigController.class | Bin .../controller/system/SysDeptController.class | Bin .../system/SysDictDataController.class | Bin .../system/SysDictTypeController.class | Bin .../system/SysIndexController.class | Bin .../controller/system/SysMenuController.class | Bin .../system/SysNoticeController.class | Bin .../controller/system/SysPostController.class | Bin .../system/SysProfileController.class | Bin .../system/SysRegisterController.class | Bin .../controller/system/SysRoleController.class | Bin .../controller/system/SysUserController.class | Bin .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 0 .../portal-admin/target/portal-admin.jar | Bin 92383245 -> 92383409 bytes .../target/portal-admin.jar.original | Bin 55794 -> 55958 bytes .../{ => portal}/portal-common/pom.xml | 0 .../portal/common/annotation/Anonymous.java | 0 .../portal/common/annotation/DataScope.java | 0 .../portal/common/annotation/DataSource.java | 0 .../portal/common/annotation/Excel.java | 0 .../portal/common/annotation/Excels.java | 0 .../lingniu/portal/common/annotation/Log.java | 0 .../portal/common/annotation/RateLimiter.java | 0 .../common/annotation/RepeatSubmit.java | 0 .../portal/common/annotation/Sensitive.java | 0 .../portal/common/config/ProjectConfig.java | 0 .../serializer/SensitiveJsonSerializer.java | 0 .../common/constant/CacheConstants.java | 0 .../portal/common/constant/Constants.java | 0 .../portal/common/constant/GenConstants.java | 0 .../portal/common/constant/HttpStatus.java | 0 .../common/constant/ScheduleConstants.java | 0 .../portal/common/constant/UserConstants.java | 0 .../core/controller/BaseController.java | 0 .../portal/common/core/domain/AjaxResult.java | 0 .../portal/common/core/domain/BaseEntity.java | 0 .../lingniu/portal/common/core/domain/R.java | 0 .../portal/common/core/domain/TreeEntity.java | 0 .../portal/common/core/domain/TreeSelect.java | 0 .../common/core/domain/entity/SysDept.java | 0 .../core/domain/entity/SysDictData.java | 0 .../core/domain/entity/SysDictType.java | 0 .../common/core/domain/entity/SysMenu.java | 0 .../common/core/domain/entity/SysRole.java | 0 .../common/core/domain/entity/SysUser.java | 0 .../common/core/domain/model/LoginBody.java | 0 .../common/core/domain/model/LoginUser.java | 0 .../core/domain/model/RegisterBody.java | 0 .../portal/common/core/page/PageDomain.java | 0 .../common/core/page/TableDataInfo.java | 0 .../portal/common/core/page/TableSupport.java | 0 .../portal/common/core/redis/RedisCache.java | 0 .../portal/common/core/text/CharsetKit.java | 0 .../portal/common/core/text/Convert.java | 0 .../portal/common/core/text/StrFormatter.java | 0 .../portal/common/enums/BusinessStatus.java | 0 .../portal/common/enums/BusinessType.java | 0 .../portal/common/enums/DataSourceType.java | 0 .../portal/common/enums/DesensitizedType.java | 0 .../portal/common/enums/HttpMethod.java | 0 .../portal/common/enums/LimitType.java | 0 .../portal/common/enums/OperatorType.java | 0 .../portal/common/enums/UserStatus.java | 0 .../common/exception/DemoModeException.java | 0 .../common/exception/GlobalException.java | 0 .../common/exception/ServiceException.java | 0 .../common/exception/UtilException.java | 0 .../common/exception/base/BaseException.java | 0 .../common/exception/file/FileException.java | 0 .../FileNameLengthLimitExceededException.java | 0 .../file/FileSizeLimitExceededException.java | 0 .../exception/file/FileUploadException.java | 0 .../file/InvalidExtensionException.java | 0 .../common/exception/job/TaskException.java | 0 .../exception/user/BlackListException.java | 0 .../exception/user/CaptchaException.java | 0 .../user/CaptchaExpireException.java | 0 .../common/exception/user/UserException.java | 0 .../user/UserNotExistsException.java | 0 .../user/UserPasswordNotMatchException.java | 0 ...UserPasswordRetryLimitExceedException.java | 0 .../filter/PropertyPreExcludeFilter.java | 0 .../portal/common/filter/RefererFilter.java | 0 .../common/filter/RepeatableFilter.java | 0 .../filter/RepeatedlyRequestWrapper.java | 0 .../portal/common/filter/XssFilter.java | 0 .../filter/XssHttpServletRequestWrapper.java | 0 .../lingniu/portal/common/utils/Arith.java | 0 .../portal/common/utils/DateUtils.java | 0 .../portal/common/utils/DesensitizedUtil.java | 0 .../portal/common/utils/DictUtils.java | 0 .../portal/common/utils/ExceptionUtil.java | 0 .../lingniu/portal/common/utils/LogUtils.java | 0 .../portal/common/utils/MessageUtils.java | 0 .../portal/common/utils/PageUtils.java | 0 .../portal/common/utils/SecurityUtils.java | 0 .../portal/common/utils/ServletUtils.java | 0 .../portal/common/utils/StringUtils.java | 0 .../lingniu/portal/common/utils/Threads.java | 0 .../portal/common/utils/bean/BeanUtils.java | 0 .../common/utils/bean/BeanValidators.java | 0 .../common/utils/file/FileTypeUtils.java | 0 .../common/utils/file/FileUploadUtils.java | 0 .../portal/common/utils/file/FileUtils.java | 0 .../portal/common/utils/file/ImageUtils.java | 0 .../common/utils/file/MimeTypeUtils.java | 0 .../portal/common/utils/html/EscapeUtil.java | 0 .../portal/common/utils/html/HTMLFilter.java | 0 .../portal/common/utils/http/HttpHelper.java | 0 .../portal/common/utils/http/HttpUtils.java | 0 .../common/utils/http/UserAgentUtils.java | 0 .../portal/common/utils/ip/AddressUtils.java | 0 .../portal/common/utils/ip/IpUtils.java | 0 .../common/utils/poi/ExcelHandlerAdapter.java | 0 .../portal/common/utils/poi/ExcelUtil.java | 0 .../common/utils/reflect/ReflectUtils.java | 0 .../portal/common/utils/sign/Base64.java | 0 .../portal/common/utils/sign/Md5Utils.java | 0 .../common/utils/spring/SpringUtils.java | 10 +- .../portal/common/utils/sql/SqlUtil.java | 0 .../portal/common/utils/uuid/IdUtils.java | 0 .../lingniu/portal/common/utils/uuid/Seq.java | 0 .../portal/common/utils/uuid/UUID.java | 0 .../org/lingniu/portal/common/xss/Xss.java | 0 .../portal/common/xss/XssValidator.java | 0 .../portal/common/annotation/Anonymous.class | Bin .../portal/common/annotation/DataScope.class | Bin .../portal/common/annotation/DataSource.class | Bin .../common/annotation/Excel$ColumnType.class | Bin .../portal/common/annotation/Excel$Type.class | Bin .../portal/common/annotation/Excel.class | Bin .../portal/common/annotation/Excels.class | Bin .../portal/common/annotation/Log.class | Bin .../common/annotation/RateLimiter.class | Bin .../common/annotation/RepeatSubmit.class | Bin .../portal/common/annotation/Sensitive.class | Bin .../portal/common/config/ProjectConfig.class | Bin .../serializer/SensitiveJsonSerializer.class | Bin .../common/constant/CacheConstants.class | Bin .../portal/common/constant/Constants.class | Bin .../portal/common/constant/GenConstants.class | Bin .../portal/common/constant/HttpStatus.class | Bin .../constant/ScheduleConstants$Status.class | Bin .../common/constant/ScheduleConstants.class | Bin .../common/constant/UserConstants.class | Bin .../core/controller/BaseController$1.class | Bin .../core/controller/BaseController.class | Bin .../common/core/domain/AjaxResult.class | Bin .../common/core/domain/BaseEntity.class | Bin .../lingniu/portal/common/core/domain/R.class | Bin .../common/core/domain/TreeEntity.class | Bin .../common/core/domain/TreeSelect.class | Bin .../common/core/domain/entity/SysDept.class | Bin .../core/domain/entity/SysDictData.class | Bin .../core/domain/entity/SysDictType.class | Bin .../common/core/domain/entity/SysMenu.class | Bin .../common/core/domain/entity/SysRole.class | Bin .../common/core/domain/entity/SysUser.class | Bin .../common/core/domain/model/LoginBody.class | Bin .../common/core/domain/model/LoginUser.class | Bin .../core/domain/model/RegisterBody.class | Bin .../portal/common/core/page/PageDomain.class | Bin .../common/core/page/TableDataInfo.class | Bin .../common/core/page/TableSupport.class | Bin .../portal/common/core/redis/RedisCache.class | Bin .../portal/common/core/text/CharsetKit.class | Bin .../portal/common/core/text/Convert.class | Bin .../common/core/text/StrFormatter.class | Bin .../portal/common/enums/BusinessStatus.class | Bin .../portal/common/enums/BusinessType.class | Bin .../portal/common/enums/DataSourceType.class | Bin .../common/enums/DesensitizedType.class | Bin .../portal/common/enums/HttpMethod.class | Bin .../portal/common/enums/LimitType.class | Bin .../portal/common/enums/OperatorType.class | Bin .../portal/common/enums/UserStatus.class | Bin .../common/exception/DemoModeException.class | Bin .../common/exception/GlobalException.class | Bin .../common/exception/ServiceException.class | Bin .../common/exception/UtilException.class | Bin .../common/exception/base/BaseException.class | Bin .../common/exception/file/FileException.class | Bin ...FileNameLengthLimitExceededException.class | Bin .../file/FileSizeLimitExceededException.class | Bin .../exception/file/FileUploadException.class | Bin ...ption$InvalidFlashExtensionException.class | Bin ...ption$InvalidImageExtensionException.class | Bin ...ption$InvalidMediaExtensionException.class | Bin ...ption$InvalidVideoExtensionException.class | Bin .../file/InvalidExtensionException.class | Bin .../exception/job/TaskException$Code.class | Bin .../common/exception/job/TaskException.class | Bin .../exception/user/BlackListException.class | Bin .../exception/user/CaptchaException.class | Bin .../user/CaptchaExpireException.class | Bin .../common/exception/user/UserException.class | Bin .../user/UserNotExistsException.class | Bin .../user/UserPasswordNotMatchException.class | Bin ...serPasswordRetryLimitExceedException.class | Bin .../filter/PropertyPreExcludeFilter.class | Bin .../portal/common/filter/RefererFilter.class | Bin .../common/filter/RepeatableFilter.class | Bin .../filter/RepeatedlyRequestWrapper$1.class | Bin .../filter/RepeatedlyRequestWrapper.class | Bin .../portal/common/filter/XssFilter.class | Bin .../XssHttpServletRequestWrapper$1.class | Bin .../filter/XssHttpServletRequestWrapper.class | Bin .../lingniu/portal/common/utils/Arith.class | Bin .../portal/common/utils/DateUtils.class | Bin .../common/utils/DesensitizedUtil.class | Bin .../portal/common/utils/DictUtils.class | Bin .../portal/common/utils/ExceptionUtil.class | Bin .../portal/common/utils/LogUtils.class | Bin .../portal/common/utils/MessageUtils.class | Bin .../portal/common/utils/PageUtils.class | Bin .../portal/common/utils/SecurityUtils.class | Bin .../portal/common/utils/ServletUtils.class | Bin .../portal/common/utils/StringUtils.class | Bin .../lingniu/portal/common/utils/Threads.class | Bin .../portal/common/utils/bean/BeanUtils.class | Bin .../common/utils/bean/BeanValidators.class | Bin .../common/utils/file/FileTypeUtils.class | Bin .../common/utils/file/FileUploadUtils.class | Bin .../portal/common/utils/file/FileUtils.class | Bin .../portal/common/utils/file/ImageUtils.class | Bin .../common/utils/file/MimeTypeUtils.class | Bin .../portal/common/utils/html/EscapeUtil.class | Bin .../portal/common/utils/html/HTMLFilter.class | Bin .../portal/common/utils/http/HttpHelper.class | Bin .../HttpUtils$TrustAnyHostnameVerifier.class | Bin .../http/HttpUtils$TrustAnyTrustManager.class | Bin .../portal/common/utils/http/HttpUtils.class | Bin .../common/utils/http/UserAgentUtils.class | Bin .../portal/common/utils/ip/AddressUtils.class | Bin .../portal/common/utils/ip/IpUtils.class | Bin .../utils/poi/ExcelHandlerAdapter.class | Bin .../portal/common/utils/poi/ExcelUtil.class | Bin .../common/utils/reflect/ReflectUtils.class | Bin .../portal/common/utils/sign/Base64.class | Bin .../portal/common/utils/sign/Md5Utils.class | Bin .../common/utils/spring/SpringUtils.class | Bin .../portal/common/utils/sql/SqlUtil.class | Bin .../portal/common/utils/uuid/IdUtils.class | Bin .../portal/common/utils/uuid/Seq.class | Bin .../common/utils/uuid/UUID$Holder.class | Bin .../portal/common/utils/uuid/UUID.class | Bin .../org/lingniu/portal/common/xss/Xss.class | Bin .../portal/common/xss/XssValidator.class | Bin .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 0 .../target/portal-common-1.0.0.jar | Bin 207767 -> 207767 bytes .../{ => portal}/portal-framework/pom.xml | 0 .../framework/aspectj/DataScopeAspect.java | 0 .../framework/aspectj/DataSourceAspect.java | 0 .../portal/framework/aspectj/LogAspect.java | 0 .../framework/aspectj/RateLimiterAspect.java | 0 .../framework/config/ApplicationConfig.java | 0 .../framework/config/CaptchaConfig.java | 0 .../portal/framework/config/DruidConfig.java | 0 .../config/FastJson2JsonRedisSerializer.java | 0 .../portal/framework/config/FilterConfig.java | 0 .../portal/framework/config/I18nConfig.java | 0 .../framework/config/KaptchaTextCreator.java | 0 .../framework/config/MyBatisConfig.java | 0 .../portal/framework/config/RedisConfig.java | 0 .../framework/config/ResourcesConfig.java | 0 .../framework/config/SecurityConfig.java | 2 +- .../portal/framework/config/ServerConfig.java | 0 .../framework/config/ThreadPoolConfig.java | 0 .../config/properties/DruidProperties.java | 0 .../properties/PermitAllUrlProperties.java | 0 .../datasource/DynamicDataSource.java | 0 .../DynamicDataSourceContextHolder.java | 0 .../interceptor/RepeatSubmitInterceptor.java | 0 .../impl/SameUrlDataInterceptor.java | 0 .../framework/manager/AsyncManager.java | 0 .../framework/manager/ShutdownManager.java | 0 .../manager/factory/AsyncFactory.java | 0 .../context/AuthenticationContextHolder.java | 0 .../context/PermissionContextHolder.java | 0 .../portal/framework/web/domain/Server.java | 0 .../framework/web/domain/server/Cpu.java | 0 .../framework/web/domain/server/Jvm.java | 0 .../framework/web/domain/server/Mem.java | 0 .../framework/web/domain/server/Sys.java | 0 .../framework/web/domain/server/SysFile.java | 0 .../web/exception/GlobalExceptionHandler.java | 0 .../web/service/SysPasswordService.java | 0 .../web/service/SysPermissionService.java | 0 .../web/service/SysRegisterService.java | 0 .../web/service/UserDetailsServiceImpl.java | 0 .../framework/aspectj/DataScopeAspect.class | Bin .../framework/aspectj/DataSourceAspect.class | Bin .../portal/framework/aspectj/LogAspect.class | Bin .../framework/aspectj/RateLimiterAspect.class | Bin .../framework/config/ApplicationConfig.class | Bin .../framework/config/CaptchaConfig.class | Bin .../framework/config/DruidConfig$1.class | Bin .../portal/framework/config/DruidConfig.class | Bin .../config/FastJson2JsonRedisSerializer.class | Bin .../framework/config/FilterConfig.class | Bin .../portal/framework/config/I18nConfig.class | Bin .../framework/config/KaptchaTextCreator.class | Bin .../framework/config/MyBatisConfig.class | Bin .../portal/framework/config/RedisConfig.class | Bin .../framework/config/ResourcesConfig.class | Bin .../framework/config/ServerConfig.class | Bin .../framework/config/ThreadPoolConfig$1.class | Bin .../framework/config/ThreadPoolConfig.class | Bin .../config/properties/DruidProperties.class | Bin .../properties/PermitAllUrlProperties.class | Bin .../datasource/DynamicDataSource.class | Bin .../DynamicDataSourceContextHolder.class | Bin .../interceptor/RepeatSubmitInterceptor.class | Bin .../impl/SameUrlDataInterceptor.class | Bin .../framework/manager/AsyncManager.class | Bin .../framework/manager/ShutdownManager.class | Bin .../manager/factory/AsyncFactory$1.class | Bin .../manager/factory/AsyncFactory$2.class | Bin .../manager/factory/AsyncFactory.class | Bin .../context/AuthenticationContextHolder.class | Bin .../context/PermissionContextHolder.class | Bin .../portal/framework/web/domain/Server.class | Bin .../framework/web/domain/server/Cpu.class | Bin .../framework/web/domain/server/Jvm.class | Bin .../framework/web/domain/server/Mem.class | Bin .../framework/web/domain/server/Sys.class | Bin .../framework/web/domain/server/SysFile.class | Bin .../exception/GlobalExceptionHandler.class | Bin .../web/service/SysPasswordService.class | Bin .../web/service/SysPermissionService.class | Bin .../web/service/SysRegisterService.class | Bin .../web/service/UserDetailsServiceImpl.class | Bin .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 0 .../target/portal-framework-1.0.0.jar | Bin 72639 -> 72638 bytes .../{ => portal}/portal-system/pom.xml | 0 .../portal/system/domain/SysCache.java | 0 .../portal/system/domain/SysConfig.java | 0 .../portal/system/domain/SysLogininfor.java | 0 .../portal/system/domain/SysNotice.java | 0 .../portal/system/domain/SysOperLog.java | 0 .../lingniu/portal/system/domain/SysPost.java | 0 .../portal/system/domain/SysRoleDept.java | 0 .../portal/system/domain/SysRoleMenu.java | 0 .../portal/system/domain/SysUserOnline.java | 0 .../portal/system/domain/SysUserPost.java | 0 .../portal/system/domain/SysUserRole.java | 0 .../portal/system/domain/vo/MetaVo.java | 0 .../portal/system/domain/vo/RouterVo.java | 0 .../portal/system/mapper/SysConfigMapper.java | 0 .../portal/system/mapper/SysDeptMapper.java | 0 .../system/mapper/SysDictDataMapper.java | 0 .../system/mapper/SysDictTypeMapper.java | 0 .../system/mapper/SysLogininforMapper.java | 0 .../portal/system/mapper/SysMenuMapper.java | 0 .../portal/system/mapper/SysNoticeMapper.java | 0 .../system/mapper/SysOperLogMapper.java | 0 .../portal/system/mapper/SysPostMapper.java | 0 .../system/mapper/SysRoleDeptMapper.java | 0 .../portal/system/mapper/SysRoleMapper.java | 0 .../system/mapper/SysRoleMenuMapper.java | 0 .../portal/system/mapper/SysUserMapper.java | 0 .../system/mapper/SysUserPostMapper.java | 0 .../system/mapper/SysUserRoleMapper.java | 0 .../system/service/ISysConfigService.java | 0 .../system/service/ISysDeptService.java | 0 .../system/service/ISysDictDataService.java | 0 .../system/service/ISysDictTypeService.java | 0 .../system/service/ISysLogininforService.java | 0 .../system/service/ISysMenuService.java | 0 .../system/service/ISysNoticeService.java | 0 .../system/service/ISysOperLogService.java | 0 .../system/service/ISysPostService.java | 0 .../system/service/ISysRoleService.java | 0 .../system/service/ISysUserOnlineService.java | 0 .../system/service/ISysUserService.java | 0 .../service/impl/SysConfigServiceImpl.java | 0 .../service/impl/SysDeptServiceImpl.java | 0 .../service/impl/SysDictDataServiceImpl.java | 0 .../service/impl/SysDictTypeServiceImpl.java | 0 .../impl/SysLogininforServiceImpl.java | 0 .../service/impl/SysMenuServiceImpl.java | 0 .../service/impl/SysNoticeServiceImpl.java | 0 .../service/impl/SysOperLogServiceImpl.java | 0 .../service/impl/SysPostServiceImpl.java | 0 .../service/impl/SysRoleServiceImpl.java | 0 .../impl/SysUserOnlineServiceImpl.java | 0 .../service/impl/SysUserServiceImpl.java | 0 .../mapper/system/SysConfigMapper.xml | 0 .../resources/mapper/system/SysDeptMapper.xml | 0 .../mapper/system/SysDictDataMapper.xml | 0 .../mapper/system/SysDictTypeMapper.xml | 0 .../mapper/system/SysLogininforMapper.xml | 0 .../resources/mapper/system/SysMenuMapper.xml | 0 .../mapper/system/SysNoticeMapper.xml | 0 .../mapper/system/SysOperLogMapper.xml | 0 .../resources/mapper/system/SysPostMapper.xml | 0 .../mapper/system/SysRoleDeptMapper.xml | 0 .../resources/mapper/system/SysRoleMapper.xml | 0 .../mapper/system/SysRoleMenuMapper.xml | 0 .../resources/mapper/system/SysUserMapper.xml | 0 .../mapper/system/SysUserPostMapper.xml | 0 .../mapper/system/SysUserRoleMapper.xml | 0 .../classes/mapper/system/SysConfigMapper.xml | 0 .../classes/mapper/system/SysDeptMapper.xml | 0 .../mapper/system/SysDictDataMapper.xml | 0 .../mapper/system/SysDictTypeMapper.xml | 0 .../mapper/system/SysLogininforMapper.xml | 0 .../classes/mapper/system/SysMenuMapper.xml | 0 .../classes/mapper/system/SysNoticeMapper.xml | 0 .../mapper/system/SysOperLogMapper.xml | 0 .../classes/mapper/system/SysPostMapper.xml | 0 .../mapper/system/SysRoleDeptMapper.xml | 0 .../classes/mapper/system/SysRoleMapper.xml | 0 .../mapper/system/SysRoleMenuMapper.xml | 0 .../classes/mapper/system/SysUserMapper.xml | 0 .../mapper/system/SysUserPostMapper.xml | 0 .../mapper/system/SysUserRoleMapper.xml | 0 .../portal/system/domain/SysCache.class | Bin .../portal/system/domain/SysConfig.class | Bin .../portal/system/domain/SysLogininfor.class | Bin .../portal/system/domain/SysNotice.class | Bin .../portal/system/domain/SysOperLog.class | Bin .../portal/system/domain/SysPost.class | Bin .../portal/system/domain/SysRoleDept.class | Bin .../portal/system/domain/SysRoleMenu.class | Bin .../portal/system/domain/SysUserOnline.class | Bin .../portal/system/domain/SysUserPost.class | Bin .../portal/system/domain/SysUserRole.class | Bin .../portal/system/domain/vo/MetaVo.class | Bin .../portal/system/domain/vo/RouterVo.class | Bin .../system/mapper/SysConfigMapper.class | Bin .../portal/system/mapper/SysDeptMapper.class | Bin .../system/mapper/SysDictDataMapper.class | Bin .../system/mapper/SysDictTypeMapper.class | Bin .../system/mapper/SysLogininforMapper.class | Bin .../portal/system/mapper/SysMenuMapper.class | Bin .../system/mapper/SysNoticeMapper.class | Bin .../system/mapper/SysOperLogMapper.class | Bin .../portal/system/mapper/SysPostMapper.class | Bin .../system/mapper/SysRoleDeptMapper.class | Bin .../portal/system/mapper/SysRoleMapper.class | Bin .../system/mapper/SysRoleMenuMapper.class | Bin .../portal/system/mapper/SysUserMapper.class | Bin .../system/mapper/SysUserPostMapper.class | Bin .../system/mapper/SysUserRoleMapper.class | Bin .../system/service/ISysConfigService.class | Bin .../system/service/ISysDeptService.class | Bin .../system/service/ISysDictDataService.class | Bin .../system/service/ISysDictTypeService.class | Bin .../service/ISysLogininforService.class | Bin .../system/service/ISysMenuService.class | Bin .../system/service/ISysNoticeService.class | Bin .../system/service/ISysOperLogService.class | Bin .../system/service/ISysPostService.class | Bin .../system/service/ISysRoleService.class | Bin .../service/ISysUserOnlineService.class | Bin .../system/service/ISysUserService.class | Bin .../service/impl/SysConfigServiceImpl.class | Bin .../service/impl/SysDeptServiceImpl.class | Bin .../service/impl/SysDictDataServiceImpl.class | Bin .../service/impl/SysDictTypeServiceImpl.class | Bin .../impl/SysLogininforServiceImpl.class | Bin .../service/impl/SysMenuServiceImpl.class | Bin .../service/impl/SysNoticeServiceImpl.class | Bin .../service/impl/SysOperLogServiceImpl.class | Bin .../service/impl/SysPostServiceImpl.class | Bin .../service/impl/SysRoleServiceImpl.class | Bin .../impl/SysUserOnlineServiceImpl.class | Bin .../service/impl/SysUserServiceImpl.class | Bin .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 0 .../target/portal-system-1.0.0.jar | Bin 89611 -> 89612 bytes portal/frontend/portal/.env.development | 15 +- portal/frontend/portal/README.md | 25 - portal/frontend/portal/src/permission.ts | 21 +- portal/frontend/portal/src/router/index.ts | 2 +- portal/frontend/portal/vite.config.ts | 14 +- sdk/backend/oauth2-login-sdk/.gitignore | 60 ++ sdk/backend/oauth2-login-sdk/pom.xml | 2 +- .../sdk/model/token/AccessTokenInfo.java | 2 +- sdk/frontend/oauth2-login-sdk/README.md | 70 -- .../oauth2-login-sdk/src/core/http.ts | 370 ---------- .../oauth2-login-sdk/src/core/token.ts | 45 -- .../oauth2-login-sdk/src/guards/router.ts | 130 ---- sdk/frontend/oauth2-login-sdk/src/index.ts | 94 --- sdk/frontend/unified-login-sdk/.gitignore | 60 ++ sdk/frontend/unified-login-sdk/README.md | 119 ++++ .../dist/core/auth.d.ts | 0 .../dist/core/auth.d.ts.map | 0 .../dist/core/auth.js | 0 .../dist/core/auth.js.map | 0 .../dist/core/http.d.ts | 0 .../dist/core/http.d.ts.map | 0 .../dist/core/http.js | 0 .../dist/core/http.js.map | 0 .../dist/core/token.d.ts | 0 .../dist/core/token.d.ts.map | 0 .../dist/core/token.js | 0 .../dist/core/token.js.map | 0 .../dist/guards/router.d.ts | 0 .../dist/guards/router.d.ts.map | 0 .../dist/guards/router.js | 0 .../dist/guards/router.js.map | 0 .../dist/index.d.ts | 0 .../dist/index.d.ts.map | 0 .../dist/index.esm.js | 0 .../dist/index.esm.js.map | 0 .../dist/index.js | 0 .../dist/index.js.map | 0 .../dist/plugins/vue.d.ts | 0 .../dist/plugins/vue.d.ts.map | 0 .../dist/plugins/vue.js | 0 .../dist/plugins/vue.js.map | 0 .../dist/types/config.d.ts | 0 .../dist/types/config.d.ts.map | 0 .../dist/types/config.js | 0 .../dist/types/config.js.map | 0 .../dist/types/index.d.ts | 0 .../dist/types/index.d.ts.map | 0 .../dist/types/index.js | 0 .../dist/types/index.js.map | 0 .../dist/types/user.d.ts | 0 .../dist/types/user.d.ts.map | 0 .../dist/types/user.js | 0 .../dist/types/user.js.map | 0 .../dist/utils/storage.d.ts | 0 .../dist/utils/storage.d.ts.map | 0 .../dist/utils/storage.js | 0 .../dist/utils/storage.js.map | 0 .../dist/utils/url.d.ts | 0 .../dist/utils/url.d.ts.map | 0 .../dist/utils/url.js | 0 .../dist/utils/url.js.map | 0 .../package.json | 2 +- .../pnpm-lock.yaml | 0 .../rollup.config.js | 0 .../src/core/auth.ts | 120 +++- .../src/core/http.examples.ts | 287 ++++++++ .../unified-login-sdk/src/core/http.test.ts | 136 ++++ .../unified-login-sdk/src/core/http.ts | 655 ++++++++++++++++++ .../unified-login-sdk/src/core/token.ts | 92 +++ .../src/guards/router.examples.ts | 281 ++++++++ .../src/guards/router.test.ts | 358 ++++++++++ .../unified-login-sdk/src/guards/router.ts | 311 +++++++++ sdk/frontend/unified-login-sdk/src/index.ts | 108 +++ .../unified-login-sdk/src/plugins/vue.test.ts | 260 +++++++ .../src/plugins/vue.ts | 74 +- .../src/types/config.ts | 18 - .../src/types/index.ts | 8 +- .../src/types/user.ts | 0 .../src/utils/storage.ts | 0 .../src/utils/url.ts | 0 .../tsconfig.json | 0 812 files changed, 5138 insertions(+), 1979 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/lingniu-platform.iml delete mode 100644 .idea/modules.xml rename demo/backend/{ => demo}/.gitattributes (100%) rename demo/backend/{ => demo}/.gitignore (100%) rename demo/backend/{ => demo}/pom.xml (100%) rename demo/backend/{src/main/java/com => demo/src/main/java/org/lingniu}/example/demo/DemoApplication.java (90%) rename demo/backend/{src/main/java/com/example/demo/Controller/UserController.java => demo/src/main/java/org/lingniu/example/demo/controller/DemoController.java} (63%) rename demo/backend/{src/main/java/com => demo/src/main/java/org/lingniu}/example/demo/test.http (98%) create mode 100644 demo/backend/demo/src/main/java/org/lingniu/example/demo/test2.http rename demo/backend/{src/main/resources/application.yml => demo/src/main/resources/application-dev.yml} (100%) create mode 100644 demo/backend/demo/src/main/resources/application-test.yml create mode 100644 demo/backend/demo/src/main/resources/application.yml rename demo/backend/{src/test/java/com => demo/src/test/java/org/lingniu}/example/demo/DemoApplicationTests.java (84%) delete mode 100644 demo/backend/mvnw delete mode 100644 demo/backend/mvnw.cmd delete mode 100644 demo/frontend/README.md create mode 100644 demo/frontend/demo/demo-sdk/.env.development create mode 100644 demo/frontend/demo/demo-sdk/.env.production rename demo/frontend/{ => demo/demo-sdk}/.gitignore (100%) create mode 100644 demo/frontend/demo/demo-sdk/README.md rename demo/frontend/{ => demo/demo-sdk}/index.html (100%) rename demo/frontend/{ => demo/demo-sdk}/package.json (91%) rename demo/frontend/{ => demo/demo-sdk}/pnpm-lock.yaml (97%) rename demo/frontend/{ => demo/demo-sdk}/pnpm-workspace.yaml (100%) rename demo/frontend/{ => demo/demo-sdk}/public/vite.svg (100%) create mode 100644 demo/frontend/demo/demo-sdk/src/App.vue rename demo/frontend/{ => demo/demo-sdk}/src/assets/vue.svg (100%) create mode 100644 demo/frontend/demo/demo-sdk/src/components/EChartsReport.vue create mode 100644 demo/frontend/demo/demo-sdk/src/main.ts create mode 100644 demo/frontend/demo/demo-sdk/src/router/index.ts rename demo/frontend/{ => demo/demo-sdk}/src/style.css (100%) create mode 100644 demo/frontend/demo/demo-sdk/src/views/Callback.vue create mode 100644 demo/frontend/demo/demo-sdk/src/views/Dashboard.vue create mode 100644 demo/frontend/demo/demo-sdk/src/views/Profile.vue rename demo/frontend/{ => demo/demo-sdk}/tsconfig.app.json (100%) rename demo/frontend/{ => demo/demo-sdk}/tsconfig.json (100%) rename demo/frontend/{ => demo/demo-sdk}/tsconfig.node.json (100%) rename demo/frontend/{ => demo/demo-sdk}/vite.config.ts (90%) delete mode 100644 demo/frontend/src/App.vue delete mode 100644 demo/frontend/src/components/Home.vue delete mode 100644 demo/frontend/src/main.ts delete mode 100644 demo/frontend/src/router/index.ts delete mode 100644 idp/backend/idp-starter/.gitattributes delete mode 100644 idp/backend/idp-starter/mvnw delete mode 100644 idp/backend/idp-starter/mvnw.cmd rename idp/backend/idp-starter/src/main/resources/{application-local.yml => application-dev.yml} (99%) rename idp/frontend/{ => idp}/.env.development (71%) rename idp/frontend/{ => idp}/.env.production (100%) rename idp/frontend/{ => idp}/.env.staging (100%) rename idp/frontend/{ => idp}/README.md (100%) rename idp/frontend/{ => idp}/crypto-js.d.ts (100%) rename idp/frontend/{ => idp}/index.html (100%) rename idp/frontend/{ => idp}/package.json (100%) rename idp/frontend/{ => idp}/pnpm-lock.yaml (100%) rename idp/frontend/{ => idp}/src/App.vue (100%) rename idp/frontend/{ => idp}/src/api/login.ts (100%) rename idp/frontend/{ => idp}/src/assets/401_images/401.gif (100%) rename idp/frontend/{ => idp}/src/assets/404_images/404.png (100%) rename idp/frontend/{ => idp}/src/assets/404_images/404_cloud.png (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/404.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/bug.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/build.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/button.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/cascader.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/chart.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/checkbox.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/clipboard.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/code.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/color.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/component.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/dashboard.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/date-range.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/date.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/dict.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/documentation.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/download.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/drag.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/druid.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/edit.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/education.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/email.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/enter.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/example.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/excel.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/exit-fullscreen.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/eye-open.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/eye.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/form.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/fullscreen.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/github.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/guide.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/icon.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/input.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/international.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/job.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/language.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/link.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/list.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/lock.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/log.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/logininfor.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/message.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/money.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/monitor.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/moon.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/more-up.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/nested.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/number.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/online.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/password.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/pdf.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/people.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/peoples.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/phone.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/post.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/qq.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/question.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/radio.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/rate.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/redis-list.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/redis.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/row.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/search.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/select.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/server.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/shopping.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/size.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/skill.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/slider.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/star.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/sunny.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/swagger.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/switch.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/system.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/tab.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/table.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/textarea.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/theme.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/time-range.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/time.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/tool.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/tree-table.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/tree.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/upload.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/user.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/validCode.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/wechat.svg (100%) rename idp/frontend/{ => idp}/src/assets/icons/svg/zip.svg (100%) rename idp/frontend/{ => idp}/src/assets/images/login.png (100%) rename idp/frontend/{ => idp}/src/assets/styles/btn.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/element-ui.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/idp.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/index.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/mixin.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/sidebar.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/transition.scss (100%) rename idp/frontend/{ => idp}/src/assets/styles/variables.module.scss (100%) rename idp/frontend/{ => idp}/src/components/SvgIcon/index.ts (100%) rename idp/frontend/{ => idp}/src/components/SvgIcon/index.vue (100%) rename idp/frontend/{ => idp}/src/components/SvgIcon/svgicon.ts (100%) rename idp/frontend/{ => idp}/src/main.ts (100%) rename idp/frontend/{ => idp}/src/router/index.ts (100%) rename idp/frontend/{ => idp}/src/settings.ts (100%) rename idp/frontend/{ => idp}/src/stores/auth.ts (100%) rename idp/frontend/{ => idp}/src/stores/index.ts (100%) rename idp/frontend/{ => idp}/src/stores/user.ts (100%) rename idp/frontend/{ => idp}/src/types/crypto-js.d.ts (100%) rename idp/frontend/{ => idp}/src/types/index.ts (100%) rename idp/frontend/{ => idp}/src/utils/auth.ts (100%) rename idp/frontend/{ => idp}/src/utils/cache.ts (100%) rename idp/frontend/{ => idp}/src/utils/encryptor.ts (100%) rename idp/frontend/{ => idp}/src/utils/errorCode.ts (100%) rename idp/frontend/{ => idp}/src/utils/jsencrypt.ts (100%) rename idp/frontend/{ => idp}/src/utils/request.ts (100%) rename idp/frontend/{ => idp}/src/utils/storage.ts (100%) rename idp/frontend/{ => idp}/src/utils/validate.ts (100%) rename idp/frontend/{ => idp}/src/views/LoginPage.vue (100%) rename idp/frontend/{ => idp}/src/views/login/PasswordLogin.vue (100%) rename idp/frontend/{ => idp}/src/views/login/SmsLogin.vue (100%) rename idp/frontend/{ => idp}/src/views/login/Sso.vue (90%) rename idp/frontend/{ => idp}/src/views/login/ThirdPartyLogin.vue (100%) rename idp/frontend/{ => idp}/src/vite-env.d.ts (100%) rename idp/frontend/{ => idp}/tsconfig.json (100%) rename idp/frontend/{ => idp}/tsconfig.node.json (100%) rename idp/frontend/{ => idp}/vite-env.d.ts (100%) rename idp/frontend/{ => idp}/vite.config.ts (100%) rename idp/frontend/{ => idp}/vite/plugins/auto-import.ts (100%) rename idp/frontend/{ => idp}/vite/plugins/compression.ts (100%) rename idp/frontend/{ => idp}/vite/plugins/index.ts (100%) rename idp/frontend/{ => idp}/vite/plugins/setup-extend.ts (100%) rename idp/frontend/{ => idp}/vite/plugins/svg-icon.ts (100%) create mode 100644 pom.xml create mode 100644 portal/backend/portal/.gitignore rename portal/backend/{ => portal}/README.md (100%) rename portal/backend/{ => portal}/pom.xml (100%) rename portal/backend/{ => portal}/portal-admin/pom.xml (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java (100%) rename portal/backend/{ => portal}/portal-admin/src/main/resources/META-INF/spring-devtools.properties (100%) rename portal/backend/{portal-admin/target/classes => portal/portal-admin/src/main/resources}/application-local.yml (79%) rename portal/backend/{ => portal}/portal-admin/src/main/resources/application-test.yml (84%) rename portal/backend/{portal-admin/target/classes => portal/portal-admin/src/main/resources}/application.yml (95%) rename portal/backend/{ => portal}/portal-admin/src/main/resources/banner.txt (100%) rename portal/backend/{ => portal}/portal-admin/src/main/resources/i18n/messages.properties (100%) rename portal/backend/{portal-admin/target/classes => portal/portal-admin/src/main/resources}/logback.xml (99%) rename portal/backend/{ => portal}/portal-admin/src/main/resources/mybatis/mybatis-config.xml (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/META-INF/spring-devtools.properties (100%) rename portal/backend/{portal-admin/src/main/resources => portal/portal-admin/target/classes}/application-local.yml (79%) rename portal/backend/{ => portal}/portal-admin/target/classes/application-test.yml (84%) rename portal/backend/{portal-admin/src/main/resources => portal/portal-admin/target/classes}/application.yml (96%) rename portal/backend/{ => portal}/portal-admin/target/classes/banner.txt (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/i18n/messages.properties (100%) rename portal/backend/{portal-admin/src/main/resources => portal/portal-admin/target/classes}/logback.xml (99%) rename portal/backend/{ => portal}/portal-admin/target/classes/mybatis/mybatis-config.xml (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class (100%) rename portal/backend/{ => portal}/portal-admin/target/maven-archiver/pom.properties (72%) rename portal/backend/{ => portal}/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst (100%) rename portal/backend/{ => portal}/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (100%) rename portal/backend/{ => portal}/portal-admin/target/portal-admin.jar (99%) rename portal/backend/{ => portal}/portal-admin/target/portal-admin.jar.original (80%) rename portal/backend/{ => portal}/portal-common/pom.xml (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/Anonymous.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataScope.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataSource.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excel.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excels.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/Log.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/RateLimiter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/RepeatSubmit.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/annotation/Sensitive.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/config/ProjectConfig.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/CacheConstants.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/Constants.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/GenConstants.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/HttpStatus.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/ScheduleConstants.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/constant/UserConstants.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/controller/BaseController.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/AjaxResult.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/BaseEntity.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/R.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeEntity.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeSelect.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDept.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictData.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysMenu.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysRole.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysUser.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginBody.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginUser.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/RegisterBody.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/page/PageDomain.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableDataInfo.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableSupport.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/redis/RedisCache.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/text/CharsetKit.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/text/Convert.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/core/text/StrFormatter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessStatus.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/DataSourceType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/DesensitizedType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/HttpMethod.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/LimitType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/OperatorType.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/enums/UserStatus.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/DemoModeException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/GlobalException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/ServiceException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/UtilException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/base/BaseException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileUploadException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/file/InvalidExtensionException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/job/TaskException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/BlackListException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaExpireException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserNotExistsException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/RefererFilter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatableFilter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/XssFilter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/Arith.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/DateUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/DesensitizedUtil.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/DictUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/ExceptionUtil.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/LogUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/MessageUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/PageUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/SecurityUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/ServletUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/StringUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/Threads.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanValidators.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileTypeUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUploadUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/file/ImageUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/file/MimeTypeUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/html/EscapeUtil.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/html/HTMLFilter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpHelper.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/http/UserAgentUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/AddressUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/IpUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelUtil.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/reflect/ReflectUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Base64.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Md5Utils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java (92%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/sql/SqlUtil.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/IdUtils.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/Seq.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/UUID.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/xss/Xss.java (100%) rename portal/backend/{ => portal}/portal-common/src/main/java/org/lingniu/portal/common/xss/XssValidator.java (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Anonymous.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/DataScope.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/DataSource.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$ColumnType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$Type.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Excels.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Log.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/RateLimiter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/RepeatSubmit.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/annotation/Sensitive.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/config/ProjectConfig.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/CacheConstants.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/Constants.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/GenConstants.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/HttpStatus.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants$Status.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/constant/UserConstants.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController$1.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/AjaxResult.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/BaseEntity.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/R.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeEntity.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeSelect.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDept.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictData.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysMenu.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysRole.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysUser.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginBody.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginUser.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/RegisterBody.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/page/PageDomain.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/page/TableDataInfo.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/page/TableSupport.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/redis/RedisCache.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/text/CharsetKit.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/text/Convert.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/core/text/StrFormatter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessStatus.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/DataSourceType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/DesensitizedType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/HttpMethod.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/LimitType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/OperatorType.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/enums/UserStatus.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/DemoModeException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/GlobalException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/ServiceException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/UtilException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/base/BaseException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileUploadException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException$Code.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/BlackListException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaExpireException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserNotExistsException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/RefererFilter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatableFilter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper$1.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/XssFilter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper$1.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/Arith.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/DateUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/DesensitizedUtil.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/DictUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/ExceptionUtil.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/LogUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/MessageUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/PageUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/SecurityUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/ServletUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/StringUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/Threads.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanValidators.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileTypeUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUploadUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/file/ImageUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/file/MimeTypeUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/html/EscapeUtil.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/html/HTMLFilter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpHelper.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyTrustManager.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/http/UserAgentUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/ip/AddressUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/ip/IpUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelUtil.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/reflect/ReflectUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Base64.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Md5Utils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/spring/SpringUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/sql/SqlUtil.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/IdUtils.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/Seq.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID$Holder.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/xss/Xss.class (100%) rename portal/backend/{ => portal}/portal-common/target/classes/org/lingniu/portal/common/xss/XssValidator.class (100%) rename portal/backend/{ => portal}/portal-common/target/maven-archiver/pom.properties (72%) rename portal/backend/{ => portal}/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst (100%) rename portal/backend/{ => portal}/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (100%) rename portal/backend/{ => portal}/portal-common/target/portal-common-1.0.0.jar (90%) rename portal/backend/{ => portal}/portal-framework/pom.xml (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataScopeAspect.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataSourceAspect.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/LogAspect.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/RateLimiterAspect.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/ApplicationConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/CaptchaConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/DruidConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/FilterConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/I18nConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/KaptchaTextCreator.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/MyBatisConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/RedisConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/ResourcesConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java (98%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/ServerConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/ThreadPoolConfig.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/DruidProperties.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSource.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/manager/AsyncManager.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/manager/ShutdownManager.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/manager/factory/AsyncFactory.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/PermissionContextHolder.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/Server.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Cpu.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Jvm.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Mem.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Sys.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/SysFile.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPasswordService.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPermissionService.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysRegisterService.java (100%) rename portal/backend/{ => portal}/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataScopeAspect.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataSourceAspect.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/LogAspect.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/RateLimiterAspect.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/ApplicationConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/CaptchaConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig$1.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/FilterConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/I18nConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/KaptchaTextCreator.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/MyBatisConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/RedisConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/ResourcesConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/ServerConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig$1.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/DruidProperties.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSource.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/manager/AsyncManager.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/manager/ShutdownManager.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$1.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$2.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/security/context/PermissionContextHolder.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/Server.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Cpu.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Jvm.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Mem.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Sys.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/SysFile.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPasswordService.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPermissionService.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysRegisterService.class (100%) rename portal/backend/{ => portal}/portal-framework/target/classes/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-framework/target/maven-archiver/pom.properties (73%) rename portal/backend/{ => portal}/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst (100%) rename portal/backend/{ => portal}/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (100%) rename portal/backend/{ => portal}/portal-framework/target/portal-framework-1.0.0.jar (89%) rename portal/backend/{ => portal}/portal-system/pom.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysCache.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysConfig.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysLogininfor.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysNotice.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysOperLog.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysPost.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleDept.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleMenu.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserOnline.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserPost.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserRole.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/MetaVo.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/RouterVo.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysConfigMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDeptMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictDataMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictTypeMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysLogininforMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysMenuMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysNoticeMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysOperLogMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysPostMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleDeptMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMenuMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserPostMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserRoleMapper.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysConfigService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDeptService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictDataService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictTypeService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysLogininforService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysMenuService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysNoticeService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysOperLogService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysPostService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysRoleService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserOnlineService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserService.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysPostServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserServiceImpl.java (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysConfigMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysDeptMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysDictDataMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysDictTypeMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysLogininforMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysMenuMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysNoticeMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysOperLogMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysPostMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysRoleMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysUserMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysUserPostMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/src/main/resources/mapper/system/SysUserRoleMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysConfigMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysDeptMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysDictDataMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysDictTypeMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysLogininforMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysMenuMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysNoticeMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysOperLogMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysPostMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysRoleDeptMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysRoleMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysRoleMenuMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysUserMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysUserPostMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/mapper/system/SysUserRoleMapper.xml (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysCache.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysConfig.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysLogininfor.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysNotice.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysOperLog.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysPost.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleDept.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleMenu.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserOnline.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserPost.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserRole.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/vo/MetaVo.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/domain/vo/RouterVo.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysConfigMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDeptMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictDataMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictTypeMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysLogininforMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysMenuMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysNoticeMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysOperLogMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysPostMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleDeptMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMenuMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserPostMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserRoleMapper.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysConfigService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysDeptService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictDataService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictTypeService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysLogininforService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysMenuService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysNoticeService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysOperLogService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysPostService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysRoleService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserOnlineService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserService.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysPostServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserServiceImpl.class (100%) rename portal/backend/{ => portal}/portal-system/target/maven-archiver/pom.properties (72%) rename portal/backend/{ => portal}/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst (100%) rename portal/backend/{ => portal}/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (100%) rename portal/backend/{ => portal}/portal-system/target/portal-system-1.0.0.jar (88%) create mode 100644 sdk/backend/oauth2-login-sdk/.gitignore delete mode 100644 sdk/frontend/oauth2-login-sdk/README.md delete mode 100644 sdk/frontend/oauth2-login-sdk/src/core/http.ts delete mode 100644 sdk/frontend/oauth2-login-sdk/src/core/token.ts delete mode 100644 sdk/frontend/oauth2-login-sdk/src/guards/router.ts delete mode 100644 sdk/frontend/oauth2-login-sdk/src/index.ts create mode 100644 sdk/frontend/unified-login-sdk/.gitignore create mode 100644 sdk/frontend/unified-login-sdk/README.md rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/auth.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/auth.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/auth.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/auth.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/http.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/http.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/http.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/http.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/token.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/token.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/token.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/core/token.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/guards/router.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/guards/router.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/guards/router.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/guards/router.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.esm.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.esm.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/index.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/plugins/vue.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/plugins/vue.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/plugins/vue.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/plugins/vue.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/config.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/config.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/config.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/config.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/index.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/index.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/index.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/index.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/user.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/user.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/user.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/types/user.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/storage.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/storage.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/storage.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/storage.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/url.d.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/url.d.ts.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/url.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/dist/utils/url.js.map (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/package.json (96%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/pnpm-lock.yaml (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/rollup.config.js (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/core/auth.ts (65%) create mode 100644 sdk/frontend/unified-login-sdk/src/core/http.examples.ts create mode 100644 sdk/frontend/unified-login-sdk/src/core/http.test.ts create mode 100644 sdk/frontend/unified-login-sdk/src/core/http.ts create mode 100644 sdk/frontend/unified-login-sdk/src/core/token.ts create mode 100644 sdk/frontend/unified-login-sdk/src/guards/router.examples.ts create mode 100644 sdk/frontend/unified-login-sdk/src/guards/router.test.ts create mode 100644 sdk/frontend/unified-login-sdk/src/guards/router.ts create mode 100644 sdk/frontend/unified-login-sdk/src/index.ts create mode 100644 sdk/frontend/unified-login-sdk/src/plugins/vue.test.ts rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/plugins/vue.ts (62%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/types/config.ts (54%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/types/index.ts (91%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/types/user.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/utils/storage.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/src/utils/url.ts (100%) rename sdk/frontend/{oauth2-login-sdk => unified-login-sdk}/tsconfig.json (100%) diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..7806386 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..7cb47f6 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..8fb5dc2 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/lingniu-platform.iml b/.idea/lingniu-platform.iml deleted file mode 100644 index d6ebd48..0000000 --- a/.idea/lingniu-platform.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 639900d..ce9541d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,18 @@ - + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b5cfd88..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/demo/backend/.gitattributes b/demo/backend/demo/.gitattributes similarity index 100% rename from demo/backend/.gitattributes rename to demo/backend/demo/.gitattributes diff --git a/demo/backend/.gitignore b/demo/backend/demo/.gitignore similarity index 100% rename from demo/backend/.gitignore rename to demo/backend/demo/.gitignore diff --git a/demo/backend/pom.xml b/demo/backend/demo/pom.xml similarity index 100% rename from demo/backend/pom.xml rename to demo/backend/demo/pom.xml diff --git a/demo/backend/src/main/java/com/example/demo/DemoApplication.java b/demo/backend/demo/src/main/java/org/lingniu/example/demo/DemoApplication.java similarity index 90% rename from demo/backend/src/main/java/com/example/demo/DemoApplication.java rename to demo/backend/demo/src/main/java/org/lingniu/example/demo/DemoApplication.java index 70629e9..df68dae 100644 --- a/demo/backend/src/main/java/com/example/demo/DemoApplication.java +++ b/demo/backend/demo/src/main/java/org/lingniu/example/demo/DemoApplication.java @@ -1,4 +1,4 @@ -package com.example.demo; +package org.lingniu.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/demo/backend/src/main/java/com/example/demo/Controller/UserController.java b/demo/backend/demo/src/main/java/org/lingniu/example/demo/controller/DemoController.java similarity index 63% rename from demo/backend/src/main/java/com/example/demo/Controller/UserController.java rename to demo/backend/demo/src/main/java/org/lingniu/example/demo/controller/DemoController.java index 56b0fd0..ddef756 100644 --- a/demo/backend/src/main/java/com/example/demo/Controller/UserController.java +++ b/demo/backend/demo/src/main/java/org/lingniu/example/demo/controller/DemoController.java @@ -1,37 +1,29 @@ -package org.lingniu.sdk.web; +package org.lingniu.example.demo.controller; -import com.alibaba.fastjson2.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import org.lingniu.sdk.model.base.CommonResult; import org.lingniu.sdk.model.user.UserInfo; -import org.lingniu.sdk.utils.HttpClientUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; -import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient; -import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Map; - @RequestMapping("/test") @RestController -public class UserController { +public class DemoController { private final OAuth2ClientProperties oAuth2ClientProperties; private final ObjectMapper objectMapper; - public UserController(OAuth2ClientProperties oAuth2ClientProperties, ObjectMapper objectMapper) { + public DemoController(OAuth2ClientProperties oAuth2ClientProperties, ObjectMapper objectMapper) { this.oAuth2ClientProperties = oAuth2ClientProperties; this.objectMapper = objectMapper; } @GetMapping("/getUserInfo") - @PreAuthorize("@ss.hasPermi('user:info')") public CommonResult getUserInfo(@AuthenticationPrincipal UserInfo userInfo) throws Exception { return CommonResult.success(userInfo); } + } diff --git a/demo/backend/src/main/java/com/example/demo/test.http b/demo/backend/demo/src/main/java/org/lingniu/example/demo/test.http similarity index 98% rename from demo/backend/src/main/java/com/example/demo/test.http rename to demo/backend/demo/src/main/java/org/lingniu/example/demo/test.http index 4a0bfa1..9a78081 100644 --- a/demo/backend/src/main/java/com/example/demo/test.http +++ b/demo/backend/demo/src/main/java/org/lingniu/example/demo/test.http @@ -39,3 +39,9 @@ Accept: application/json POST http://localhost:10001/logout Cookie: app_refresh_token=02237ce2c5d14e8088be3d462b69df99 + + + +http://106.14.217.120/portal-api/authorization/demo + + diff --git a/demo/backend/demo/src/main/java/org/lingniu/example/demo/test2.http b/demo/backend/demo/src/main/java/org/lingniu/example/demo/test2.http new file mode 100644 index 0000000..90fed07 --- /dev/null +++ b/demo/backend/demo/src/main/java/org/lingniu/example/demo/test2.http @@ -0,0 +1,50 @@ +# @no-redirect +GET http://106.14.217.120/portal-api/oauth2/authorization/portal + +### +GET localhost:8080 + +### +POST http://localhost:8000/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Idp: 387cec08371f4ebfb61074d41a94046e +Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30 + +response_type=code&client_id=b55c88c20db94790a60a5075&scope=openid%20profile%20perms&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D&redirect_uri=http://localhost:9506/oauth2/callback&nonce=rXdsOr0tczTckUSP_RKZ5ABmP575Z4JrTLOxCQ1nt3U + + +#### +GET http://localhost:8080/login/oauth2/code/portal?code=ua3zRRX2YMHsGmYaY4CGEvtklZbCzNtT5sOjguXzhY68zoKqnA83NlQXtG1dN-X_mv4Sn5MaYERkymxk9EWJzpHA_RB523keRb25jmIt5LgUjWJtwD4gJmQJulPOXFO1&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D + +### +GET http://localhost:10001/idp/routes +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef + + +### +GET http://localhost:8000/account/getRouters +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef +Accept: application/json + +#### +GET http://localhost:10001/idp/routes +#Authorization: 85a9f4d6fef34763b4437830ec331570 +Authorization: 41deb286d03b42139bc3559cbbcc9995 +#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef +Accept: application/json + +### +POST http://localhost:10001/logout +Cookie: app_refresh_token=02237ce2c5d14e8088be3d462b69df99 + + + + + + + diff --git a/demo/backend/src/main/resources/application.yml b/demo/backend/demo/src/main/resources/application-dev.yml similarity index 100% rename from demo/backend/src/main/resources/application.yml rename to demo/backend/demo/src/main/resources/application-dev.yml diff --git a/demo/backend/demo/src/main/resources/application-test.yml b/demo/backend/demo/src/main/resources/application-test.yml new file mode 100644 index 0000000..5df65f8 --- /dev/null +++ b/demo/backend/demo/src/main/resources/application-test.yml @@ -0,0 +1,70 @@ +spring: + application: + name: demo + # redis \u914D\u7F6E + security: + oauth2: + resourceserver: + jwt: + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks + client: + registration: + demo: + client-id: b55c88c20db94790a60a5075 + client-secret: UqVAS8UiehSFJSR8_CygnYGR5M79LuGuGiDwATtcGqg + client-name: DEMO + authorization-grant-type: authorization_code + redirect-uri: http://106.14.217.120/demo/callback + scope: + - openid + - profile + # 返回权限 + - perms + provider: idp + + provider: + idp: + issuer-uri: http://127.0.0.1:8082 + authorization-uri: http://106.14.217.120/idp-ui/sso + token-uri: http://127.0.0.1:8082/oauth2/token + user-info-uri: http://127.0.0.1:8082/userinfo + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks + user-name-attribute: sub + data: + redis: + # \u5730\u5740 + host: localhost + # \u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A6379 + port: 6379 + # \u6570\u636E\u5E93\u7D22\u5F15 + database: 0 + # \u5BC6\u7801 + password: + # \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4 + timeout: 10s + lettuce: + pool: + # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5 + min-idle: 0 + # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5 + max-idle: 8 + # \u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570 + max-active: 8 + # #\u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 + max-wait: -1ms + + + + + +logging: + level: + root: info + org.springframework.web: debug + org.springframework.security: debug + org.springframework.security.oauth2: debug + + +server: + port: 10001 + diff --git a/demo/backend/demo/src/main/resources/application.yml b/demo/backend/demo/src/main/resources/application.yml new file mode 100644 index 0000000..caf4dfc --- /dev/null +++ b/demo/backend/demo/src/main/resources/application.yml @@ -0,0 +1,3 @@ +spring: + profiles: + active: dev \ No newline at end of file diff --git a/demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java b/demo/backend/demo/src/test/java/org/lingniu/example/demo/DemoApplicationTests.java similarity index 84% rename from demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java rename to demo/backend/demo/src/test/java/org/lingniu/example/demo/DemoApplicationTests.java index eaa9969..8e7b2c0 100644 --- a/demo/backend/src/test/java/com/example/demo/DemoApplicationTests.java +++ b/demo/backend/demo/src/test/java/org/lingniu/example/demo/DemoApplicationTests.java @@ -1,4 +1,4 @@ -package com.example.demo; +package org.lingniu.example.demo; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/demo/backend/mvnw b/demo/backend/mvnw deleted file mode 100644 index bd8896b..0000000 --- a/demo/backend/mvnw +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.4 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -scriptDir="$(dirname "$0")" -scriptName="$(basename "$0")" - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -actualDistributionDir="" - -# First try the expected directory name (for regular distributions) -if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then - if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then - actualDistributionDir="$distributionUrlNameMain" - fi -fi - -# If not found, search for any directory with the Maven executable (for snapshots) -if [ -z "$actualDistributionDir" ]; then - # enable globbing to iterate over items - set +f - for dir in "$TMP_DOWNLOAD_DIR"/*; do - if [ -d "$dir" ]; then - if [ -f "$dir/bin/$MVN_CMD" ]; then - actualDistributionDir="$(basename "$dir")" - break - fi - fi - done - set -f -fi - -if [ -z "$actualDistributionDir" ]; then - verbose "Contents of $TMP_DOWNLOAD_DIR:" - verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" - die "Could not find Maven distribution directory in extracted archive" -fi - -verbose "Found extracted Maven distribution directory: $actualDistributionDir" -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/demo/backend/mvnw.cmd b/demo/backend/mvnw.cmd deleted file mode 100644 index 92450f9..0000000 --- a/demo/backend/mvnw.cmd +++ /dev/null @@ -1,189 +0,0 @@ -<# : batch portion -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.3.4 -@REM -@REM Optional ENV vars -@REM MVNW_REPOURL - repo url base for downloading maven distribution -@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output -@REM ---------------------------------------------------------------------------- - -@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) -@SET __MVNW_CMD__= -@SET __MVNW_ERROR__= -@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% -@SET PSModulePath= -@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( - IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) -) -@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% -@SET __MVNW_PSMODULEP_SAVE= -@SET __MVNW_ARG0_NAME__= -@SET MVNW_USERNAME= -@SET MVNW_PASSWORD= -@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) -@echo Cannot start maven from wrapper >&2 && exit /b 1 -@GOTO :EOF -: end batch / begin powershell #> - -$ErrorActionPreference = "Stop" -if ($env:MVNW_VERBOSE -eq "true") { - $VerbosePreference = "Continue" -} - -# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties -$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl -if (!$distributionUrl) { - Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" -} - -switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { - "maven-mvnd-*" { - $USE_MVND = $true - $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" - $MVN_CMD = "mvnd.cmd" - break - } - default { - $USE_MVND = $false - $MVN_CMD = $script -replace '^mvnw','mvn' - break - } -} - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -if ($env:MVNW_REPOURL) { - $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } - $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" -} -$distributionUrlName = $distributionUrl -replace '^.*/','' -$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' - -$MAVEN_M2_PATH = "$HOME/.m2" -if ($env:MAVEN_USER_HOME) { - $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" -} - -if (-not (Test-Path -Path $MAVEN_M2_PATH)) { - New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null -} - -$MAVEN_WRAPPER_DISTS = $null -if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { - $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" -} else { - $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" -} - -$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" -$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' -$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" - -if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { - Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" - Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" - exit $? -} - -if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { - Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" -} - -# prepare tmp dir -$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile -$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" -$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null -trap { - if ($TMP_DOWNLOAD_DIR.Exists) { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } - } -} - -New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null - -# Download and Install Apache Maven -Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -Write-Verbose "Downloading from: $distributionUrl" -Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -$webclient = New-Object System.Net.WebClient -if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { - $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) -} -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum -if ($distributionSha256Sum) { - if ($USE_MVND) { - Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." - } - Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash - if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { - Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." - } -} - -# unzip and move -Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -$actualDistributionDir = "" - -# First try the expected directory name (for regular distributions) -$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" -$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" -if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { - $actualDistributionDir = $distributionUrlNameMain -} - -# If not found, search for any directory with the Maven executable (for snapshots) -if (!$actualDistributionDir) { - Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { - $testPath = Join-Path $_.FullName "bin/$MVN_CMD" - if (Test-Path -Path $testPath -PathType Leaf) { - $actualDistributionDir = $_.Name - } - } -} - -if (!$actualDistributionDir) { - Write-Error "Could not find Maven distribution directory in extracted archive" -} - -Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" -Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null -try { - Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null -} catch { - if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { - Write-Error "fail to move MAVEN_HOME" - } -} finally { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } -} - -Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/demo/frontend/README.md b/demo/frontend/README.md deleted file mode 100644 index 33895ab..0000000 --- a/demo/frontend/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Vue 3 + TypeScript + Vite - -This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + \ No newline at end of file diff --git a/demo/frontend/src/assets/vue.svg b/demo/frontend/demo/demo-sdk/src/assets/vue.svg similarity index 100% rename from demo/frontend/src/assets/vue.svg rename to demo/frontend/demo/demo-sdk/src/assets/vue.svg diff --git a/demo/frontend/demo/demo-sdk/src/components/EChartsReport.vue b/demo/frontend/demo/demo-sdk/src/components/EChartsReport.vue new file mode 100644 index 0000000..fb23489 --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/components/EChartsReport.vue @@ -0,0 +1,142 @@ + + + {{ title }} + + + + + + + \ No newline at end of file diff --git a/demo/frontend/demo/demo-sdk/src/main.ts b/demo/frontend/demo/demo-sdk/src/main.ts new file mode 100644 index 0000000..858098d --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/main.ts @@ -0,0 +1,37 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' +import router from './router' +import unifiedLoginSDK from "oauth2-login-sdk"; + +// SDK配置 +const SDK_CONFIG = { + clientId: 'b55c88c20db94790a60a5075', + registrationId: 'demo', + storageType: 'localStorage' as const, + basepath: '/demo-api', + idpLogoutUrl: 'http://106.14.217.120/idp-ui/logout', + homePage: 'http://106.14.217.120/demo/dashboard' +}; + +// 初始化SDK +try { + unifiedLoginSDK.init(SDK_CONFIG); + console.log('✅ SDK初始化成功'); +} catch (error) { + console.error('❌ SDK初始化失败:', error); +} + +// 创建Vue应用 +const app = createApp(App) + +// 注册路由 +app.use(router) + +// 挂载应用 +app.mount('#app') + +// 全局错误处理 +app.config.errorHandler = (err, _instance, info) => { + console.error('Vue错误:', err, info); +}; diff --git a/demo/frontend/demo/demo-sdk/src/router/index.ts b/demo/frontend/demo/demo-sdk/src/router/index.ts new file mode 100644 index 0000000..65a8cbf --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/router/index.ts @@ -0,0 +1,90 @@ +import { createRouter, createWebHistory } from 'vue-router' +import unifiedLoginSDK from 'oauth2-login-sdk'; + +// 路由配置 +const routes = [ + { + path: '/', + redirect: '/dashboard' + }, + { + path: '/dashboard', + name: 'dashboard', + component: () => import('../views/Dashboard.vue'), + meta: { + requiresAuth: true, + title: '仪表板' + } + }, + { + path: '/profile', + name: 'profile', + component: () => import('../views/Profile.vue'), + meta: { + requiresAuth: true, + title: '个人中心' + } + }, + { + path: '/oauth2/callback', + name: 'callback', + component: () => import('../views/Callback.vue'), + meta: { + title: '认证回调' + } + } +]; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes +}); + +// 路由守卫 +router.beforeEach(async (to, _from, next) => { + // 设置页面标题 + if (to.meta.title) { + document.title = `${to.meta.title} - 统一登录Demo`; + } + + // 检查是否需要认证 + const requiresAuth = to.matched.some(record => record.meta.requiresAuth); + + if (requiresAuth) { + // 需要认证的路由 + if (!unifiedLoginSDK.isAuthenticated()) { + try { + console.log('🔒 用户未认证,正在跳转到登录页面...'); + await unifiedLoginSDK.login(); + // 登录会重定向到认证服务器,阻止当前路由切换 + next(false); + } catch (error) { + console.error('❌ 登录失败:', error); + next(false); + } + } else { + // 已认证,允许访问 + next(); + } + } else if (unifiedLoginSDK.isCallback()) { + // 处理OAuth2回调 + try { + console.log('🔄 处理OAuth2回调...'); + await unifiedLoginSDK.handleCallback(); + // 回调处理完成后SDK会自动跳转到homePage + } catch (error) { + console.error('❌ 回调处理失败:', error); + next('/'); + } + } else { + // 公开路由 + next(); + } +}); + +// 路由后置守卫 +router.afterEach((to, from) => { + console.log(`🧭 路由切换: ${from.path} -> ${to.path}`); +}); + +export default router \ No newline at end of file diff --git a/demo/frontend/src/style.css b/demo/frontend/demo/demo-sdk/src/style.css similarity index 100% rename from demo/frontend/src/style.css rename to demo/frontend/demo/demo-sdk/src/style.css diff --git a/demo/frontend/demo/demo-sdk/src/views/Callback.vue b/demo/frontend/demo/demo-sdk/src/views/Callback.vue new file mode 100644 index 0000000..96ace64 --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/views/Callback.vue @@ -0,0 +1,111 @@ + + + + + {{ statusMessage }} + {{ errorMessage }} + + + + + + + \ No newline at end of file diff --git a/demo/frontend/demo/demo-sdk/src/views/Dashboard.vue b/demo/frontend/demo/demo-sdk/src/views/Dashboard.vue new file mode 100644 index 0000000..116b2e4 --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/views/Dashboard.vue @@ -0,0 +1,581 @@ + + + + + 正在加载用户信息... + + + + + + 欢迎回来,{{ userInfo?.username || '访客' }}! + {{ userInfo ? '已登录' : '未登录' }} + + + + 👤 + 个人中心 + + + 🚪 + 退出登录 + + + + + + + + 登录状态 + + {{ isAuthenticated ? '已登录' : '未登录' }} + + + + + 用户角色 + + + {{ role }} + + 暂无角色 + + + + + 权限数量 + + {{ userInfo?.permissions?.length || 0 }} + + + + + 数据报表示例 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/frontend/demo/demo-sdk/src/views/Profile.vue b/demo/frontend/demo/demo-sdk/src/views/Profile.vue new file mode 100644 index 0000000..53ec448 --- /dev/null +++ b/demo/frontend/demo/demo-sdk/src/views/Profile.vue @@ -0,0 +1,487 @@ + + + + + 👤 个人中心 + 🏠 返回首页 + + 退出登录 + + + + + + 基本信息 + + + 用户名: + {{ userInfo?.username || '未获取' }} + + + 姓名: + {{ userInfo?.nickName || '未设置' }} + + + 用户ID: + {{ userInfo?.userId || '未知' }} + + + 部门: + {{ userInfo?.currentDeptId || '未分配' }} + + + 性别: + {{ userInfo?.sex || '未知' }} + + + + + + + 权限信息 + + + 角色列表 + + + {{ role }} + + + 暂无角色 + + + + + + 权限列表 + + + {{ permission }} + + + 暂无权限 + + + + + + + + + SDK功能演示 + + + 认证状态 + + {{ isAuthenticated ? '✅ 已认证' : '❌ 未认证' }} + + + + + Token信息 + + 查看Token + + + {{ formattedToken }} + + + + + 权限检查 + + + + 检查权限 + + + 结果: {{ permissionResult ? '✅ 有权限' : '❌ 无权限' }} + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/frontend/tsconfig.app.json b/demo/frontend/demo/demo-sdk/tsconfig.app.json similarity index 100% rename from demo/frontend/tsconfig.app.json rename to demo/frontend/demo/demo-sdk/tsconfig.app.json diff --git a/demo/frontend/tsconfig.json b/demo/frontend/demo/demo-sdk/tsconfig.json similarity index 100% rename from demo/frontend/tsconfig.json rename to demo/frontend/demo/demo-sdk/tsconfig.json diff --git a/demo/frontend/tsconfig.node.json b/demo/frontend/demo/demo-sdk/tsconfig.node.json similarity index 100% rename from demo/frontend/tsconfig.node.json rename to demo/frontend/demo/demo-sdk/tsconfig.node.json diff --git a/demo/frontend/vite.config.ts b/demo/frontend/demo/demo-sdk/vite.config.ts similarity index 90% rename from demo/frontend/vite.config.ts rename to demo/frontend/demo/demo-sdk/vite.config.ts index 81e0f7e..26731b0 100644 --- a/demo/frontend/vite.config.ts +++ b/demo/frontend/demo/demo-sdk/vite.config.ts @@ -58,9 +58,8 @@ export default defineConfig(({ mode }) => { rollupOptions: { output: { manualChunks: { - vue: ['vue', 'vue-router', 'vuex/pinia'], - vendor: ['axios', 'lodash', 'dayjs'], - ui: ['element-plus', 'ant-design-vue'] // 根据实际使用的 UI 库调整 + vue: ['vue', 'vue-router'], + echarts: ['echarts'] } } } diff --git a/demo/frontend/src/App.vue b/demo/frontend/src/App.vue deleted file mode 100644 index 59b75db..0000000 --- a/demo/frontend/src/App.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/demo/frontend/src/components/Home.vue b/demo/frontend/src/components/Home.vue deleted file mode 100644 index cb56f8a..0000000 --- a/demo/frontend/src/components/Home.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - hello {{ userInfo?.username }} is login - Loading menus... - - menus: - {{ JSON.stringify(menus) }} - - 退出 - - - - \ No newline at end of file diff --git a/demo/frontend/src/main.ts b/demo/frontend/src/main.ts deleted file mode 100644 index cd35530..0000000 --- a/demo/frontend/src/main.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' -import router from './router' -import unifiedLoginSDK from "oauth2-login-sdk"; - -// 初始化配置 -unifiedLoginSDK.init({ - clientId: 'b55c88c20db94790a60a5075', - registrationId: 'demo', - storageType: 'localStorage', - basepath: '/demo-api', - idpLogoutUrl: 'http://localhost/logout', - homePage: 'http://localhost:9506/home' -}); -const app = createApp(App) -app.use(router) -app.mount('#app') diff --git a/demo/frontend/src/router/index.ts b/demo/frontend/src/router/index.ts deleted file mode 100644 index 6e39902..0000000 --- a/demo/frontend/src/router/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import unifiedLoginSDK from 'oauth2-login-sdk'; -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { - path: '/', - name: 'home', - redirect: '/home' - }, - { - path: '/', - name: 'home', - component: () => import('../components/Home.vue') - } - ] -}) -router.beforeEach(async (to, _from, next) => { - debugger - if (!unifiedLoginSDK.isAuthenticated()) { - if (to.path === '/oauth2/callback') { - await unifiedLoginSDK.handleCallback() - }else{ - await unifiedLoginSDK.login() - } - } else { - next() - } -}) - -export default router \ No newline at end of file diff --git a/idp/backend/idp-starter/.gitattributes b/idp/backend/idp-starter/.gitattributes deleted file mode 100644 index 3b41682..0000000 --- a/idp/backend/idp-starter/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -/mvnw text eol=lf -*.cmd text eol=crlf diff --git a/idp/backend/idp-starter/mvnw b/idp/backend/idp-starter/mvnw deleted file mode 100644 index bd8896b..0000000 --- a/idp/backend/idp-starter/mvnw +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.4 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -scriptDir="$(dirname "$0")" -scriptName="$(basename "$0")" - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -actualDistributionDir="" - -# First try the expected directory name (for regular distributions) -if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then - if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then - actualDistributionDir="$distributionUrlNameMain" - fi -fi - -# If not found, search for any directory with the Maven executable (for snapshots) -if [ -z "$actualDistributionDir" ]; then - # enable globbing to iterate over items - set +f - for dir in "$TMP_DOWNLOAD_DIR"/*; do - if [ -d "$dir" ]; then - if [ -f "$dir/bin/$MVN_CMD" ]; then - actualDistributionDir="$(basename "$dir")" - break - fi - fi - done - set -f -fi - -if [ -z "$actualDistributionDir" ]; then - verbose "Contents of $TMP_DOWNLOAD_DIR:" - verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" - die "Could not find Maven distribution directory in extracted archive" -fi - -verbose "Found extracted Maven distribution directory: $actualDistributionDir" -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/idp/backend/idp-starter/mvnw.cmd b/idp/backend/idp-starter/mvnw.cmd deleted file mode 100644 index 92450f9..0000000 --- a/idp/backend/idp-starter/mvnw.cmd +++ /dev/null @@ -1,189 +0,0 @@ -<# : batch portion -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.3.4 -@REM -@REM Optional ENV vars -@REM MVNW_REPOURL - repo url base for downloading maven distribution -@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output -@REM ---------------------------------------------------------------------------- - -@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) -@SET __MVNW_CMD__= -@SET __MVNW_ERROR__= -@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% -@SET PSModulePath= -@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( - IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) -) -@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% -@SET __MVNW_PSMODULEP_SAVE= -@SET __MVNW_ARG0_NAME__= -@SET MVNW_USERNAME= -@SET MVNW_PASSWORD= -@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) -@echo Cannot start maven from wrapper >&2 && exit /b 1 -@GOTO :EOF -: end batch / begin powershell #> - -$ErrorActionPreference = "Stop" -if ($env:MVNW_VERBOSE -eq "true") { - $VerbosePreference = "Continue" -} - -# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties -$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl -if (!$distributionUrl) { - Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" -} - -switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { - "maven-mvnd-*" { - $USE_MVND = $true - $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" - $MVN_CMD = "mvnd.cmd" - break - } - default { - $USE_MVND = $false - $MVN_CMD = $script -replace '^mvnw','mvn' - break - } -} - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -if ($env:MVNW_REPOURL) { - $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } - $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" -} -$distributionUrlName = $distributionUrl -replace '^.*/','' -$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' - -$MAVEN_M2_PATH = "$HOME/.m2" -if ($env:MAVEN_USER_HOME) { - $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" -} - -if (-not (Test-Path -Path $MAVEN_M2_PATH)) { - New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null -} - -$MAVEN_WRAPPER_DISTS = $null -if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { - $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" -} else { - $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" -} - -$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" -$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' -$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" - -if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { - Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" - Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" - exit $? -} - -if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { - Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" -} - -# prepare tmp dir -$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile -$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" -$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null -trap { - if ($TMP_DOWNLOAD_DIR.Exists) { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } - } -} - -New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null - -# Download and Install Apache Maven -Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -Write-Verbose "Downloading from: $distributionUrl" -Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -$webclient = New-Object System.Net.WebClient -if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { - $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) -} -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum -if ($distributionSha256Sum) { - if ($USE_MVND) { - Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." - } - Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash - if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { - Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." - } -} - -# unzip and move -Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null - -# Find the actual extracted directory name (handles snapshots where filename != directory name) -$actualDistributionDir = "" - -# First try the expected directory name (for regular distributions) -$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" -$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" -if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { - $actualDistributionDir = $distributionUrlNameMain -} - -# If not found, search for any directory with the Maven executable (for snapshots) -if (!$actualDistributionDir) { - Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { - $testPath = Join-Path $_.FullName "bin/$MVN_CMD" - if (Test-Path -Path $testPath -PathType Leaf) { - $actualDistributionDir = $_.Name - } - } -} - -if (!$actualDistributionDir) { - Write-Error "Could not find Maven distribution directory in extracted archive" -} - -Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" -Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null -try { - Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null -} catch { - if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { - Write-Error "fail to move MAVEN_HOME" - } -} finally { - try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } - catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } -} - -Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/idp/backend/idp-starter/pom.xml b/idp/backend/idp-starter/pom.xml index e4c6c9b..4a5004f 100644 --- a/idp/backend/idp-starter/pom.xml +++ b/idp/backend/idp-starter/pom.xml @@ -10,7 +10,7 @@ org.lingniu idp-starter - 0.0.1-SNAPSHOT + 1.0.0-SNAPSHOT idp-starter idp-starter diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java index 6c13364..2f9da01 100644 --- a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/AuthorizationServerConfig.java @@ -142,6 +142,7 @@ public class AuthorizationServerConfig { .scope("read") .scope("write") .build(); + // Save registered client's in db as if in-memory JdbcRegisteredClientRepository registeredClientRepository = new JdbcRegisteredClientRepository(jdbcTemplate); registeredClientRepository.save(client); diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java index ef25bdf..e9304ec 100644 --- a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/config/CaptchaConfig.java @@ -37,7 +37,7 @@ public class CaptchaConfig // 验证码文本字符长度 默认为5 properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) - properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "DejaVu San,DejaVu Serif,DejaVu Sans Mono,Arial,Courier"); // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); Config config = new Config(properties); @@ -71,7 +71,7 @@ public class CaptchaConfig // 验证码文本字符长度 默认为5 properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) - properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "DejaVu San,DejaVu Serif,DejaVu Sans Mono,Arial,Courier"); // 验证码噪点颜色 默认为Color.BLACK properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); // 干扰实现类 diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http index 46dd375..dcb6ed8 100644 --- a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/controller/login.http @@ -21,11 +21,11 @@ Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30 client_id=2c6f1d9ff78641c78d72a848&redirect_uri=http%3A%2F%2Flocalhost%3A81%2Fcallback&response_type=code&state=LXcbn1xobq6unvUCz5uwG7PcwtsNdbWg&scope=openid ### @name 一次性授权码登录 -POST http://localhost:8000/oauth2/token +POST http://idp.lingniu.com/oauth2/token Content-Type: application/x-www-form-urlencoded Authorization: Basic MmM2ZjFkOWZmNzg2NDFjNzhkNzJhODQ4OmkxYnBlcjFKdzJnTGVUelVOMW9uaXd1SUNQRFFnTnVRRWNZeFRLSjVpdjA= -grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A81%2Fcallback&code=qmkNPAOk7pKTrTcHecwfSuona-O9Kjs-bbgSthovqSZz-wBhrqh9SUVeVUEN8ct4Gr7V-Dt4xMeupw3gFslSlbxZ8t2UHl74-63rGp7xnDVUGFWAA99TVa8hOnSgABZX&state=LXcbn1xobq6unvUCz5uwG7PcwtsNdbWg +grant_type=authorization_code&redirect_uri=http%3A%2F%2F106.14.217.120%2Fportal-ui%2Fcallback&code=ddaKrgG3dJCEnuRkQifzPFT-6CVPgZiPkc2B-a222jvkKT2lBId8eej9HigCP07EJphe5icFoFs85P98B-_RnCa4YP5dH6nNPazaa8Mja3u1fJ4GLu54JGduDnN_By7K&state=hFH5yAFqSxseGODiUFyCrjYVFJUnUN6GX3J9p7PyTsI%3D #### @@ -46,3 +46,19 @@ Content-Type: application/x-www-form-urlencoded Authorization: Basic MmM2ZjFkOWZmNzg2NDFjNzhkNzJhODQ4OmkxYnBlcjFKdzJnTGVUelVOMW9uaXd1SUNQRFFnTnVRRWNZeFRLSjVpdjA= grant_type=refresh_token&refresh_token=_NfU5Gdy_dANJkbvjJm6cK7PxNSHyQexWMY5KthA8Hs_nOFtPnTVChsHF-dmLjzhDRZk5nHNZWV7XhxyOp5qS-nLjScsrbvVwSmZhb20QpDLaSoUGtF-ZdBawvlceXks + + +### +GET http://idp.lingniu.com/portal-api/oauth2/authorization/portal + + +### +POST http://idp.lingniu.com/idp-api2/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Idp: bc46a1a9e21449a898e0bd978dc5b2fb + +response_type=code&client_id=2c6f1d9ff78641c78d72a848&scope=openid%20profile%20perms&state=Jy8Q9QHmuPIx9QJ3Yj_StD6b1o2pzCv4ccb6XmfnPRs%3D&redirect_uri=http://106.14.217.120/portal-ui/callback&nonce=brzv1fO14EC4sY0LFIUz9UL9W3i4xw8t3tD9tGEGBvM + +### +GET http://idp.lingniu.com/portal-api/login/oauth2/code/portal?code=8bc_NkChuAgey3hCBE6genllT_JEuMhWn7F9vvDQ9QdLdmvHoFMh891fobX8NwdvAB3fusqg6cumOResv-IISyGrOaeTx_0BizfMacNP4hXdOwPSqz1UhvH2sZvfKOVH&state=Jy8Q9QHmuPIx9QJ3Yj_StD6b1o2pzCv4ccb6XmfnPRs%3D \ No newline at end of file diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java index a8d2865..fefe496 100644 --- a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/model/vo/AccessTokenInfo.java @@ -171,7 +171,7 @@ public class AccessTokenInfo { return null; } - AccessTokenInfo.AccessTokenInfoBuilder builder = AccessTokenInfo.builder(); + AccessTokenInfoBuilder builder = AccessTokenInfo.builder(); builder.userId((String) map.get("userId")); builder.username((String) map.get("username")); diff --git a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java index f195d68..7725718 100644 --- a/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java +++ b/idp/backend/idp-starter/src/main/java/org/lingniu/idp/utils/ClientCredentialUtil.java @@ -72,12 +72,12 @@ public class ClientCredentialUtil { * 生成完整的Client凭证 * @return 包含Client ID、原始Secret和加密Secret的Map */ - public static java.util.Map generateClientCredentials() { + public static Map generateClientCredentials() { String clientId = generateClientId(); String rawSecret = generateRandomSecret(32); String encodedSecret = encodeWithBCryptPrefix(rawSecret); - java.util.Map credentials = new java.util.HashMap<>(); + Map credentials = new java.util.HashMap<>(); credentials.put("clientId", clientId); credentials.put("rawSecret", rawSecret); credentials.put("encodedSecret", encodedSecret); diff --git a/idp/backend/idp-starter/src/main/resources/application-local.yml b/idp/backend/idp-starter/src/main/resources/application-dev.yml similarity index 99% rename from idp/backend/idp-starter/src/main/resources/application-local.yml rename to idp/backend/idp-starter/src/main/resources/application-dev.yml index e0da1e8..c799777 100644 --- a/idp/backend/idp-starter/src/main/resources/application-local.yml +++ b/idp/backend/idp-starter/src/main/resources/application-dev.yml @@ -14,7 +14,7 @@ project: # 验证码类型 math 数字计算 char 字符验证 captchaType: math server: - port: 8443 + port: 8082 spring: # 资源信息 diff --git a/idp/backend/idp-starter/src/main/resources/application-test.yml b/idp/backend/idp-starter/src/main/resources/application-test.yml index 24a683f..60a821b 100644 --- a/idp/backend/idp-starter/src/main/resources/application-test.yml +++ b/idp/backend/idp-starter/src/main/resources/application-test.yml @@ -14,7 +14,7 @@ project: # 验证码类型 math 数字计算 char 字符验证 captchaType: math server: - port: 8443 + port: 8082 spring: # 资源信息 messages: diff --git a/idp/backend/idp-starter/src/main/resources/application.yml b/idp/backend/idp-starter/src/main/resources/application.yml index 03c30d3..3d7808a 100644 --- a/idp/backend/idp-starter/src/main/resources/application.yml +++ b/idp/backend/idp-starter/src/main/resources/application.yml @@ -1,3 +1,3 @@ spring: profiles: - active: test + active: dev diff --git a/idp/frontend/.env.development b/idp/frontend/idp/.env.development similarity index 71% rename from idp/frontend/.env.development rename to idp/frontend/idp/.env.development index 46a1dbe..16e9df4 100644 --- a/idp/frontend/.env.development +++ b/idp/frontend/idp/.env.development @@ -4,8 +4,8 @@ VITE_APP_TITLE = IDP统一登录系统 # 开发环境配置 VITE_APP_ENV = 'development' -VITE_APP_BASE_URL=/idp-ui/ +VITE_APP_BASE_URL=/ # 开发环境 -VITE_APP_BASE_API = '/idp-api2' +VITE_APP_BASE_API = '/dev-api' VITE_APP_DEFAULT_PAGE='' diff --git a/idp/frontend/.env.production b/idp/frontend/idp/.env.production similarity index 100% rename from idp/frontend/.env.production rename to idp/frontend/idp/.env.production diff --git a/idp/frontend/.env.staging b/idp/frontend/idp/.env.staging similarity index 100% rename from idp/frontend/.env.staging rename to idp/frontend/idp/.env.staging diff --git a/idp/frontend/README.md b/idp/frontend/idp/README.md similarity index 100% rename from idp/frontend/README.md rename to idp/frontend/idp/README.md diff --git a/idp/frontend/crypto-js.d.ts b/idp/frontend/idp/crypto-js.d.ts similarity index 100% rename from idp/frontend/crypto-js.d.ts rename to idp/frontend/idp/crypto-js.d.ts diff --git a/idp/frontend/index.html b/idp/frontend/idp/index.html similarity index 100% rename from idp/frontend/index.html rename to idp/frontend/idp/index.html diff --git a/idp/frontend/package.json b/idp/frontend/idp/package.json similarity index 100% rename from idp/frontend/package.json rename to idp/frontend/idp/package.json diff --git a/idp/frontend/pnpm-lock.yaml b/idp/frontend/idp/pnpm-lock.yaml similarity index 100% rename from idp/frontend/pnpm-lock.yaml rename to idp/frontend/idp/pnpm-lock.yaml diff --git a/idp/frontend/src/App.vue b/idp/frontend/idp/src/App.vue similarity index 100% rename from idp/frontend/src/App.vue rename to idp/frontend/idp/src/App.vue diff --git a/idp/frontend/src/api/login.ts b/idp/frontend/idp/src/api/login.ts similarity index 100% rename from idp/frontend/src/api/login.ts rename to idp/frontend/idp/src/api/login.ts diff --git a/idp/frontend/src/assets/401_images/401.gif b/idp/frontend/idp/src/assets/401_images/401.gif similarity index 100% rename from idp/frontend/src/assets/401_images/401.gif rename to idp/frontend/idp/src/assets/401_images/401.gif diff --git a/idp/frontend/src/assets/404_images/404.png b/idp/frontend/idp/src/assets/404_images/404.png similarity index 100% rename from idp/frontend/src/assets/404_images/404.png rename to idp/frontend/idp/src/assets/404_images/404.png diff --git a/idp/frontend/src/assets/404_images/404_cloud.png b/idp/frontend/idp/src/assets/404_images/404_cloud.png similarity index 100% rename from idp/frontend/src/assets/404_images/404_cloud.png rename to idp/frontend/idp/src/assets/404_images/404_cloud.png diff --git a/idp/frontend/src/assets/icons/svg/404.svg b/idp/frontend/idp/src/assets/icons/svg/404.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/404.svg rename to idp/frontend/idp/src/assets/icons/svg/404.svg diff --git a/idp/frontend/src/assets/icons/svg/bug.svg b/idp/frontend/idp/src/assets/icons/svg/bug.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/bug.svg rename to idp/frontend/idp/src/assets/icons/svg/bug.svg diff --git a/idp/frontend/src/assets/icons/svg/build.svg b/idp/frontend/idp/src/assets/icons/svg/build.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/build.svg rename to idp/frontend/idp/src/assets/icons/svg/build.svg diff --git a/idp/frontend/src/assets/icons/svg/button.svg b/idp/frontend/idp/src/assets/icons/svg/button.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/button.svg rename to idp/frontend/idp/src/assets/icons/svg/button.svg diff --git a/idp/frontend/src/assets/icons/svg/cascader.svg b/idp/frontend/idp/src/assets/icons/svg/cascader.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/cascader.svg rename to idp/frontend/idp/src/assets/icons/svg/cascader.svg diff --git a/idp/frontend/src/assets/icons/svg/chart.svg b/idp/frontend/idp/src/assets/icons/svg/chart.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/chart.svg rename to idp/frontend/idp/src/assets/icons/svg/chart.svg diff --git a/idp/frontend/src/assets/icons/svg/checkbox.svg b/idp/frontend/idp/src/assets/icons/svg/checkbox.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/checkbox.svg rename to idp/frontend/idp/src/assets/icons/svg/checkbox.svg diff --git a/idp/frontend/src/assets/icons/svg/clipboard.svg b/idp/frontend/idp/src/assets/icons/svg/clipboard.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/clipboard.svg rename to idp/frontend/idp/src/assets/icons/svg/clipboard.svg diff --git a/idp/frontend/src/assets/icons/svg/code.svg b/idp/frontend/idp/src/assets/icons/svg/code.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/code.svg rename to idp/frontend/idp/src/assets/icons/svg/code.svg diff --git a/idp/frontend/src/assets/icons/svg/color.svg b/idp/frontend/idp/src/assets/icons/svg/color.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/color.svg rename to idp/frontend/idp/src/assets/icons/svg/color.svg diff --git a/idp/frontend/src/assets/icons/svg/component.svg b/idp/frontend/idp/src/assets/icons/svg/component.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/component.svg rename to idp/frontend/idp/src/assets/icons/svg/component.svg diff --git a/idp/frontend/src/assets/icons/svg/dashboard.svg b/idp/frontend/idp/src/assets/icons/svg/dashboard.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/dashboard.svg rename to idp/frontend/idp/src/assets/icons/svg/dashboard.svg diff --git a/idp/frontend/src/assets/icons/svg/date-range.svg b/idp/frontend/idp/src/assets/icons/svg/date-range.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/date-range.svg rename to idp/frontend/idp/src/assets/icons/svg/date-range.svg diff --git a/idp/frontend/src/assets/icons/svg/date.svg b/idp/frontend/idp/src/assets/icons/svg/date.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/date.svg rename to idp/frontend/idp/src/assets/icons/svg/date.svg diff --git a/idp/frontend/src/assets/icons/svg/dict.svg b/idp/frontend/idp/src/assets/icons/svg/dict.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/dict.svg rename to idp/frontend/idp/src/assets/icons/svg/dict.svg diff --git a/idp/frontend/src/assets/icons/svg/documentation.svg b/idp/frontend/idp/src/assets/icons/svg/documentation.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/documentation.svg rename to idp/frontend/idp/src/assets/icons/svg/documentation.svg diff --git a/idp/frontend/src/assets/icons/svg/download.svg b/idp/frontend/idp/src/assets/icons/svg/download.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/download.svg rename to idp/frontend/idp/src/assets/icons/svg/download.svg diff --git a/idp/frontend/src/assets/icons/svg/drag.svg b/idp/frontend/idp/src/assets/icons/svg/drag.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/drag.svg rename to idp/frontend/idp/src/assets/icons/svg/drag.svg diff --git a/idp/frontend/src/assets/icons/svg/druid.svg b/idp/frontend/idp/src/assets/icons/svg/druid.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/druid.svg rename to idp/frontend/idp/src/assets/icons/svg/druid.svg diff --git a/idp/frontend/src/assets/icons/svg/edit.svg b/idp/frontend/idp/src/assets/icons/svg/edit.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/edit.svg rename to idp/frontend/idp/src/assets/icons/svg/edit.svg diff --git a/idp/frontend/src/assets/icons/svg/education.svg b/idp/frontend/idp/src/assets/icons/svg/education.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/education.svg rename to idp/frontend/idp/src/assets/icons/svg/education.svg diff --git a/idp/frontend/src/assets/icons/svg/email.svg b/idp/frontend/idp/src/assets/icons/svg/email.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/email.svg rename to idp/frontend/idp/src/assets/icons/svg/email.svg diff --git a/idp/frontend/src/assets/icons/svg/enter.svg b/idp/frontend/idp/src/assets/icons/svg/enter.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/enter.svg rename to idp/frontend/idp/src/assets/icons/svg/enter.svg diff --git a/idp/frontend/src/assets/icons/svg/example.svg b/idp/frontend/idp/src/assets/icons/svg/example.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/example.svg rename to idp/frontend/idp/src/assets/icons/svg/example.svg diff --git a/idp/frontend/src/assets/icons/svg/excel.svg b/idp/frontend/idp/src/assets/icons/svg/excel.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/excel.svg rename to idp/frontend/idp/src/assets/icons/svg/excel.svg diff --git a/idp/frontend/src/assets/icons/svg/exit-fullscreen.svg b/idp/frontend/idp/src/assets/icons/svg/exit-fullscreen.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/exit-fullscreen.svg rename to idp/frontend/idp/src/assets/icons/svg/exit-fullscreen.svg diff --git a/idp/frontend/src/assets/icons/svg/eye-open.svg b/idp/frontend/idp/src/assets/icons/svg/eye-open.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/eye-open.svg rename to idp/frontend/idp/src/assets/icons/svg/eye-open.svg diff --git a/idp/frontend/src/assets/icons/svg/eye.svg b/idp/frontend/idp/src/assets/icons/svg/eye.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/eye.svg rename to idp/frontend/idp/src/assets/icons/svg/eye.svg diff --git a/idp/frontend/src/assets/icons/svg/form.svg b/idp/frontend/idp/src/assets/icons/svg/form.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/form.svg rename to idp/frontend/idp/src/assets/icons/svg/form.svg diff --git a/idp/frontend/src/assets/icons/svg/fullscreen.svg b/idp/frontend/idp/src/assets/icons/svg/fullscreen.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/fullscreen.svg rename to idp/frontend/idp/src/assets/icons/svg/fullscreen.svg diff --git a/idp/frontend/src/assets/icons/svg/github.svg b/idp/frontend/idp/src/assets/icons/svg/github.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/github.svg rename to idp/frontend/idp/src/assets/icons/svg/github.svg diff --git a/idp/frontend/src/assets/icons/svg/guide.svg b/idp/frontend/idp/src/assets/icons/svg/guide.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/guide.svg rename to idp/frontend/idp/src/assets/icons/svg/guide.svg diff --git a/idp/frontend/src/assets/icons/svg/icon.svg b/idp/frontend/idp/src/assets/icons/svg/icon.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/icon.svg rename to idp/frontend/idp/src/assets/icons/svg/icon.svg diff --git a/idp/frontend/src/assets/icons/svg/input.svg b/idp/frontend/idp/src/assets/icons/svg/input.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/input.svg rename to idp/frontend/idp/src/assets/icons/svg/input.svg diff --git a/idp/frontend/src/assets/icons/svg/international.svg b/idp/frontend/idp/src/assets/icons/svg/international.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/international.svg rename to idp/frontend/idp/src/assets/icons/svg/international.svg diff --git a/idp/frontend/src/assets/icons/svg/job.svg b/idp/frontend/idp/src/assets/icons/svg/job.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/job.svg rename to idp/frontend/idp/src/assets/icons/svg/job.svg diff --git a/idp/frontend/src/assets/icons/svg/language.svg b/idp/frontend/idp/src/assets/icons/svg/language.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/language.svg rename to idp/frontend/idp/src/assets/icons/svg/language.svg diff --git a/idp/frontend/src/assets/icons/svg/link.svg b/idp/frontend/idp/src/assets/icons/svg/link.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/link.svg rename to idp/frontend/idp/src/assets/icons/svg/link.svg diff --git a/idp/frontend/src/assets/icons/svg/list.svg b/idp/frontend/idp/src/assets/icons/svg/list.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/list.svg rename to idp/frontend/idp/src/assets/icons/svg/list.svg diff --git a/idp/frontend/src/assets/icons/svg/lock.svg b/idp/frontend/idp/src/assets/icons/svg/lock.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/lock.svg rename to idp/frontend/idp/src/assets/icons/svg/lock.svg diff --git a/idp/frontend/src/assets/icons/svg/log.svg b/idp/frontend/idp/src/assets/icons/svg/log.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/log.svg rename to idp/frontend/idp/src/assets/icons/svg/log.svg diff --git a/idp/frontend/src/assets/icons/svg/logininfor.svg b/idp/frontend/idp/src/assets/icons/svg/logininfor.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/logininfor.svg rename to idp/frontend/idp/src/assets/icons/svg/logininfor.svg diff --git a/idp/frontend/src/assets/icons/svg/message.svg b/idp/frontend/idp/src/assets/icons/svg/message.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/message.svg rename to idp/frontend/idp/src/assets/icons/svg/message.svg diff --git a/idp/frontend/src/assets/icons/svg/money.svg b/idp/frontend/idp/src/assets/icons/svg/money.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/money.svg rename to idp/frontend/idp/src/assets/icons/svg/money.svg diff --git a/idp/frontend/src/assets/icons/svg/monitor.svg b/idp/frontend/idp/src/assets/icons/svg/monitor.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/monitor.svg rename to idp/frontend/idp/src/assets/icons/svg/monitor.svg diff --git a/idp/frontend/src/assets/icons/svg/moon.svg b/idp/frontend/idp/src/assets/icons/svg/moon.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/moon.svg rename to idp/frontend/idp/src/assets/icons/svg/moon.svg diff --git a/idp/frontend/src/assets/icons/svg/more-up.svg b/idp/frontend/idp/src/assets/icons/svg/more-up.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/more-up.svg rename to idp/frontend/idp/src/assets/icons/svg/more-up.svg diff --git a/idp/frontend/src/assets/icons/svg/nested.svg b/idp/frontend/idp/src/assets/icons/svg/nested.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/nested.svg rename to idp/frontend/idp/src/assets/icons/svg/nested.svg diff --git a/idp/frontend/src/assets/icons/svg/number.svg b/idp/frontend/idp/src/assets/icons/svg/number.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/number.svg rename to idp/frontend/idp/src/assets/icons/svg/number.svg diff --git a/idp/frontend/src/assets/icons/svg/online.svg b/idp/frontend/idp/src/assets/icons/svg/online.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/online.svg rename to idp/frontend/idp/src/assets/icons/svg/online.svg diff --git a/idp/frontend/src/assets/icons/svg/password.svg b/idp/frontend/idp/src/assets/icons/svg/password.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/password.svg rename to idp/frontend/idp/src/assets/icons/svg/password.svg diff --git a/idp/frontend/src/assets/icons/svg/pdf.svg b/idp/frontend/idp/src/assets/icons/svg/pdf.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/pdf.svg rename to idp/frontend/idp/src/assets/icons/svg/pdf.svg diff --git a/idp/frontend/src/assets/icons/svg/people.svg b/idp/frontend/idp/src/assets/icons/svg/people.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/people.svg rename to idp/frontend/idp/src/assets/icons/svg/people.svg diff --git a/idp/frontend/src/assets/icons/svg/peoples.svg b/idp/frontend/idp/src/assets/icons/svg/peoples.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/peoples.svg rename to idp/frontend/idp/src/assets/icons/svg/peoples.svg diff --git a/idp/frontend/src/assets/icons/svg/phone.svg b/idp/frontend/idp/src/assets/icons/svg/phone.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/phone.svg rename to idp/frontend/idp/src/assets/icons/svg/phone.svg diff --git a/idp/frontend/src/assets/icons/svg/post.svg b/idp/frontend/idp/src/assets/icons/svg/post.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/post.svg rename to idp/frontend/idp/src/assets/icons/svg/post.svg diff --git a/idp/frontend/src/assets/icons/svg/qq.svg b/idp/frontend/idp/src/assets/icons/svg/qq.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/qq.svg rename to idp/frontend/idp/src/assets/icons/svg/qq.svg diff --git a/idp/frontend/src/assets/icons/svg/question.svg b/idp/frontend/idp/src/assets/icons/svg/question.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/question.svg rename to idp/frontend/idp/src/assets/icons/svg/question.svg diff --git a/idp/frontend/src/assets/icons/svg/radio.svg b/idp/frontend/idp/src/assets/icons/svg/radio.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/radio.svg rename to idp/frontend/idp/src/assets/icons/svg/radio.svg diff --git a/idp/frontend/src/assets/icons/svg/rate.svg b/idp/frontend/idp/src/assets/icons/svg/rate.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/rate.svg rename to idp/frontend/idp/src/assets/icons/svg/rate.svg diff --git a/idp/frontend/src/assets/icons/svg/redis-list.svg b/idp/frontend/idp/src/assets/icons/svg/redis-list.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/redis-list.svg rename to idp/frontend/idp/src/assets/icons/svg/redis-list.svg diff --git a/idp/frontend/src/assets/icons/svg/redis.svg b/idp/frontend/idp/src/assets/icons/svg/redis.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/redis.svg rename to idp/frontend/idp/src/assets/icons/svg/redis.svg diff --git a/idp/frontend/src/assets/icons/svg/row.svg b/idp/frontend/idp/src/assets/icons/svg/row.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/row.svg rename to idp/frontend/idp/src/assets/icons/svg/row.svg diff --git a/idp/frontend/src/assets/icons/svg/search.svg b/idp/frontend/idp/src/assets/icons/svg/search.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/search.svg rename to idp/frontend/idp/src/assets/icons/svg/search.svg diff --git a/idp/frontend/src/assets/icons/svg/select.svg b/idp/frontend/idp/src/assets/icons/svg/select.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/select.svg rename to idp/frontend/idp/src/assets/icons/svg/select.svg diff --git a/idp/frontend/src/assets/icons/svg/server.svg b/idp/frontend/idp/src/assets/icons/svg/server.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/server.svg rename to idp/frontend/idp/src/assets/icons/svg/server.svg diff --git a/idp/frontend/src/assets/icons/svg/shopping.svg b/idp/frontend/idp/src/assets/icons/svg/shopping.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/shopping.svg rename to idp/frontend/idp/src/assets/icons/svg/shopping.svg diff --git a/idp/frontend/src/assets/icons/svg/size.svg b/idp/frontend/idp/src/assets/icons/svg/size.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/size.svg rename to idp/frontend/idp/src/assets/icons/svg/size.svg diff --git a/idp/frontend/src/assets/icons/svg/skill.svg b/idp/frontend/idp/src/assets/icons/svg/skill.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/skill.svg rename to idp/frontend/idp/src/assets/icons/svg/skill.svg diff --git a/idp/frontend/src/assets/icons/svg/slider.svg b/idp/frontend/idp/src/assets/icons/svg/slider.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/slider.svg rename to idp/frontend/idp/src/assets/icons/svg/slider.svg diff --git a/idp/frontend/src/assets/icons/svg/star.svg b/idp/frontend/idp/src/assets/icons/svg/star.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/star.svg rename to idp/frontend/idp/src/assets/icons/svg/star.svg diff --git a/idp/frontend/src/assets/icons/svg/sunny.svg b/idp/frontend/idp/src/assets/icons/svg/sunny.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/sunny.svg rename to idp/frontend/idp/src/assets/icons/svg/sunny.svg diff --git a/idp/frontend/src/assets/icons/svg/swagger.svg b/idp/frontend/idp/src/assets/icons/svg/swagger.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/swagger.svg rename to idp/frontend/idp/src/assets/icons/svg/swagger.svg diff --git a/idp/frontend/src/assets/icons/svg/switch.svg b/idp/frontend/idp/src/assets/icons/svg/switch.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/switch.svg rename to idp/frontend/idp/src/assets/icons/svg/switch.svg diff --git a/idp/frontend/src/assets/icons/svg/system.svg b/idp/frontend/idp/src/assets/icons/svg/system.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/system.svg rename to idp/frontend/idp/src/assets/icons/svg/system.svg diff --git a/idp/frontend/src/assets/icons/svg/tab.svg b/idp/frontend/idp/src/assets/icons/svg/tab.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/tab.svg rename to idp/frontend/idp/src/assets/icons/svg/tab.svg diff --git a/idp/frontend/src/assets/icons/svg/table.svg b/idp/frontend/idp/src/assets/icons/svg/table.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/table.svg rename to idp/frontend/idp/src/assets/icons/svg/table.svg diff --git a/idp/frontend/src/assets/icons/svg/textarea.svg b/idp/frontend/idp/src/assets/icons/svg/textarea.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/textarea.svg rename to idp/frontend/idp/src/assets/icons/svg/textarea.svg diff --git a/idp/frontend/src/assets/icons/svg/theme.svg b/idp/frontend/idp/src/assets/icons/svg/theme.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/theme.svg rename to idp/frontend/idp/src/assets/icons/svg/theme.svg diff --git a/idp/frontend/src/assets/icons/svg/time-range.svg b/idp/frontend/idp/src/assets/icons/svg/time-range.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/time-range.svg rename to idp/frontend/idp/src/assets/icons/svg/time-range.svg diff --git a/idp/frontend/src/assets/icons/svg/time.svg b/idp/frontend/idp/src/assets/icons/svg/time.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/time.svg rename to idp/frontend/idp/src/assets/icons/svg/time.svg diff --git a/idp/frontend/src/assets/icons/svg/tool.svg b/idp/frontend/idp/src/assets/icons/svg/tool.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/tool.svg rename to idp/frontend/idp/src/assets/icons/svg/tool.svg diff --git a/idp/frontend/src/assets/icons/svg/tree-table.svg b/idp/frontend/idp/src/assets/icons/svg/tree-table.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/tree-table.svg rename to idp/frontend/idp/src/assets/icons/svg/tree-table.svg diff --git a/idp/frontend/src/assets/icons/svg/tree.svg b/idp/frontend/idp/src/assets/icons/svg/tree.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/tree.svg rename to idp/frontend/idp/src/assets/icons/svg/tree.svg diff --git a/idp/frontend/src/assets/icons/svg/upload.svg b/idp/frontend/idp/src/assets/icons/svg/upload.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/upload.svg rename to idp/frontend/idp/src/assets/icons/svg/upload.svg diff --git a/idp/frontend/src/assets/icons/svg/user.svg b/idp/frontend/idp/src/assets/icons/svg/user.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/user.svg rename to idp/frontend/idp/src/assets/icons/svg/user.svg diff --git a/idp/frontend/src/assets/icons/svg/validCode.svg b/idp/frontend/idp/src/assets/icons/svg/validCode.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/validCode.svg rename to idp/frontend/idp/src/assets/icons/svg/validCode.svg diff --git a/idp/frontend/src/assets/icons/svg/wechat.svg b/idp/frontend/idp/src/assets/icons/svg/wechat.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/wechat.svg rename to idp/frontend/idp/src/assets/icons/svg/wechat.svg diff --git a/idp/frontend/src/assets/icons/svg/zip.svg b/idp/frontend/idp/src/assets/icons/svg/zip.svg similarity index 100% rename from idp/frontend/src/assets/icons/svg/zip.svg rename to idp/frontend/idp/src/assets/icons/svg/zip.svg diff --git a/idp/frontend/src/assets/images/login.png b/idp/frontend/idp/src/assets/images/login.png similarity index 100% rename from idp/frontend/src/assets/images/login.png rename to idp/frontend/idp/src/assets/images/login.png diff --git a/idp/frontend/src/assets/styles/btn.scss b/idp/frontend/idp/src/assets/styles/btn.scss similarity index 100% rename from idp/frontend/src/assets/styles/btn.scss rename to idp/frontend/idp/src/assets/styles/btn.scss diff --git a/idp/frontend/src/assets/styles/element-ui.scss b/idp/frontend/idp/src/assets/styles/element-ui.scss similarity index 100% rename from idp/frontend/src/assets/styles/element-ui.scss rename to idp/frontend/idp/src/assets/styles/element-ui.scss diff --git a/idp/frontend/src/assets/styles/idp.scss b/idp/frontend/idp/src/assets/styles/idp.scss similarity index 100% rename from idp/frontend/src/assets/styles/idp.scss rename to idp/frontend/idp/src/assets/styles/idp.scss diff --git a/idp/frontend/src/assets/styles/index.scss b/idp/frontend/idp/src/assets/styles/index.scss similarity index 100% rename from idp/frontend/src/assets/styles/index.scss rename to idp/frontend/idp/src/assets/styles/index.scss diff --git a/idp/frontend/src/assets/styles/mixin.scss b/idp/frontend/idp/src/assets/styles/mixin.scss similarity index 100% rename from idp/frontend/src/assets/styles/mixin.scss rename to idp/frontend/idp/src/assets/styles/mixin.scss diff --git a/idp/frontend/src/assets/styles/sidebar.scss b/idp/frontend/idp/src/assets/styles/sidebar.scss similarity index 100% rename from idp/frontend/src/assets/styles/sidebar.scss rename to idp/frontend/idp/src/assets/styles/sidebar.scss diff --git a/idp/frontend/src/assets/styles/transition.scss b/idp/frontend/idp/src/assets/styles/transition.scss similarity index 100% rename from idp/frontend/src/assets/styles/transition.scss rename to idp/frontend/idp/src/assets/styles/transition.scss diff --git a/idp/frontend/src/assets/styles/variables.module.scss b/idp/frontend/idp/src/assets/styles/variables.module.scss similarity index 100% rename from idp/frontend/src/assets/styles/variables.module.scss rename to idp/frontend/idp/src/assets/styles/variables.module.scss diff --git a/idp/frontend/src/components/SvgIcon/index.ts b/idp/frontend/idp/src/components/SvgIcon/index.ts similarity index 100% rename from idp/frontend/src/components/SvgIcon/index.ts rename to idp/frontend/idp/src/components/SvgIcon/index.ts diff --git a/idp/frontend/src/components/SvgIcon/index.vue b/idp/frontend/idp/src/components/SvgIcon/index.vue similarity index 100% rename from idp/frontend/src/components/SvgIcon/index.vue rename to idp/frontend/idp/src/components/SvgIcon/index.vue diff --git a/idp/frontend/src/components/SvgIcon/svgicon.ts b/idp/frontend/idp/src/components/SvgIcon/svgicon.ts similarity index 100% rename from idp/frontend/src/components/SvgIcon/svgicon.ts rename to idp/frontend/idp/src/components/SvgIcon/svgicon.ts diff --git a/idp/frontend/src/main.ts b/idp/frontend/idp/src/main.ts similarity index 100% rename from idp/frontend/src/main.ts rename to idp/frontend/idp/src/main.ts diff --git a/idp/frontend/src/router/index.ts b/idp/frontend/idp/src/router/index.ts similarity index 100% rename from idp/frontend/src/router/index.ts rename to idp/frontend/idp/src/router/index.ts diff --git a/idp/frontend/src/settings.ts b/idp/frontend/idp/src/settings.ts similarity index 100% rename from idp/frontend/src/settings.ts rename to idp/frontend/idp/src/settings.ts diff --git a/idp/frontend/src/stores/auth.ts b/idp/frontend/idp/src/stores/auth.ts similarity index 100% rename from idp/frontend/src/stores/auth.ts rename to idp/frontend/idp/src/stores/auth.ts diff --git a/idp/frontend/src/stores/index.ts b/idp/frontend/idp/src/stores/index.ts similarity index 100% rename from idp/frontend/src/stores/index.ts rename to idp/frontend/idp/src/stores/index.ts diff --git a/idp/frontend/src/stores/user.ts b/idp/frontend/idp/src/stores/user.ts similarity index 100% rename from idp/frontend/src/stores/user.ts rename to idp/frontend/idp/src/stores/user.ts diff --git a/idp/frontend/src/types/crypto-js.d.ts b/idp/frontend/idp/src/types/crypto-js.d.ts similarity index 100% rename from idp/frontend/src/types/crypto-js.d.ts rename to idp/frontend/idp/src/types/crypto-js.d.ts diff --git a/idp/frontend/src/types/index.ts b/idp/frontend/idp/src/types/index.ts similarity index 100% rename from idp/frontend/src/types/index.ts rename to idp/frontend/idp/src/types/index.ts diff --git a/idp/frontend/src/utils/auth.ts b/idp/frontend/idp/src/utils/auth.ts similarity index 100% rename from idp/frontend/src/utils/auth.ts rename to idp/frontend/idp/src/utils/auth.ts diff --git a/idp/frontend/src/utils/cache.ts b/idp/frontend/idp/src/utils/cache.ts similarity index 100% rename from idp/frontend/src/utils/cache.ts rename to idp/frontend/idp/src/utils/cache.ts diff --git a/idp/frontend/src/utils/encryptor.ts b/idp/frontend/idp/src/utils/encryptor.ts similarity index 100% rename from idp/frontend/src/utils/encryptor.ts rename to idp/frontend/idp/src/utils/encryptor.ts diff --git a/idp/frontend/src/utils/errorCode.ts b/idp/frontend/idp/src/utils/errorCode.ts similarity index 100% rename from idp/frontend/src/utils/errorCode.ts rename to idp/frontend/idp/src/utils/errorCode.ts diff --git a/idp/frontend/src/utils/jsencrypt.ts b/idp/frontend/idp/src/utils/jsencrypt.ts similarity index 100% rename from idp/frontend/src/utils/jsencrypt.ts rename to idp/frontend/idp/src/utils/jsencrypt.ts diff --git a/idp/frontend/src/utils/request.ts b/idp/frontend/idp/src/utils/request.ts similarity index 100% rename from idp/frontend/src/utils/request.ts rename to idp/frontend/idp/src/utils/request.ts diff --git a/idp/frontend/src/utils/storage.ts b/idp/frontend/idp/src/utils/storage.ts similarity index 100% rename from idp/frontend/src/utils/storage.ts rename to idp/frontend/idp/src/utils/storage.ts diff --git a/idp/frontend/src/utils/validate.ts b/idp/frontend/idp/src/utils/validate.ts similarity index 100% rename from idp/frontend/src/utils/validate.ts rename to idp/frontend/idp/src/utils/validate.ts diff --git a/idp/frontend/src/views/LoginPage.vue b/idp/frontend/idp/src/views/LoginPage.vue similarity index 100% rename from idp/frontend/src/views/LoginPage.vue rename to idp/frontend/idp/src/views/LoginPage.vue diff --git a/idp/frontend/src/views/login/PasswordLogin.vue b/idp/frontend/idp/src/views/login/PasswordLogin.vue similarity index 100% rename from idp/frontend/src/views/login/PasswordLogin.vue rename to idp/frontend/idp/src/views/login/PasswordLogin.vue diff --git a/idp/frontend/src/views/login/SmsLogin.vue b/idp/frontend/idp/src/views/login/SmsLogin.vue similarity index 100% rename from idp/frontend/src/views/login/SmsLogin.vue rename to idp/frontend/idp/src/views/login/SmsLogin.vue diff --git a/idp/frontend/src/views/login/Sso.vue b/idp/frontend/idp/src/views/login/Sso.vue similarity index 90% rename from idp/frontend/src/views/login/Sso.vue rename to idp/frontend/idp/src/views/login/Sso.vue index 7be72d6..8ef10cd 100644 --- a/idp/frontend/src/views/login/Sso.vue +++ b/idp/frontend/idp/src/views/login/Sso.vue @@ -1,14 +1,6 @@ - - + diff --git a/idp/frontend/src/views/login/ThirdPartyLogin.vue b/idp/frontend/idp/src/views/login/ThirdPartyLogin.vue similarity index 100% rename from idp/frontend/src/views/login/ThirdPartyLogin.vue rename to idp/frontend/idp/src/views/login/ThirdPartyLogin.vue diff --git a/idp/frontend/src/vite-env.d.ts b/idp/frontend/idp/src/vite-env.d.ts similarity index 100% rename from idp/frontend/src/vite-env.d.ts rename to idp/frontend/idp/src/vite-env.d.ts diff --git a/idp/frontend/tsconfig.json b/idp/frontend/idp/tsconfig.json similarity index 100% rename from idp/frontend/tsconfig.json rename to idp/frontend/idp/tsconfig.json diff --git a/idp/frontend/tsconfig.node.json b/idp/frontend/idp/tsconfig.node.json similarity index 100% rename from idp/frontend/tsconfig.node.json rename to idp/frontend/idp/tsconfig.node.json diff --git a/idp/frontend/vite-env.d.ts b/idp/frontend/idp/vite-env.d.ts similarity index 100% rename from idp/frontend/vite-env.d.ts rename to idp/frontend/idp/vite-env.d.ts diff --git a/idp/frontend/vite.config.ts b/idp/frontend/idp/vite.config.ts similarity index 100% rename from idp/frontend/vite.config.ts rename to idp/frontend/idp/vite.config.ts diff --git a/idp/frontend/vite/plugins/auto-import.ts b/idp/frontend/idp/vite/plugins/auto-import.ts similarity index 100% rename from idp/frontend/vite/plugins/auto-import.ts rename to idp/frontend/idp/vite/plugins/auto-import.ts diff --git a/idp/frontend/vite/plugins/compression.ts b/idp/frontend/idp/vite/plugins/compression.ts similarity index 100% rename from idp/frontend/vite/plugins/compression.ts rename to idp/frontend/idp/vite/plugins/compression.ts diff --git a/idp/frontend/vite/plugins/index.ts b/idp/frontend/idp/vite/plugins/index.ts similarity index 100% rename from idp/frontend/vite/plugins/index.ts rename to idp/frontend/idp/vite/plugins/index.ts diff --git a/idp/frontend/vite/plugins/setup-extend.ts b/idp/frontend/idp/vite/plugins/setup-extend.ts similarity index 100% rename from idp/frontend/vite/plugins/setup-extend.ts rename to idp/frontend/idp/vite/plugins/setup-extend.ts diff --git a/idp/frontend/vite/plugins/svg-icon.ts b/idp/frontend/idp/vite/plugins/svg-icon.ts similarity index 100% rename from idp/frontend/vite/plugins/svg-icon.ts rename to idp/frontend/idp/vite/plugins/svg-icon.ts diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..843a6d4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + org.lingniu + lingniu-platform + 1.0-SNAPSHOT + + pom + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/portal/backend/portal/.gitignore b/portal/backend/portal/.gitignore new file mode 100644 index 0000000..ed8368a --- /dev/null +++ b/portal/backend/portal/.gitignore @@ -0,0 +1,47 @@ +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### JRebel ### +rebel.xml + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml diff --git a/portal/backend/README.md b/portal/backend/portal/README.md similarity index 100% rename from portal/backend/README.md rename to portal/backend/portal/README.md diff --git a/portal/backend/pom.xml b/portal/backend/portal/pom.xml similarity index 100% rename from portal/backend/pom.xml rename to portal/backend/portal/pom.xml diff --git a/portal/backend/portal-admin/pom.xml b/portal/backend/portal/portal-admin/pom.xml similarity index 100% rename from portal/backend/portal-admin/pom.xml rename to portal/backend/portal/portal-admin/pom.xml diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java similarity index 100% rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java diff --git a/portal/backend/portal-admin/src/main/resources/META-INF/spring-devtools.properties b/portal/backend/portal/portal-admin/src/main/resources/META-INF/spring-devtools.properties similarity index 100% rename from portal/backend/portal-admin/src/main/resources/META-INF/spring-devtools.properties rename to portal/backend/portal/portal-admin/src/main/resources/META-INF/spring-devtools.properties diff --git a/portal/backend/portal-admin/target/classes/application-local.yml b/portal/backend/portal/portal-admin/src/main/resources/application-local.yml similarity index 79% rename from portal/backend/portal-admin/target/classes/application-local.yml rename to portal/backend/portal/portal-admin/src/main/resources/application-local.yml index 29f5158..09d8f54 100644 --- a/portal/backend/portal-admin/target/classes/application-local.yml +++ b/portal/backend/portal/portal-admin/src/main/resources/application-local.yml @@ -1,9 +1,12 @@ # 数据源配置 spring: datasource: - url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false - username: root - password: Zhang!@# +# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false +# username: root +# password: Zhang!@# +# url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 +# username: lingniu +# password: Lingniu2026! type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: @@ -12,6 +15,9 @@ spring: # url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false # username: root # password: Zhang!@# + url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: lingniu + password: Lingniu2026! # 初始连接数 initialSize: 5 # 最小连接池数量 @@ -59,7 +65,7 @@ spring: oauth2: resourceserver: jwt: - jwk-set-uri: http://localhost:8000/oauth2/jwks + jwk-set-uri: http://localhost:8082/oauth2/jwks client: registration: portal: @@ -82,4 +88,4 @@ spring: token-uri: http://localhost:8000/oauth2/token user-info-uri: http://localhost:8000/userinfo jwk-set-uri: http://localhost:8000/oauth2/jwks - user-name-attribute: sub \ No newline at end of file + user-name-attribute: sub diff --git a/portal/backend/portal-admin/src/main/resources/application-test.yml b/portal/backend/portal/portal-admin/src/main/resources/application-test.yml similarity index 84% rename from portal/backend/portal-admin/src/main/resources/application-test.yml rename to portal/backend/portal/portal-admin/src/main/resources/application-test.yml index c0ac2b3..5856b2f 100644 --- a/portal/backend/portal-admin/src/main/resources/application-test.yml +++ b/portal/backend/portal/portal-admin/src/main/resources/application-test.yml @@ -1,7 +1,7 @@ # 数据源配置 spring: datasource: - url: jdbc:mysql://localhost:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: lingniu password: Lingniu2026! type: com.alibaba.druid.pool.DruidDataSource @@ -59,7 +59,7 @@ spring: oauth2: resourceserver: jwt: - jwk-set-uri: http://localhost:8000/oauth2/jwks + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks client: registration: portal: @@ -77,9 +77,9 @@ spring: provider: idp: - # issuer-uri: http://localhost:8000 + issuer-uri: http://127.0.0.1:8082 authorization-uri: http://106.14.217.120/idp-ui/sso - token-uri: http://localhost:8082/oauth2/token - user-info-uri: http://localhost:8082/userinfo - jwk-set-uri: http://localhost:8082/oauth2/jwks + token-uri: http://127.0.0.1:8082/oauth2/token + user-info-uri: http://127.0.0.1:8082/userinfo + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks user-name-attribute: sub \ No newline at end of file diff --git a/portal/backend/portal-admin/target/classes/application.yml b/portal/backend/portal/portal-admin/src/main/resources/application.yml similarity index 95% rename from portal/backend/portal-admin/target/classes/application.yml rename to portal/backend/portal/portal-admin/src/main/resources/application.yml index 2123cfb..c8bcf87 100644 --- a/portal/backend/portal-admin/target/classes/application.yml +++ b/portal/backend/portal/portal-admin/src/main/resources/application.yml @@ -34,8 +34,7 @@ server: # 日志配置 logging: level: - org.lingniu.portal: debug - org.springframework: warn + root: debug # 用户配置 user: @@ -52,7 +51,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: local + active: test # 文件上传 servlet: multipart: @@ -69,7 +68,7 @@ spring: # redis 配置 redis: # 地址 - host: localhost + host: 127.0.0.1 # 端口,默认为6379 port: 6379 # 数据库索引 @@ -128,7 +127,7 @@ referer: # 防盗链开关 enabled: false # 允许的域名列表 - allowed-domains: localhost,127.0.0.1 + allowed-domains: localhost,127.0.0.1,106.14.217.120 # 防止XSS攻击 xss: diff --git a/portal/backend/portal-admin/src/main/resources/banner.txt b/portal/backend/portal/portal-admin/src/main/resources/banner.txt similarity index 100% rename from portal/backend/portal-admin/src/main/resources/banner.txt rename to portal/backend/portal/portal-admin/src/main/resources/banner.txt diff --git a/portal/backend/portal-admin/src/main/resources/i18n/messages.properties b/portal/backend/portal/portal-admin/src/main/resources/i18n/messages.properties similarity index 100% rename from portal/backend/portal-admin/src/main/resources/i18n/messages.properties rename to portal/backend/portal/portal-admin/src/main/resources/i18n/messages.properties diff --git a/portal/backend/portal-admin/target/classes/logback.xml b/portal/backend/portal/portal-admin/src/main/resources/logback.xml similarity index 99% rename from portal/backend/portal-admin/target/classes/logback.xml rename to portal/backend/portal/portal-admin/src/main/resources/logback.xml index 648cfc2..5c2b3bd 100644 --- a/portal/backend/portal-admin/target/classes/logback.xml +++ b/portal/backend/portal/portal-admin/src/main/resources/logback.xml @@ -76,7 +76,7 @@ - + diff --git a/portal/backend/portal-admin/src/main/resources/mybatis/mybatis-config.xml b/portal/backend/portal/portal-admin/src/main/resources/mybatis/mybatis-config.xml similarity index 100% rename from portal/backend/portal-admin/src/main/resources/mybatis/mybatis-config.xml rename to portal/backend/portal/portal-admin/src/main/resources/mybatis/mybatis-config.xml diff --git a/portal/backend/portal-admin/target/classes/META-INF/spring-devtools.properties b/portal/backend/portal/portal-admin/target/classes/META-INF/spring-devtools.properties similarity index 100% rename from portal/backend/portal-admin/target/classes/META-INF/spring-devtools.properties rename to portal/backend/portal/portal-admin/target/classes/META-INF/spring-devtools.properties diff --git a/portal/backend/portal-admin/src/main/resources/application-local.yml b/portal/backend/portal/portal-admin/target/classes/application-local.yml similarity index 79% rename from portal/backend/portal-admin/src/main/resources/application-local.yml rename to portal/backend/portal/portal-admin/target/classes/application-local.yml index 29f5158..09d8f54 100644 --- a/portal/backend/portal-admin/src/main/resources/application-local.yml +++ b/portal/backend/portal/portal-admin/target/classes/application-local.yml @@ -1,9 +1,12 @@ # 数据源配置 spring: datasource: - url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false - username: root - password: Zhang!@# +# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false +# username: root +# password: Zhang!@# +# url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 +# username: lingniu +# password: Lingniu2026! type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: @@ -12,6 +15,9 @@ spring: # url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false # username: root # password: Zhang!@# + url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: lingniu + password: Lingniu2026! # 初始连接数 initialSize: 5 # 最小连接池数量 @@ -59,7 +65,7 @@ spring: oauth2: resourceserver: jwt: - jwk-set-uri: http://localhost:8000/oauth2/jwks + jwk-set-uri: http://localhost:8082/oauth2/jwks client: registration: portal: @@ -82,4 +88,4 @@ spring: token-uri: http://localhost:8000/oauth2/token user-info-uri: http://localhost:8000/userinfo jwk-set-uri: http://localhost:8000/oauth2/jwks - user-name-attribute: sub \ No newline at end of file + user-name-attribute: sub diff --git a/portal/backend/portal-admin/target/classes/application-test.yml b/portal/backend/portal/portal-admin/target/classes/application-test.yml similarity index 84% rename from portal/backend/portal-admin/target/classes/application-test.yml rename to portal/backend/portal/portal-admin/target/classes/application-test.yml index c0ac2b3..5856b2f 100644 --- a/portal/backend/portal-admin/target/classes/application-test.yml +++ b/portal/backend/portal/portal-admin/target/classes/application-test.yml @@ -1,7 +1,7 @@ # 数据源配置 spring: datasource: - url: jdbc:mysql://localhost:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: lingniu password: Lingniu2026! type: com.alibaba.druid.pool.DruidDataSource @@ -59,7 +59,7 @@ spring: oauth2: resourceserver: jwt: - jwk-set-uri: http://localhost:8000/oauth2/jwks + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks client: registration: portal: @@ -77,9 +77,9 @@ spring: provider: idp: - # issuer-uri: http://localhost:8000 + issuer-uri: http://127.0.0.1:8082 authorization-uri: http://106.14.217.120/idp-ui/sso - token-uri: http://localhost:8082/oauth2/token - user-info-uri: http://localhost:8082/userinfo - jwk-set-uri: http://localhost:8082/oauth2/jwks + token-uri: http://127.0.0.1:8082/oauth2/token + user-info-uri: http://127.0.0.1:8082/userinfo + jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks user-name-attribute: sub \ No newline at end of file diff --git a/portal/backend/portal-admin/src/main/resources/application.yml b/portal/backend/portal/portal-admin/target/classes/application.yml similarity index 96% rename from portal/backend/portal-admin/src/main/resources/application.yml rename to portal/backend/portal/portal-admin/target/classes/application.yml index 2123cfb..ddc290e 100644 --- a/portal/backend/portal-admin/src/main/resources/application.yml +++ b/portal/backend/portal/portal-admin/target/classes/application.yml @@ -34,8 +34,7 @@ server: # 日志配置 logging: level: - org.lingniu.portal: debug - org.springframework: warn + root: debug # 用户配置 user: @@ -52,7 +51,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: local + active: test # 文件上传 servlet: multipart: @@ -69,7 +68,7 @@ spring: # redis 配置 redis: # 地址 - host: localhost + host: 127.0.0.1 # 端口,默认为6379 port: 6379 # 数据库索引 diff --git a/portal/backend/portal-admin/target/classes/banner.txt b/portal/backend/portal/portal-admin/target/classes/banner.txt similarity index 100% rename from portal/backend/portal-admin/target/classes/banner.txt rename to portal/backend/portal/portal-admin/target/classes/banner.txt diff --git a/portal/backend/portal-admin/target/classes/i18n/messages.properties b/portal/backend/portal/portal-admin/target/classes/i18n/messages.properties similarity index 100% rename from portal/backend/portal-admin/target/classes/i18n/messages.properties rename to portal/backend/portal/portal-admin/target/classes/i18n/messages.properties diff --git a/portal/backend/portal-admin/src/main/resources/logback.xml b/portal/backend/portal/portal-admin/target/classes/logback.xml similarity index 99% rename from portal/backend/portal-admin/src/main/resources/logback.xml rename to portal/backend/portal/portal-admin/target/classes/logback.xml index 648cfc2..5c2b3bd 100644 --- a/portal/backend/portal-admin/src/main/resources/logback.xml +++ b/portal/backend/portal/portal-admin/target/classes/logback.xml @@ -76,7 +76,7 @@ - + diff --git a/portal/backend/portal-admin/target/classes/mybatis/mybatis-config.xml b/portal/backend/portal/portal-admin/target/classes/mybatis/mybatis-config.xml similarity index 100% rename from portal/backend/portal-admin/target/classes/mybatis/mybatis-config.xml rename to portal/backend/portal/portal-admin/target/classes/mybatis/mybatis-config.xml diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class similarity index 100% rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class diff --git a/portal/backend/portal-admin/target/maven-archiver/pom.properties b/portal/backend/portal/portal-admin/target/maven-archiver/pom.properties similarity index 72% rename from portal/backend/portal-admin/target/maven-archiver/pom.properties rename to portal/backend/portal/portal-admin/target/maven-archiver/pom.properties index 92e76b0..e845f45 100644 --- a/portal/backend/portal-admin/target/maven-archiver/pom.properties +++ b/portal/backend/portal/portal-admin/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Tue Feb 10 15:14:17 CST 2026 +#Tue Feb 10 18:48:41 CST 2026 groupId=org.lingniu artifactId=portal-admin version=1.0.0 diff --git a/portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst similarity index 100% rename from portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst rename to portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst diff --git a/portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst similarity index 100% rename from portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst rename to portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/portal/backend/portal-admin/target/portal-admin.jar b/portal/backend/portal/portal-admin/target/portal-admin.jar similarity index 99% rename from portal/backend/portal-admin/target/portal-admin.jar rename to portal/backend/portal/portal-admin/target/portal-admin.jar index cd65807d118de8b83502b86df5389cd50e457eb5..a3b0b0519a332d66df0dcd0aa6440f902e5793cf 100644 GIT binary patch delta 27335 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 P_AyoKAaCf9LKXfW%RgIp delta 27154 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 diff --git a/portal/backend/portal-admin/target/portal-admin.jar.original b/portal/backend/portal/portal-admin/target/portal-admin.jar.original similarity index 80% rename from portal/backend/portal-admin/target/portal-admin.jar.original rename to portal/backend/portal/portal-admin/target/portal-admin.jar.original index fe23119e6dde1e001c0dc56d633ec39077329d76..02a2598077e44de59c6b0b947262562f667402c5 100644 GIT binary patch delta 7222 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 B8Pxy) delta 7232 zcmZu$bzD?U+g_Gf8l+QTS-KXGmhMJM=}@}6gass}S&)_vK|n-WLApyCq(Q)-L;Bn0 zd7t-te7^7eajrA>TyxERX6AR#ocp}0Lp`iT#nnkQ!E}Z=^}BND`#DCg~WS5~&jNR0-37%^ogQR0K((psM4U^7V1V zm=@a|dQ0mIw$BMAdXXj56jqe4E;COe>w?9^bVa#Wbv@ZO#%~%`-2y2WC3q!pl(Uz8 zlp|tOs_K^J{q_0yB8RTKpG({9T>C`q6XnWU*$^xG5aGIvcmkNv#`}ynY{Ux2Guk>= zI65(MYUPX`+3xu#r>}p;6tNNaU48!MI|LRL*cWMcd@e($h`R%&sE5_VdHfs&?03oSh)~)5E=r{KsM_Y5yi%ibTG;EL<=ORWo!g?cwQYEUq@m*V` zr8@hQ%QEZy+_)a>wG55>Os4lOOxkEsfNcSY37;LE%m`d@Tw zS14)k-m%v43GA6O5Pooda_`CGR#RKF;wY~rdtC%?z@LLF26W_S90Etcle^-%V!H@u|U_-?|+`@O(R;z`8MWJ za>pb_`I0%i%PsZZls}ZT^a4`F8;*uvl3FLfbzrztoh_EeL-&=(LrIz!&Wx~c`THWfAa{@6Z!@|WGwR&twb%E{UfEt|^(E(ZZN4x8%Y@i8dQYEwcl zv!0mJvW+|f=oK#ug!X3bQK2+bQnb${Vm?17;5i#rvDWc zH5Tu4& zq<9~V^uRo9yr=pX*~xttn&=`m=5QiX>%tm$t*Y(C{|eP#C?r6Ru)_zh=&^ zLl@KYMWeXldZ+qjnaR#BcgZe=h=Fce8`v9hj1HKNNMGqdf*$6~Jq2}IL75N5c=7t! zwGjOEL78^o`_S=B`u^Zf_9iFn0u>WiY$KTy2eYlHr;FBdYEy1n&teWPnw zSOV6BJxW=uxTh)?R~y}xanq{v=vuAKtps$E`(1LH;`r%UH+FQ-M7n(Svw&n-Ur+y^ zhAD;+2ea1S2cMM=GsXGJVE!J*g&d{I%qvurZWml@pG=Rw?GhOIrl%2LZ*~y3EreDU zN2Da}lr!5WGvpoShU2m14nEd};&ftIjAg>4H(x5OR8uNmJcEK}?5H9!dD6-OJ>VWU z)^w7wJqDCPbp8YL@uu6cz
{{ errorMessage }}
正在加载用户信息...
{{ userInfo ? '已登录' : '未登录' }}
{{ formattedToken }}
R1wXwp$jSYAtj+m+{Va~0!qTLP=%m) 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 P_AyoKAaCf9LKXfW%RgIp delta 27154 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 diff --git a/portal/backend/portal-admin/target/portal-admin.jar.original b/portal/backend/portal/portal-admin/target/portal-admin.jar.original similarity index 80% rename from portal/backend/portal-admin/target/portal-admin.jar.original rename to portal/backend/portal/portal-admin/target/portal-admin.jar.original index fe23119e6dde1e001c0dc56d633ec39077329d76..02a2598077e44de59c6b0b947262562f667402c5 100644 GIT binary patch delta 7222 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 B8Pxy) delta 7232 zcmZu$bzD?U+g_Gf8l+QTS-KXGmhMJM=}@}6gass}S&)_vK|n-WLApyCq(Q)-L;Bn0 zd7t-te7^7eajrA>TyxERX6AR#ocp}0Lp`iT#nnkQ!E}Z=^}BND`#DCg~WS5~&jNR0-37%^ogQR0K((psM4U^7V1V zm=@a|dQ0mIw$BMAdXXj56jqe4E;COe>w?9^bVa#Wbv@ZO#%~%`-2y2WC3q!pl(Uz8 zlp|tOs_K^J{q_0yB8RTKpG({9T>C`q6XnWU*$^xG5aGIvcmkNv#`}ynY{Ux2Guk>= zI65(MYUPX`+3xu#r>}p;6tNNaU48!MI|LRL*cWMcd@e($h`R%&sE5_VdHfs&?03oSh)~)5E=r{KsM_Y5yi%ibTG;EL<=ORWo!g?cwQYEUq@m*V` zr8@hQ%QEZy+_)a>wG55>Os4lOOxkEsfNcSY37;LE%m`d@Tw zS14)k-m%v43GA6O5Pooda_`CGR#RKF;wY~rdtC%?z@LLF26W_S90Etcle^-%V!H@u|U_-?|+`@O(R;z`8MWJ za>pb_`I0%i%PsZZls}ZT^a4`F8;*uvl3FLfbzrztoh_EeL-&=(LrIz!&Wx~c`THWfAa{@6Z!@|WGwR&twb%E{UfEt|^(E(ZZN4x8%Y@i8dQYEwcl zv!0mJvW+|f=oK#ug!X3bQK2+bQnb${Vm?17;5i#rvDWc zH5Tu4& zq<9~V^uRo9yr=pX*~xttn&=`m=5QiX>%tm$t*Y(C{|eP#C?r6Ru)_zh=&^ zLl@KYMWeXldZ+qjnaR#BcgZe=h=Fce8`v9hj1HKNNMGqdf*$6~Jq2}IL75N5c=7t! zwGjOEL78^o`_S=B`u^Zf_9iFn0u>WiY$KTy2eYlHr;FBdYEy1n&teWPnw zSOV6BJxW=uxTh)?R~y}xanq{v=vuAKtps$E`(1LH;`r%UH+FQ-M7n(Svw&n-Ur+y^ zhAD;+2ea1S2cMM=GsXGJVE!J*g&d{I%qvurZWml@pG=Rw?GhOIrl%2LZ*~y3EreDU zN2Da}lr!5WGvpoShU2m14nEd};&ftIjAg>4H(x5OR8uNmJcEK}?5H9!dD6-OJ>VWU z)^w7wJqDCPbp8YL@uu6cz
xvn<;)l<)up_&@-JKo-aWd7uCk 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 diff --git a/portal/backend/portal-admin/target/portal-admin.jar.original b/portal/backend/portal/portal-admin/target/portal-admin.jar.original similarity index 80% rename from portal/backend/portal-admin/target/portal-admin.jar.original rename to portal/backend/portal/portal-admin/target/portal-admin.jar.original index fe23119e6dde1e001c0dc56d633ec39077329d76..02a2598077e44de59c6b0b947262562f667402c5 100644 GIT binary patch delta 7222 zcmZ8m1z1!~+g_GXTIp`2qy;3Uq+|&}x>0IjX=#>LLc&G5q@+W-JEcpIk`^SEl7@eG z-}n8#|NYK&opbNp&-2VPGiR=Q_RJhrp(oU!<7vD=$G`y~FVciKJXRn{LY!b4@;T0k ze4elXNfTgHXbeb@Kx0RO6&f!R643;aFoY(B1U%q#BxnH@{wh6zjm_Mn_^0;!0Fne1 zqpDEPnIcR8KjhaFT92uiqF5feRF9pTeKvo2z=sHpYZUf5k? zAs6p;$l9t#&GO?7%{$)g9>hK8Og54k?q)UrF_u{`)9Jjw41wb2^vv&zqpqU1Mz z0XpJU<)(O27(K+YA^UrG_ZLAv2XViIqpNQhlbDcGxtTEJJM2B9v6--0ha!9e99d6g zd#}aDtwJPPHM)4wY3Ol$XG$kK>8qe8s}gd_pE)vF<32q-HcusYSeuolT@2LFWuV!? z4(X)b0DxFl=?i)& z5vY1#mEe%#*ZxVFSdK!!dDIHeu#;FI&0PLxq|z^CdwEQvr+1XGA!M8Jx7@MK7q)jQh)-@;8GRPW^lxXrm~B5QW>yLWuK=~ zgKcK}>2AYT%caRNy~QzxtBf<}DEGm;i7_?b8^YgvQ;j}}msilKpB(PzJT<>Qg$Q1C z&o%$P2<$8%C60vN4;o@m2C`YJr!;~mM@D4lPQF{48DD#U*5PcKYVyqV~Fb-dr@;BocJ z|5&C}5G~NCn<=s8LEH_hh-A&y$HGDKb@gwI`dy#b}BP&ybwM@<|TI zMzTRUpli@dM=lgEdLYm(Jjvyjt47wVf^~q8%4-X1cFy0C%pL_I#@%a)lDx#3L!aY{ z`IFw`)sMH%RwsT?(&l1CFDh7vJ7??xp(=R%nlO@U&O2a274nljAs|HoScXwYkU(Yu z4_3Hcyh(MQ^)*h^9E|!S|Jyd^OBM>kd72Tl<*D8rx z)u@M7{kHcgHCb3|S<-Wv|9LDPYtTA7L|CDXGe>I;ZKxy&`QnnL{>ktw_Do!K3a5x{ zK^cCu8cr1kBrGv7fZnVUGV}!7`V}+VC6>WyT4i(a%ayMHZS9BPbu_#e^CB z@OMjPO6*!-F??UE)7wMhby{Sf57VMCV+)(bNr+}HmrD^pye}(~lqe#PAJ=#!ggDsK zZKrqoL5))HZNY)ToziNNq(Bzb8+3tkal3)ujD$>tUvp`m9IIRQCtZA z7jks%6n!kTJOZbtJesmmYs13N>dRtPnVft@HSL|a%PedrXAB^EXH8fAhP@P(l#9wjs znSDsNT;3@@a73j56riNc5R&x7!L;abf0j<~pkA=*DO`T)V-OJ#^qD0j_cJS_L&WF0 zkXRtJx2ZPslH9u&+}>*fD+mrLk=*j#8uHjQ`a$AhJD>iop$Ru{yP?yhtR~c&qVl5w zI1<<=4Rp2>q}7$`hgu41X(@cDFUw;)*Ucxx3zIVrbh2h3+9wEMW-QHNo+2GeQet6$ z0kwCfiNrr)i5+kj@3W_=dib#yHq|M)B`VXQhoe70f|B4rDYPO;2{uAXaP$yehy4O% zE`JVpCFzOi`?ww-hu#WS3C1pc1&r2!kc>_RRfa(5B*Xff!iju5weGNc@g{cqdgSq# zyjLl3D8%Joq z^~hrlxup;=z`8YQF!8L2nPWds;hhX*`Z8#so9f=>LEgr;t{PAN#hg+SQhi_8N*C9;{w$rbw$-}vwi&vjG&}{xN zoobfZM4d6r4X{`DlbLVAGBSk9pi=$SO9_;xvb~Ppie{m0$%A)KA>BIR4QLYZu0vQ$gJ6rGhKi?RPT| zgJ}v;VbvKDkI z{<6p2%~r-)PPN!8U+4Mc+p6kj4)9Up;=~dCQo3|svf<#ta06l8LaA=(hkG?67#J>S zk&kFio-^=+I#a{$#jShzpEf@&=4H&hNCzGGk&r>%gz4!v)~YFf_Qd<; z)Q4|O#;wy}X;@v#G3za#kKG^RhA!V95eje5X*`4V_GdBrZa;%P)TcZ0s-`k zfrBAYaCus?;>gLK1*9)M9mpBk5Io^hMwcbAPjwz@QeqVwz|~P2ydgz@T@VL7yA2aO z{*k=Qvp$1^>wy!=yO=B@kZ|uTtyDbJy6*P}GjF07l8`n^1;x*7=Nxo(D^9sN$M(9V zCY}FCw@<7=!|VxEov%Ey!NJXV|@^eG_ z`-izFXzzEJ>P3cS$7O8^+)ugg-sQs%S%dlDk8KPi)+ zeVVA`rr0Fb}=@`b69EXN(Lf7Yog(8Ch%E2bO#A{`C*V=5}!drU%};WNGI$Ss;1rJ5kB3ByB+ht`qJ zD7D5L#y`X9!ZO!Lso5^lujYD@YzJf5wX>qxw!HN;`a-$Df_+qg^GmP$DG0X_Ysw$? zb0hH9v*MS8|Blo}ui}*MRDb699W-vwm{li8IQXN=%Rc(eyOYR9r`Oztd{Y$R^FWor z`NKQFztvm5UlltG3joN&0{{pSUjXJ#PWHBz=5Dr*5FRfFdv_f}ttllE|1S}Dv7GcJ z*}{SWHG^u?QokAvA)ju|O~nlYr6f zkQ9h%;+wKV1@7>s3 zS0Y0Lxal6;k(lx++jdH_h>$M(&C78^pKoo76(Avt&D;!CkNl=mKj9v!Jz;7^qwELZ zg_$GFEhu5sZrarRqK~Hi3Ek)uYM+iiG4WQmi`09=YYn6Co^Oi`YY(uK`Wp|wS<9&^ z%OlSH!~6w);dI+*)o5uE8PELy9qMivPLC0Y4;Jf=WldmKBOrVB^~iGA0xZ5ehasL8 zAmN1n@)fn#WmR~XTghgwd9K!D)z0t7GJX@wNhi={q1j{6fdF)tgK>iSGK`uc(_$qR zv^k>3H+6UKhc)5-F4Fu@A%W-%`Bgbp=o7e#33o^2zju4IUjiZ=l&sUBjt+stI&(V- zck4?v9UcC6p!837VeMVLDjM_l`}8O7XV07&LC>^>w%n%gJmVgnxP2vl#pHyF1z+4B?=T;5POv728NS2@bY7; zW%xw$GV+?_3?`6u%ozGUC@TqO+4EKRsH>2U2;x@Mc@LH)VTj&P>*!U=tK@R9Zmz+u zy%>D<^ssKTwS5<4H7np|0#P@6Gqs>V-R0xTz;%bhcPj_>Q7kJhJ-{fzJ==6b>!i zxu-{zXoa5r!?=R%!MfK;NexeUYC_p*S!;ik z>D@@N7<5zelw+MXp4H+I;7H29B^Lj4uFhn>oLP&L$fmy+t~-az)x@X5l$8O|X{MKg z>c#Y-EwBvk$qc`@AZo?e6Yd_f>$V{kv4F2+cvMVD6newldHBtwH0UO4+tgz^r)~T5 zXOrpdD&O4Ke5@q@dt0yyTiWgkF<$P1bWP z9?W=EFW6ljV>V#f7Z>wVChNoxJr8qy&?J(v4MU~z4!6LSyCjKN zhpOaqVVS3LZF?qHBt|X3G-%P?tQ?xvh?!V;*1A*rsdJiDX8{cIzpBv8m5JD(3&z26 z>UXez3df_N6d^6$8cTDv@@1k(sVF=^&%IFoqABzCS)1($S`@?v>T~0b+k)jRA zmC{bRCg+>HVE+OuVWVK!iFC3d)C@<%@XscGEbyEW1GCabsd+`c&?0^JK+4ylct9>w3XZ3e;`13D7Axj{i}C1zCkI#;U3%m z-n%!IT7ct{Q@QT%6$I~`Tg&{R@IgW*RowMZr3_-PtxR2^+~e;lucIc#KfXTI7y4wKNt=@mR1)Jm4U-&`CEA$^dz<*;htT=wx8`i5~>dFz!# z)K8+P%S_B448*7sd;DCNuK38O=&{uxdn-~JbBqEKeI)QriFnbxC^6m%EzIOEhOulE z+sT>|@hjzQslUXkvA%f4^*U{|+*K1vNvKWOteM-_(YbTGryd^aW~A7A3l!|hIaZ#! zC*kXqv@0pT8FLqic%>hO28}0zxa7J<-0}3lE18%6L@wXMYTm#~wRL+NHU9cG2u4|6 zc|l6}k+b7{C(OZ}_!?sg&BZ)b{ih11KQ=nrZzb<*e542q04?pt~s4`Bcy+cQ=Y}lxcEaX-btd7JS zv3pfTMVg2XMeaOpTgdqTMh5^c@c{r_#7bxHXl-F`3Fh&1upibncbrt9xLr`bA`}5% zg!wJzelBzg*0Y^f1{Y2op@F7f@4i?yzxrCG^}a~ys@>+HgIFnTGENkTGsq#ELHf-L z*(+;rwaY?i;IT2ye4%ZVjCox4`pCgm^XT!V-#WC)d$Y(PP*mQCSiEb3Z7>TXHpjBd z4X0}&G@1XxbzAjM7oj$-xL1|Nqm(}29F`gVDYHJ7|BcjQ;iO{QIe0#uJZAfk5W}~} zX42dbjbyuv0g6@Q6|Yx+|zi2f~Ij0ZB5Nsb zz)`Nt6q+CQIrMK0^H{1L6Um45y%S)YwczGt7d;fW`cwGRgD)V$le~DWwB7|kYgQO* zN+#0e(Y5_2bMJ>G)Zxp`uNi-E`Vx3o*v{V%Tz;Fzvy?v^rtx#xVAcWRPKsAxEUYyP z6*wJqwi!(lzLa&1i;J{Y;TQH}X2+SJPbAjrSGmXZNPjK=(oxHZC$$^rs-KwntGPDw z>7hItd9mk~Pvc=$i~on2vdK?hex5Kao--GL!Mc5*?_IecB_#_wXJ6vUXR|uKDXZ6c zyX}61{}yEYP-aj!u%-9>ZmRa}Te9m-EGX8a0ZQa$u($(-alCTm158^#ABn|10Rrb5{b68Bf0Br?hJi87|T?AGl}nm})T zT)<3!*ynLB4rc4dSx%bjJXnt`Wk<%XqALhxo5?L>HeI${_Jr#P}Dn0?8Mh2N{>$4RzuMNhI+B)s_jLh#qBF zDF;xy>JhQYB;l`oc@ctnOKp~Dy^cL!A2hH*cSQQ3n_vdRlDF9+>&1qwhml;kfQ(mr zYh`c^17`4$9(v2{TJWuh=z?U_j&$C#aH`SqwKU{ zeW>`&$W2t-Nc?Heo0ys)Cf1T~tk~Y+Q(meFiq^vvp<4|??I#HIVjK8L`MKr`h1@dUD;_FoQ z>d>`>p`0YTB)SO?Vl2^sBjGAvGjq4820a>5$G}B^sFRuqeU*oE}sR3(+H~|7<@I001P&GmO8l z+`uXr#t1V5(&v9aa{lY%O8`?Gp%p_qF>@)0h$Af8i2JX;{NF+zh@0&5y!6Gv9^zl+R&Gd-vL*OK!;wa|{z0QG5MV>GNVvr#!af?-rmqRi^<204Oj30M36ZMPP2A76a^XiWIg?PyTTXIXhtlV>H0uOn;MD zFh3>=nCV{@2ZUvX1z}-Z<0FLy%;2H2u7;wuzeHqh zLu8fySJoiOzXPygk0k#a;O1*!%z^ltw0-~pDE=!zK>F_hT-fY0Dr5#^Zq5lBV7tP9 zEFKfgNHz_@hN=F|@*|mtlQh5>Z3M#uGoD1XIuOBx8KaotNz}>I0fN!CK{4V}s3R-$ zDH@=$6N)LFVnOvtsHTiG8qp(HM2}?t)j%^Zgrhpj34L&$3Kua2nh>w--`xiJqH2qt zMrEv+rUBN5p_uDwRI3Z`hACBZ9bz|{Ld8su+HCU zfWdhvw&go2dKtk~SD_fLSrh}Br2(q-!oah%$Z?54lze(&&b_o;|D90CV?4x+`F|Jt ze||pz+}%~f;IprQm&h=FnCIMIuNoyD2sdZME&LyMO6LVBp556HS{|63v B8Pxy) delta 7232 zcmZu$bzD?U+g_Gf8l+QTS-KXGmhMJM=}@}6gass}S&)_vK|n-WLApyCq(Q)-L;Bn0 zd7t-te7^7eajrA>TyxERX6AR#ocp}0Lp`iT#nnkQ!E}Z=^}BND`#DCg~WS5~&jNR0-37%^ogQR0K((psM4U^7V1V zm=@a|dQ0mIw$BMAdXXj56jqe4E;COe>w?9^bVa#Wbv@ZO#%~%`-2y2WC3q!pl(Uz8 zlp|tOs_K^J{q_0yB8RTKpG({9T>C`q6XnWU*$^xG5aGIvcmkNv#`}ynY{Ux2Guk>= zI65(MYUPX`+3xu#r>}p;6tNNaU48!MI|LRL*cWMcd@e($h`R%&sE5_VdHfs&?03oSh)~)5E=r{KsM_Y5yi%ibTG;EL<=ORWo!g?cwQYEUq@m*V` zr8@hQ%QEZy+_)a>wG55>Os4lOOxkEsfNcSY37;LE%m`d@Tw zS14)k-m%v43GA6O5Pooda_`CGR#RKF;wY~rdtC%?z@LLF26W_S90Etcle^-%V!H@u|U_-?|+`@O(R;z`8MWJ za>pb_`I0%i%PsZZls}ZT^a4`F8;*uvl3FLfbzrztoh_EeL-&=(LrIz!&Wx~c`THWfAa{@6Z!@|WGwR&twb%E{UfEt|^(E(ZZN4x8%Y@i8dQYEwcl zv!0mJvW+|f=oK#ug!X3bQK2+bQnb${Vm?17;5i#rvDWc zH5Tu4& zq<9~V^uRo9yr=pX*~xttn&=`m=5QiX>%tm$t*Y(C{|eP#C?r6Ru)_zh=&^ zLl@KYMWeXldZ+qjnaR#BcgZe=h=Fce8`v9hj1HKNNMGqdf*$6~Jq2}IL75N5c=7t! zwGjOEL78^o`_S=B`u^Zf_9iFn0u>WiY$KTy2eYlHr;FBdYEy1n&teWPnw zSOV6BJxW=uxTh)?R~y}xanq{v=vuAKtps$E`(1LH;`r%UH+FQ-M7n(Svw&n-Ur+y^ zhAD;+2ea1S2cMM=GsXGJVE!J*g&d{I%qvurZWml@pG=Rw?GhOIrl%2LZ*~y3EreDU zN2Da}lr!5WGvpoShU2m14nEd};&ftIjAg>4H(x5OR8uNmJcEK}?5H9!dD6-OJ>VWU z)^w7wJqDCPbp8YL@uu6cz