diff --git a/pom.xml b/pom.xml index 96ad611..8177e96 100644 --- a/pom.xml +++ b/pom.xml @@ -71,12 +71,12 @@ jakarta.mail 2.0.1 - - - - - - + + org.springframework.boot + spring-boot-devtools + runtime + true + org.projectlombok lombok @@ -138,6 +138,15 @@ RELEASE compile + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.apache.commons + commons-pool2 + diff --git a/src/main/java/asia/yulinling/workflow/config/RedisConfig.java b/src/main/java/asia/yulinling/workflow/config/RedisConfig.java new file mode 100644 index 0000000..e53b4a5 --- /dev/null +++ b/src/main/java/asia/yulinling/workflow/config/RedisConfig.java @@ -0,0 +1,49 @@ +package asia.yulinling.workflow.config; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.io.Serializable; + +/** + *

+ * Redis配置类 + *

+ * + * @author YLL + * @since 2025/6/17 + */ +@Configuration +@AutoConfigureAfter(RedisAutoConfiguration.class) +@EnableCaching +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new StringRedisSerializer()); + redisTemplate.setConnectionFactory(factory); + return redisTemplate; + } + +// @Bean +// public CacheManager cacheManager(RedisConnectionFactory factory) { +// RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); +// RedisCacheConfiguration redisCacheConfiguration = configuration.serializeKeysWith( +// RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()) +// ).serializeValuesWith( +// RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); +// return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build(); +// } +} diff --git a/src/main/java/asia/yulinling/workflow/model/entity/User.java b/src/main/java/asia/yulinling/workflow/model/entity/User.java index 60e115d..94fbb84 100644 --- a/src/main/java/asia/yulinling/workflow/model/entity/User.java +++ b/src/main/java/asia/yulinling/workflow/model/entity/User.java @@ -88,5 +88,4 @@ public class User { */ @TableField("last_login_time") private Date lastLoginTime; - } diff --git a/src/main/java/asia/yulinling/workflow/security/JwtRbacAuthenticationService.java b/src/main/java/asia/yulinling/workflow/security/JwtRbacAuthenticationService.java index 5c9ebea..f21a11b 100644 --- a/src/main/java/asia/yulinling/workflow/security/JwtRbacAuthenticationService.java +++ b/src/main/java/asia/yulinling/workflow/security/JwtRbacAuthenticationService.java @@ -15,7 +15,6 @@ import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition; -import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -75,10 +74,14 @@ public class JwtRbacAuthenticationService { } } + /** + * 检查请求在Controller中是否存在 + * + * @param request 请求 + */ private void checkRequest(HttpServletRequest request) { String method = request.getMethod(); Map> urlMapping = getAllUrlMapping(); - log.info("方法" + method + "url" + urlMapping.toString()); for (String url : urlMapping.keySet()) { AntPathMatcher antPathMatcher = new AntPathMatcher(); @@ -114,9 +117,9 @@ public class JwtRbacAuthenticationService { List httpMethods = methodsCondition.getMethods().stream() .map(Enum::toString) .collect(Collectors.toList()); - urlTemplates.forEach(url -> { - urlMapping.put(url.toString(), httpMethods); - }); + urlTemplates.forEach(url -> + urlMapping.put(url.toString(), httpMethods) + ); }); log.info("urlMapping :{}", urlMapping); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 00f6261..4d518b6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,7 +4,7 @@ server.port=8080 # mysql配置 spring.datasource.url=jdbc:mysql://122.152.201.90:9912/workflow?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 spring.datasource.username=root -spring.datasource.password=0andrx +spring.datasource.password=ENC(lLJgIEE5YJuSKnOpFBC4NFL+iqZZK97573fvgC7hZ8u3S6o/TlK15WfjnKTPOrQO) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.sql.init.mode=always spring.sql.init.continue-on-error=true @@ -19,6 +19,15 @@ spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=MyAppHikariCP spring.datasource.hikari.max-lifetime=300000 spring.datasource.hikari.connection-timeout=30000 +# Redis配置 +spring.data.redis.host=122.152.201.90 +spring.data.redis.port=6379 +spring.data.redis.password=ENC(lLJgIEE5YJuSKnOpFBC4NFL+iqZZK97573fvgC7hZ8u3S6o/TlK15WfjnKTPOrQO) +spring.data.redis.timeout=10000ms +spring.data.redis.lettuce.pool.max-active=8 +spring.data.redis.lettuce.pool.max-wait=-1ms +spring.data.redis.lettuce.pool.max-idle=8 +spring.data.redis.lettuce.pool.min-idle=0 # log配置 logging.level.asia.yulinling=debug logging.level.asia.yulinling.workflow.mapper=trace diff --git a/src/test/java/asia/yulinling/workflow/PasswordTest.java b/src/test/java/asia/yulinling/workflow/PasswordTest.java index fce3359..93e4c23 100644 --- a/src/test/java/asia/yulinling/workflow/PasswordTest.java +++ b/src/test/java/asia/yulinling/workflow/PasswordTest.java @@ -17,7 +17,7 @@ public class PasswordTest extends WorkFlowMainTests { @Test public void testGeneratePassword() { // 你的邮箱密码 - String password = "xlwpmlbawpjjdghb"; + String password = "0andrx"; String encryptPassword = encryptor.encrypt(password); String decryptPassword = encryptor.decrypt(encryptPassword); diff --git a/src/test/java/asia/yulinling/workflow/RedisTest.java b/src/test/java/asia/yulinling/workflow/RedisTest.java new file mode 100644 index 0000000..81747b8 --- /dev/null +++ b/src/test/java/asia/yulinling/workflow/RedisTest.java @@ -0,0 +1,56 @@ +package asia.yulinling.workflow; + +import asia.yulinling.workflow.model.entity.User; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.io.Serializable; +import java.util.Objects; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.IntStream; + +/** + *

+ * Redis测试 + *

+ * + * @author YLL + * @since 2025/6/17 + */ +@Slf4j +public class RedisTest extends WorkFlowMainTests { + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + + @Test + public void testRedisTemplate() throws InterruptedException { +// CountDownLatch latch = new CountDownLatch(1000); +// ExecutorService executorService = Executors.newFixedThreadPool(100); +// +// IntStream.range(0, 1000).forEach(i -> { +// executorService.execute(() -> { +// stringRedisTemplate.opsForValue().increment("count", 1); +// latch.countDown(); +// }); +// }); +// +// latch.await(); // 等待所有线程执行完毕 +// executorService.shutdown(); // 关闭线程池 +// +// Long count = Long.valueOf(Objects.requireNonNull(stringRedisTemplate.opsForValue().get("count"))); +// log.info("count: {}", count); +// +// stringRedisTemplate.opsForValue().set("k1", "v1"); +// String k1 = stringRedisTemplate.opsForValue().get("k1"); +// log.info("k1: {}", k1); + } +}