From df3601a751994ffc2ac0c02ed429445181a1fd9d Mon Sep 17 00:00:00 2001 From: John Niang Date: Fri, 14 Feb 2020 20:57:41 +0800 Subject: [PATCH] Refactor halo mode (#571) --- .../run/halo/app/config/HaloConfiguration.java | 17 ++++++----------- .../app/config/properties/HaloProperties.java | 9 ++++++--- .../java/run/halo/app/model/enums/Mode.java | 17 +++++++++-------- .../filter/AbstractAuthenticationFilter.java | 8 ++------ .../filter/AdminAuthenticationFilter.java | 6 ++---- .../filter/ApiAuthenticationFilter.java | 6 ++---- .../halo/app/security/filter/ContentFilter.java | 6 ++---- .../halo/app/service/impl/AdminServiceImpl.java | 3 +-- src/main/resources/application-dev.yaml | 9 +++++---- src/main/resources/application-test.yaml | 1 + 10 files changed, 36 insertions(+), 46 deletions(-) diff --git a/src/main/java/run/halo/app/config/HaloConfiguration.java b/src/main/java/run/halo/app/config/HaloConfiguration.java index 5cc5b1bed..b2792d068 100644 --- a/src/main/java/run/halo/app/config/HaloConfiguration.java +++ b/src/main/java/run/halo/app/config/HaloConfiguration.java @@ -3,7 +3,6 @@ package run.halo.app.config; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.client.RestTemplateBuilder; @@ -20,7 +19,6 @@ import run.halo.app.cache.StringCacheStore; import run.halo.app.config.properties.HaloProperties; import run.halo.app.filter.CorsFilter; import run.halo.app.filter.LogFilter; -import run.halo.app.model.enums.Mode; import run.halo.app.security.filter.AdminAuthenticationFilter; import run.halo.app.security.filter.ApiAuthenticationFilter; import run.halo.app.security.filter.ContentFilter; @@ -120,9 +118,8 @@ public class HaloConfiguration { public FilterRegistrationBean contentFilter(HaloProperties haloProperties, OptionService optionService, StringCacheStore cacheStore, - OneTimeTokenService oneTimeTokenService, - @Value("${spring.profiles.active:prod}") String activeProfile) { - ContentFilter contentFilter = new ContentFilter(haloProperties, optionService, cacheStore, oneTimeTokenService, Mode.valueFrom(activeProfile)); + OneTimeTokenService oneTimeTokenService) { + ContentFilter contentFilter = new ContentFilter(haloProperties, optionService, cacheStore, oneTimeTokenService); contentFilter.setFailureHandler(new ContentAuthenticationFailureHandler()); String adminPattern = HaloUtils.ensureBoth(haloProperties.getAdminPath(), "/") + "**"; @@ -148,9 +145,8 @@ public class HaloConfiguration { ObjectMapper objectMapper, OptionService optionService, StringCacheStore cacheStore, - OneTimeTokenService oneTimeTokenService, - @Value("${spring.profiles.active:prod}") String activeProfile) { - ApiAuthenticationFilter apiFilter = new ApiAuthenticationFilter(haloProperties, optionService, cacheStore, oneTimeTokenService, Mode.valueFrom(activeProfile)); + OneTimeTokenService oneTimeTokenService) { + ApiAuthenticationFilter apiFilter = new ApiAuthenticationFilter(haloProperties, optionService, cacheStore, oneTimeTokenService); apiFilter.addExcludeUrlPatterns( "/api/content/*/comments", "/api/content/**/comments/**", @@ -178,10 +174,9 @@ public class HaloConfiguration { HaloProperties haloProperties, ObjectMapper objectMapper, OptionService optionService, - OneTimeTokenService oneTimeTokenService, - @Value("${spring.profiles.active:prod}") String activeProfile) { + OneTimeTokenService oneTimeTokenService) { AdminAuthenticationFilter adminAuthenticationFilter = new AdminAuthenticationFilter(cacheStore, userService, - haloProperties, optionService, oneTimeTokenService, Mode.valueFrom(activeProfile)); + haloProperties, optionService, oneTimeTokenService); DefaultAuthenticationFailureHandler failureHandler = new DefaultAuthenticationFailureHandler(); failureHandler.setProductionEnv(haloProperties.isProductionEnv()); diff --git a/src/main/java/run/halo/app/config/properties/HaloProperties.java b/src/main/java/run/halo/app/config/properties/HaloProperties.java index 59f68d322..5769ff205 100644 --- a/src/main/java/run/halo/app/config/properties/HaloProperties.java +++ b/src/main/java/run/halo/app/config/properties/HaloProperties.java @@ -2,10 +2,8 @@ package run.halo.app.config.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; +import run.halo.app.model.enums.Mode; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; import java.time.Duration; import static run.halo.app.model.support.HaloConst.*; @@ -36,6 +34,11 @@ public class HaloProperties { */ private boolean authEnabled = true; + /** + * Halo startup mode. + */ + private Mode mode = Mode.PRODUCTION; + /** * Admin path. */ diff --git a/src/main/java/run/halo/app/model/enums/Mode.java b/src/main/java/run/halo/app/model/enums/Mode.java index 6dfc2dcab..e34ced4c3 100644 --- a/src/main/java/run/halo/app/model/enums/Mode.java +++ b/src/main/java/run/halo/app/model/enums/Mode.java @@ -2,7 +2,6 @@ package run.halo.app.model.enums; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import org.apache.commons.lang3.StringUtils; import org.springframework.lang.Nullable; /** @@ -24,15 +23,17 @@ public enum Mode { */ @JsonCreator public static Mode valueFrom(@Nullable String value) { - if (StringUtils.equalsIgnoreCase("dev", value)) { - return Mode.DEVELOPMENT; + Mode modeResult = null; + for (Mode mode : values()) { + if (mode.name().equalsIgnoreCase(value)) { + modeResult = mode; + break; + } } - - if (StringUtils.equalsIgnoreCase("test", value)) { - return Mode.TEST; + if (modeResult == null) { + modeResult = PRODUCTION; } - - return PRODUCTION; + return modeResult; } @JsonValue diff --git a/src/main/java/run/halo/app/security/filter/AbstractAuthenticationFilter.java b/src/main/java/run/halo/app/security/filter/AbstractAuthenticationFilter.java index 1a2e5048d..262a30269 100644 --- a/src/main/java/run/halo/app/security/filter/AbstractAuthenticationFilter.java +++ b/src/main/java/run/halo/app/security/filter/AbstractAuthenticationFilter.java @@ -53,8 +53,6 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter private OneTimeTokenService oneTimeTokenService; - private final Mode mode; - private volatile AuthenticationFailureHandler failureHandler; /** * Exclude url patterns. @@ -64,13 +62,11 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter AbstractAuthenticationFilter(HaloProperties haloProperties, OptionService optionService, StringCacheStore cacheStore, - OneTimeTokenService oneTimeTokenService, - Mode mode) { + OneTimeTokenService oneTimeTokenService) { this.haloProperties = haloProperties; this.optionService = optionService; this.cacheStore = cacheStore; this.oneTimeTokenService = oneTimeTokenService; - this.mode = mode; antPathMatcher = new AntPathMatcher(); } @@ -162,7 +158,7 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter // Check whether the blog is installed or not Boolean isInstalled = optionService.getByPropertyOrDefault(PrimaryProperties.IS_INSTALLED, Boolean.class, false); - if (!isInstalled && mode != Mode.TEST) { + if (!isInstalled && Mode.TEST.equals(haloProperties.getMode())) { // If not installed getFailureHandler().onFailure(request, response, new NotInstallException("当前博客还没有初始化")); return; diff --git a/src/main/java/run/halo/app/security/filter/AdminAuthenticationFilter.java b/src/main/java/run/halo/app/security/filter/AdminAuthenticationFilter.java index 8d45befe9..d50df0bff 100644 --- a/src/main/java/run/halo/app/security/filter/AdminAuthenticationFilter.java +++ b/src/main/java/run/halo/app/security/filter/AdminAuthenticationFilter.java @@ -7,7 +7,6 @@ import run.halo.app.cache.StringCacheStore; import run.halo.app.config.properties.HaloProperties; import run.halo.app.exception.AuthenticationException; import run.halo.app.model.entity.User; -import run.halo.app.model.enums.Mode; import run.halo.app.security.authentication.AuthenticationImpl; import run.halo.app.security.context.SecurityContextHolder; import run.halo.app.security.context.SecurityContextImpl; @@ -43,9 +42,8 @@ public class AdminAuthenticationFilter extends AbstractAuthenticationFilter { UserService userService, HaloProperties haloProperties, OptionService optionService, - OneTimeTokenService oneTimeTokenService, - Mode mode) { - super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode); + OneTimeTokenService oneTimeTokenService) { + super(haloProperties, optionService, cacheStore, oneTimeTokenService); this.userService = userService; this.haloProperties = haloProperties; } diff --git a/src/main/java/run/halo/app/security/filter/ApiAuthenticationFilter.java b/src/main/java/run/halo/app/security/filter/ApiAuthenticationFilter.java index 5ebe5f1c6..e934441d8 100644 --- a/src/main/java/run/halo/app/security/filter/ApiAuthenticationFilter.java +++ b/src/main/java/run/halo/app/security/filter/ApiAuthenticationFilter.java @@ -7,7 +7,6 @@ import run.halo.app.cache.StringCacheStore; import run.halo.app.config.properties.HaloProperties; import run.halo.app.exception.AuthenticationException; import run.halo.app.exception.ForbiddenException; -import run.halo.app.model.enums.Mode; import run.halo.app.model.properties.ApiProperties; import run.halo.app.model.properties.CommentProperties; import run.halo.app.security.service.OneTimeTokenService; @@ -36,9 +35,8 @@ public class ApiAuthenticationFilter extends AbstractAuthenticationFilter { public ApiAuthenticationFilter(HaloProperties haloProperties, OptionService optionService, StringCacheStore cacheStore, - OneTimeTokenService oneTimeTokenService, - Mode mode) { - super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode); + OneTimeTokenService oneTimeTokenService) { + super(haloProperties, optionService, cacheStore, oneTimeTokenService); this.optionService = optionService; } diff --git a/src/main/java/run/halo/app/security/filter/ContentFilter.java b/src/main/java/run/halo/app/security/filter/ContentFilter.java index cce447f3d..69ad2aef9 100644 --- a/src/main/java/run/halo/app/security/filter/ContentFilter.java +++ b/src/main/java/run/halo/app/security/filter/ContentFilter.java @@ -2,7 +2,6 @@ package run.halo.app.security.filter; import run.halo.app.cache.StringCacheStore; import run.halo.app.config.properties.HaloProperties; -import run.halo.app.model.enums.Mode; import run.halo.app.security.service.OneTimeTokenService; import run.halo.app.service.OptionService; @@ -23,9 +22,8 @@ public class ContentFilter extends AbstractAuthenticationFilter { public ContentFilter(HaloProperties haloProperties, OptionService optionService, StringCacheStore cacheStore, - OneTimeTokenService oneTimeTokenService, - Mode mode) { - super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode); + OneTimeTokenService oneTimeTokenService) { + super(haloProperties, optionService, cacheStore, oneTimeTokenService); } @Override diff --git a/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java b/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java index b527e4f20..27aaef132 100644 --- a/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java @@ -23,7 +23,6 @@ import run.halo.app.model.dto.StatisticDTO; import run.halo.app.model.entity.User; import run.halo.app.model.enums.CommentStatus; import run.halo.app.model.enums.LogType; -import run.halo.app.model.enums.Mode; import run.halo.app.model.enums.PostStatus; import run.halo.app.model.params.LoginParam; import run.halo.app.model.params.ResetPasswordParam; @@ -300,7 +299,7 @@ public class AdminServiceImpl implements AdminService { environmentDTO.setVersion(HaloConst.HALO_VERSION); - environmentDTO.setMode(Mode.valueFrom(this.mode)); + environmentDTO.setMode(haloProperties.getMode()); return environmentDTO; } diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index f6bf6077b..be6e2e3c9 100755 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -19,10 +19,10 @@ spring: password: 123456 # MySQL database configuration. -# driver-class-name: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://127.0.0.1:3306/halo_dev?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true -# username: root -# password: 123456 + # driver-class-name: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://127.0.0.1:3306/halo_dev?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + # username: root + # password: 123456 h2: console: @@ -62,5 +62,6 @@ halo: doc-disabled: false production-env: false auth-enabled: true + mode: development workDir: ${user.home}/halo-dev/ cache: level \ No newline at end of file diff --git a/src/main/resources/application-test.yaml b/src/main/resources/application-test.yaml index 8bffad038..058f12f23 100755 --- a/src/main/resources/application-test.yaml +++ b/src/main/resources/application-test.yaml @@ -60,4 +60,5 @@ logging: halo: doc-disabled: false auth-enable: false + mode: test workDir: ${user.home}/halo-test/