mirror of https://github.com/halo-dev/halo
Refactor halo mode (#571)
parent
baa2f1ecfd
commit
df3601a751
|
@ -3,7 +3,6 @@ package run.halo.app.config;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
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.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
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.config.properties.HaloProperties;
|
||||||
import run.halo.app.filter.CorsFilter;
|
import run.halo.app.filter.CorsFilter;
|
||||||
import run.halo.app.filter.LogFilter;
|
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.AdminAuthenticationFilter;
|
||||||
import run.halo.app.security.filter.ApiAuthenticationFilter;
|
import run.halo.app.security.filter.ApiAuthenticationFilter;
|
||||||
import run.halo.app.security.filter.ContentFilter;
|
import run.halo.app.security.filter.ContentFilter;
|
||||||
|
@ -120,9 +118,8 @@ public class HaloConfiguration {
|
||||||
public FilterRegistrationBean<ContentFilter> contentFilter(HaloProperties haloProperties,
|
public FilterRegistrationBean<ContentFilter> contentFilter(HaloProperties haloProperties,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
StringCacheStore cacheStore,
|
StringCacheStore cacheStore,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
@Value("${spring.profiles.active:prod}") String activeProfile) {
|
ContentFilter contentFilter = new ContentFilter(haloProperties, optionService, cacheStore, oneTimeTokenService);
|
||||||
ContentFilter contentFilter = new ContentFilter(haloProperties, optionService, cacheStore, oneTimeTokenService, Mode.valueFrom(activeProfile));
|
|
||||||
contentFilter.setFailureHandler(new ContentAuthenticationFailureHandler());
|
contentFilter.setFailureHandler(new ContentAuthenticationFailureHandler());
|
||||||
|
|
||||||
String adminPattern = HaloUtils.ensureBoth(haloProperties.getAdminPath(), "/") + "**";
|
String adminPattern = HaloUtils.ensureBoth(haloProperties.getAdminPath(), "/") + "**";
|
||||||
|
@ -148,9 +145,8 @@ public class HaloConfiguration {
|
||||||
ObjectMapper objectMapper,
|
ObjectMapper objectMapper,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
StringCacheStore cacheStore,
|
StringCacheStore cacheStore,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
@Value("${spring.profiles.active:prod}") String activeProfile) {
|
ApiAuthenticationFilter apiFilter = new ApiAuthenticationFilter(haloProperties, optionService, cacheStore, oneTimeTokenService);
|
||||||
ApiAuthenticationFilter apiFilter = new ApiAuthenticationFilter(haloProperties, optionService, cacheStore, oneTimeTokenService, Mode.valueFrom(activeProfile));
|
|
||||||
apiFilter.addExcludeUrlPatterns(
|
apiFilter.addExcludeUrlPatterns(
|
||||||
"/api/content/*/comments",
|
"/api/content/*/comments",
|
||||||
"/api/content/**/comments/**",
|
"/api/content/**/comments/**",
|
||||||
|
@ -178,10 +174,9 @@ public class HaloConfiguration {
|
||||||
HaloProperties haloProperties,
|
HaloProperties haloProperties,
|
||||||
ObjectMapper objectMapper,
|
ObjectMapper objectMapper,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
@Value("${spring.profiles.active:prod}") String activeProfile) {
|
|
||||||
AdminAuthenticationFilter adminAuthenticationFilter = new AdminAuthenticationFilter(cacheStore, userService,
|
AdminAuthenticationFilter adminAuthenticationFilter = new AdminAuthenticationFilter(cacheStore, userService,
|
||||||
haloProperties, optionService, oneTimeTokenService, Mode.valueFrom(activeProfile));
|
haloProperties, optionService, oneTimeTokenService);
|
||||||
|
|
||||||
DefaultAuthenticationFailureHandler failureHandler = new DefaultAuthenticationFailureHandler();
|
DefaultAuthenticationFailureHandler failureHandler = new DefaultAuthenticationFailureHandler();
|
||||||
failureHandler.setProductionEnv(haloProperties.isProductionEnv());
|
failureHandler.setProductionEnv(haloProperties.isProductionEnv());
|
||||||
|
|
|
@ -2,10 +2,8 @@ package run.halo.app.config.properties;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
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 java.time.Duration;
|
||||||
|
|
||||||
import static run.halo.app.model.support.HaloConst.*;
|
import static run.halo.app.model.support.HaloConst.*;
|
||||||
|
@ -36,6 +34,11 @@ public class HaloProperties {
|
||||||
*/
|
*/
|
||||||
private boolean authEnabled = true;
|
private boolean authEnabled = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Halo startup mode.
|
||||||
|
*/
|
||||||
|
private Mode mode = Mode.PRODUCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin path.
|
* Admin path.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,7 +2,6 @@ package run.halo.app.model.enums;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonValue;
|
import com.fasterxml.jackson.annotation.JsonValue;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,15 +23,17 @@ public enum Mode {
|
||||||
*/
|
*/
|
||||||
@JsonCreator
|
@JsonCreator
|
||||||
public static Mode valueFrom(@Nullable String value) {
|
public static Mode valueFrom(@Nullable String value) {
|
||||||
if (StringUtils.equalsIgnoreCase("dev", value)) {
|
Mode modeResult = null;
|
||||||
return Mode.DEVELOPMENT;
|
for (Mode mode : values()) {
|
||||||
|
if (mode.name().equalsIgnoreCase(value)) {
|
||||||
|
modeResult = mode;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.equalsIgnoreCase("test", value)) {
|
|
||||||
return Mode.TEST;
|
|
||||||
}
|
}
|
||||||
|
if (modeResult == null) {
|
||||||
return PRODUCTION;
|
modeResult = PRODUCTION;
|
||||||
|
}
|
||||||
|
return modeResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
|
|
|
@ -53,8 +53,6 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter
|
||||||
|
|
||||||
private OneTimeTokenService oneTimeTokenService;
|
private OneTimeTokenService oneTimeTokenService;
|
||||||
|
|
||||||
private final Mode mode;
|
|
||||||
|
|
||||||
private volatile AuthenticationFailureHandler failureHandler;
|
private volatile AuthenticationFailureHandler failureHandler;
|
||||||
/**
|
/**
|
||||||
* Exclude url patterns.
|
* Exclude url patterns.
|
||||||
|
@ -64,13 +62,11 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter
|
||||||
AbstractAuthenticationFilter(HaloProperties haloProperties,
|
AbstractAuthenticationFilter(HaloProperties haloProperties,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
StringCacheStore cacheStore,
|
StringCacheStore cacheStore,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
Mode mode) {
|
|
||||||
this.haloProperties = haloProperties;
|
this.haloProperties = haloProperties;
|
||||||
this.optionService = optionService;
|
this.optionService = optionService;
|
||||||
this.cacheStore = cacheStore;
|
this.cacheStore = cacheStore;
|
||||||
this.oneTimeTokenService = oneTimeTokenService;
|
this.oneTimeTokenService = oneTimeTokenService;
|
||||||
this.mode = mode;
|
|
||||||
|
|
||||||
antPathMatcher = new AntPathMatcher();
|
antPathMatcher = new AntPathMatcher();
|
||||||
}
|
}
|
||||||
|
@ -162,7 +158,7 @@ public abstract class AbstractAuthenticationFilter extends OncePerRequestFilter
|
||||||
// Check whether the blog is installed or not
|
// Check whether the blog is installed or not
|
||||||
Boolean isInstalled = optionService.getByPropertyOrDefault(PrimaryProperties.IS_INSTALLED, Boolean.class, false);
|
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
|
// If not installed
|
||||||
getFailureHandler().onFailure(request, response, new NotInstallException("当前博客还没有初始化"));
|
getFailureHandler().onFailure(request, response, new NotInstallException("当前博客还没有初始化"));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -7,7 +7,6 @@ import run.halo.app.cache.StringCacheStore;
|
||||||
import run.halo.app.config.properties.HaloProperties;
|
import run.halo.app.config.properties.HaloProperties;
|
||||||
import run.halo.app.exception.AuthenticationException;
|
import run.halo.app.exception.AuthenticationException;
|
||||||
import run.halo.app.model.entity.User;
|
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.authentication.AuthenticationImpl;
|
||||||
import run.halo.app.security.context.SecurityContextHolder;
|
import run.halo.app.security.context.SecurityContextHolder;
|
||||||
import run.halo.app.security.context.SecurityContextImpl;
|
import run.halo.app.security.context.SecurityContextImpl;
|
||||||
|
@ -43,9 +42,8 @@ public class AdminAuthenticationFilter extends AbstractAuthenticationFilter {
|
||||||
UserService userService,
|
UserService userService,
|
||||||
HaloProperties haloProperties,
|
HaloProperties haloProperties,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
Mode mode) {
|
super(haloProperties, optionService, cacheStore, oneTimeTokenService);
|
||||||
super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode);
|
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
this.haloProperties = haloProperties;
|
this.haloProperties = haloProperties;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import run.halo.app.cache.StringCacheStore;
|
||||||
import run.halo.app.config.properties.HaloProperties;
|
import run.halo.app.config.properties.HaloProperties;
|
||||||
import run.halo.app.exception.AuthenticationException;
|
import run.halo.app.exception.AuthenticationException;
|
||||||
import run.halo.app.exception.ForbiddenException;
|
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.ApiProperties;
|
||||||
import run.halo.app.model.properties.CommentProperties;
|
import run.halo.app.model.properties.CommentProperties;
|
||||||
import run.halo.app.security.service.OneTimeTokenService;
|
import run.halo.app.security.service.OneTimeTokenService;
|
||||||
|
@ -36,9 +35,8 @@ public class ApiAuthenticationFilter extends AbstractAuthenticationFilter {
|
||||||
public ApiAuthenticationFilter(HaloProperties haloProperties,
|
public ApiAuthenticationFilter(HaloProperties haloProperties,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
StringCacheStore cacheStore,
|
StringCacheStore cacheStore,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
Mode mode) {
|
super(haloProperties, optionService, cacheStore, oneTimeTokenService);
|
||||||
super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode);
|
|
||||||
this.optionService = optionService;
|
this.optionService = optionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ package run.halo.app.security.filter;
|
||||||
|
|
||||||
import run.halo.app.cache.StringCacheStore;
|
import run.halo.app.cache.StringCacheStore;
|
||||||
import run.halo.app.config.properties.HaloProperties;
|
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.security.service.OneTimeTokenService;
|
||||||
import run.halo.app.service.OptionService;
|
import run.halo.app.service.OptionService;
|
||||||
|
|
||||||
|
@ -23,9 +22,8 @@ public class ContentFilter extends AbstractAuthenticationFilter {
|
||||||
public ContentFilter(HaloProperties haloProperties,
|
public ContentFilter(HaloProperties haloProperties,
|
||||||
OptionService optionService,
|
OptionService optionService,
|
||||||
StringCacheStore cacheStore,
|
StringCacheStore cacheStore,
|
||||||
OneTimeTokenService oneTimeTokenService,
|
OneTimeTokenService oneTimeTokenService) {
|
||||||
Mode mode) {
|
super(haloProperties, optionService, cacheStore, oneTimeTokenService);
|
||||||
super(haloProperties, optionService, cacheStore, oneTimeTokenService, mode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -23,7 +23,6 @@ import run.halo.app.model.dto.StatisticDTO;
|
||||||
import run.halo.app.model.entity.User;
|
import run.halo.app.model.entity.User;
|
||||||
import run.halo.app.model.enums.CommentStatus;
|
import run.halo.app.model.enums.CommentStatus;
|
||||||
import run.halo.app.model.enums.LogType;
|
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.enums.PostStatus;
|
||||||
import run.halo.app.model.params.LoginParam;
|
import run.halo.app.model.params.LoginParam;
|
||||||
import run.halo.app.model.params.ResetPasswordParam;
|
import run.halo.app.model.params.ResetPasswordParam;
|
||||||
|
@ -300,7 +299,7 @@ public class AdminServiceImpl implements AdminService {
|
||||||
|
|
||||||
environmentDTO.setVersion(HaloConst.HALO_VERSION);
|
environmentDTO.setVersion(HaloConst.HALO_VERSION);
|
||||||
|
|
||||||
environmentDTO.setMode(Mode.valueFrom(this.mode));
|
environmentDTO.setMode(haloProperties.getMode());
|
||||||
|
|
||||||
return environmentDTO;
|
return environmentDTO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,10 @@ spring:
|
||||||
password: 123456
|
password: 123456
|
||||||
|
|
||||||
# MySQL database configuration.
|
# MySQL database configuration.
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# 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
|
# url: jdbc:mysql://127.0.0.1:3306/halo_dev?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||||
# username: root
|
# username: root
|
||||||
# password: 123456
|
# password: 123456
|
||||||
|
|
||||||
h2:
|
h2:
|
||||||
console:
|
console:
|
||||||
|
@ -62,5 +62,6 @@ halo:
|
||||||
doc-disabled: false
|
doc-disabled: false
|
||||||
production-env: false
|
production-env: false
|
||||||
auth-enabled: true
|
auth-enabled: true
|
||||||
|
mode: development
|
||||||
workDir: ${user.home}/halo-dev/
|
workDir: ${user.home}/halo-dev/
|
||||||
cache: level
|
cache: level
|
|
@ -60,4 +60,5 @@ logging:
|
||||||
halo:
|
halo:
|
||||||
doc-disabled: false
|
doc-disabled: false
|
||||||
auth-enable: false
|
auth-enable: false
|
||||||
|
mode: test
|
||||||
workDir: ${user.home}/halo-test/
|
workDir: ${user.home}/halo-test/
|
||||||
|
|
Loading…
Reference in New Issue