Skip to content

Commit

Permalink
perf($Starter): abstract JWT configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Sep 15, 2021
1 parent 19dea14 commit 6dc91ae
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
import com.jmsoftware.maf.common.exception.BizException;
import com.jmsoftware.maf.common.exception.SecurityException;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.*;
import org.springframework.security.core.Authentication;
Expand All @@ -22,9 +21,9 @@
*
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 12/29/2020 9:57 AM
**/
@Slf4j
@RequiredArgsConstructor
public class JwtReactiveAuthenticationManagerImpl implements ReactiveAuthenticationManager {
private final static Logger log = LoggerFactory.getLogger(JwtReactiveAuthenticationManagerImpl.class);
private final AuthCenterRemoteApi authCenterRemoteApi;

private final UserDetailsChecker preAuthenticationChecks = user -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import cn.hutool.core.util.StrUtil;
import com.jmsoftware.maf.apigateway.remoteapi.AuthCenterRemoteApi;
import com.jmsoftware.maf.apigateway.security.configuration.JwtConfiguration;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.JwtConfiguration;
import com.jmsoftware.maf.common.domain.authcenter.security.UserPrincipal;
import com.jmsoftware.maf.common.exception.SecurityException;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafConfiguration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
package com.jmsoftware.maf.reactivespringcloudstarter;

import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafConfiguration;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafProjectProperty;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.WebClientConfiguration;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.WebFluxConfiguration;
import com.jmsoftware.maf.reactivespringcloudstarter.configuration.*;
import com.jmsoftware.maf.reactivespringcloudstarter.controller.CommonController;
import com.jmsoftware.maf.reactivespringcloudstarter.filter.AccessLogFilter;
import com.jmsoftware.maf.reactivespringcloudstarter.helper.IpHelper;
import com.jmsoftware.maf.reactivespringcloudstarter.helper.SpringBootStartupHelper;
import com.jmsoftware.maf.reactivespringcloudstarter.redis.RedisConfiguration;
import com.jmsoftware.maf.reactivespringcloudstarter.service.CommonService;
import com.jmsoftware.maf.reactivespringcloudstarter.service.impl.CommonServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

import javax.annotation.PostConstruct;
Expand All @@ -29,12 +23,11 @@
* @author 钟俊(zhongjun), email: zhongjun@toguide.cn, date: 12/22/2020 2:41 PM
**/
@Slf4j
@Configuration
@RequiredArgsConstructor
@AutoConfigureOrder(Integer.MIN_VALUE)
@EnableConfigurationProperties({
MafConfiguration.class,
MafProjectProperty.class
MafProjectProperty.class,
JwtConfiguration.class
})
@Import({
RedisConfiguration.class,
Expand All @@ -49,7 +42,6 @@ public void postConstruct() {
}

@Bean
@ConditionalOnMissingBean
public AccessLogFilter requestFilter(MafConfiguration mafConfiguration) {
log.warn("Initial bean: '{}'", AccessLogFilter.class.getSimpleName());
return new AccessLogFilter(mafConfiguration);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.jmsoftware.maf.apigateway.security.configuration;
package com.jmsoftware.maf.reactivespringcloudstarter.configuration;

import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafProjectProperty;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;
import java.nio.charset.StandardCharsets;

/**
Expand All @@ -18,34 +20,41 @@
**/
@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "jwt.configuration")
@Validated
@ConfigurationProperties(prefix = JwtConfiguration.PREFIX)
public class JwtConfiguration {
/**
* The constant PREFIX.
*/
public static final String PREFIX = "maf.configuration.jwt";
public static final String TOKEN_PREFIX = "Bearer ";
/**
* Key prefix of JWT stored in Redis.
*/
@Setter(AccessLevel.NONE)
private String jwtRedisKeyPrefix;

public JwtConfiguration(MafProjectProperty mafProjectProperty) {
this.signingKey = String.format("%s %s", mafProjectProperty.getProjectParentArtifactId(),
mafProjectProperty.getVersion());
log.info("Initiated JWT signing key: {}. The specified key byte array is {} bits", this.signingKey,
this.signingKey.getBytes(StandardCharsets.UTF_8).length * 8);
jwtRedisKeyPrefix = String.format("%s:jwt:", mafProjectProperty.getProjectParentArtifactId());
log.warn("Initiated 'jwtRedisKeyPrefix': {}", jwtRedisKeyPrefix);
}

/**
* JWT signing key, which is equal to the string value of group id of project.
* JWT signing key. Pattern: [project-parent-artifact-id]@[version]
*/
@Setter(AccessLevel.NONE)
private String signingKey;
/**
* Time to live of JWT. Default: 3 * 600000 milliseconds (30 min).
* Time to live of JWT. Default: 3 * 600000 milliseconds (1800000 ms, 30 min).
*/
@NotNull
private Long ttl = 3 * 600000L;
/**
* Time to live of JWT for remember me, Default: 7 * 86400000 milliseconds (7 day)
* Time to live of JWT for remember me, Default: 7 * 86400000 milliseconds (604800000 ms, 7 day)
*/
@NotNull
private Long ttlForRememberMe = 7 * 86400000L;

public JwtConfiguration(MafProjectProperty mafProjectProperty) {
this.signingKey = String.format("%s:%s", mafProjectProperty.getGroupId(),
mafProjectProperty.getProjectParentArtifactId());
log.info("Initiated JWT signing key: {}. The specified key byte array is {} bits", this.signingKey,
this.signingKey.getBytes(StandardCharsets.UTF_8).length * 8);
this.jwtRedisKeyPrefix = String.format("%s:jwt:", mafProjectProperty.getProjectParentArtifactId());
log.warn("Initiated 'jwtRedisKeyPrefix': {}", this.jwtRedisKeyPrefix);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
import org.springframework.integration.annotation.IntegrationComponentScan;
Expand All @@ -48,7 +47,6 @@
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 10/19/2020 2:51 PM
**/
@Slf4j
@Configuration
@IntegrationComponentScan
@ConditionalOnWebApplication
@EnableConfigurationProperties({
Expand Down

0 comments on commit 6dc91ae

Please sign in to comment.