From 0baad044457824809e6e35685acb7e9984c5d13a Mon Sep 17 00:00:00 2001 From: zhengjie Date: Wed, 8 May 2019 15:13:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=AD=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=9A=84=E8=A7=92=E8=89=B2=E6=97=B6=E7=BC=93=E5=AD=98=E4=B8=8D?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/service/impl/RedisServiceImpl.java | 1 - .../security/service/JwtPermissionService.java | 5 +++++ .../me/zhengjie/modules/system/domain/Role.java | 14 ++++++++++++++ .../modules/system/service/RoleService.java | 3 ++- .../system/service/impl/UserServiceImpl.java | 12 ++++++++++++ .../me/zhengjie/EladminSystemApplicationTests.java | 4 ++++ 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java index a38c66b8..77d4d112 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/RedisServiceImpl.java @@ -74,7 +74,6 @@ public class RedisServiceImpl implements RedisService { jedis.close(); // 释放资源还给连接池 } } - } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java index 147ddf75..5b29ccfd 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/JwtPermissionService.java @@ -20,6 +20,11 @@ public class JwtPermissionService { @Autowired private RoleRepository roleRepository; + /** + * key的名称如有修改,请同步修改 UserServiceImpl 中的 update 方法 + * @param user + * @return + */ @Cacheable(key = "'loadPermissionByUser:' + #p0.username") public Collection mapToGrantedAuthorities(User user) { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Role.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Role.java index 14a80e1f..50cee209 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Role.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Role.java @@ -10,6 +10,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.sql.Timestamp; +import java.util.Objects; import java.util.Set; /** @@ -69,5 +70,18 @@ public class Role implements Serializable { '}'; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Role role = (Role) o; + return Objects.equals(id, role.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + public interface Update{} } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java index a1fe8e08..2771dabd 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java @@ -48,11 +48,12 @@ public interface RoleService { void delete(Long id); /** + * key的名称如有修改,请同步修改 UserServiceImpl 中的 update 方法 * findByUsers_Id * @param id * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable(key = "'findByUsers_Id:' + #p0") List findByUsers_Id(Long id); /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 807804bd..dec49693 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -1,5 +1,6 @@ package me.zhengjie.modules.system.service.impl; +import me.zhengjie.modules.monitor.service.RedisService; import me.zhengjie.modules.system.domain.User; import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityNotFoundException; @@ -29,6 +30,9 @@ public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; + @Autowired + private RedisService redisService; + @Override public UserDTO findById(long id) { Optional user = userRepository.findById(id); @@ -73,6 +77,14 @@ public class UserServiceImpl implements UserService { throw new EntityExistException(User.class,"email",resources.getEmail()); } + // 如果用户的角色改变了,需要手动清理下缓存 + if (!resources.getRoles().equals(user.getRoles())) { + String key = "role::loadPermissionByUser:" + user.getUsername(); + redisService.delete(key); + key = "role::findByUsers_Id:" + user.getId(); + redisService.delete(key); + } + user.setUsername(resources.getUsername()); user.setEmail(resources.getEmail()); user.setEnabled(resources.getEnabled()); diff --git a/eladmin-system/src/test/java/me/zhengjie/EladminSystemApplicationTests.java b/eladmin-system/src/test/java/me/zhengjie/EladminSystemApplicationTests.java index c78714a4..1be999dc 100644 --- a/eladmin-system/src/test/java/me/zhengjie/EladminSystemApplicationTests.java +++ b/eladmin-system/src/test/java/me/zhengjie/EladminSystemApplicationTests.java @@ -1,13 +1,17 @@ package me.zhengjie; +import me.zhengjie.modules.monitor.service.RedisService; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class EladminSystemApplicationTests { + @Autowired + private RedisService redisService; @Test public void contextLoads() {