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);
+ }
+}