This commit is contained in:
2023-11-12 21:25:59 +08:00
parent d5a15e6ca6
commit 2b24a77a86
7 changed files with 73 additions and 0 deletions

View File

@@ -21,6 +21,7 @@ import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
@@ -45,6 +46,10 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
@PostConstruct
public void init() {}
public PermissionDto create(CreatePermissionDto request) {
PermissionEntity entity = mapper.toEntity(request);
@@ -169,4 +174,27 @@ public class PermissionService extends BaseService<PermissionEntity, PermissionR
public List<PermissionEntity> getByTypes(String[] types) {
return this.repository.findAllByPermissionTypeIn(types);
}
public void initDefault() {
List<PermissionEntity> permissionType = this.repository.findAllByPermissionType("0");
if (permissionType.isEmpty()) {
PermissionEntity permission = new PermissionEntity();
permission.setCode("anonymous");
permission.setName("匿名用户权限");
permission.setPermissionType("0");
permission.setResources(
resourceService.findAll().stream()
.filter(x -> BooleanUtils.isTrue(x.getAnonymous()))
.toList());
this.repository.save(permission);
}
}
}

View File

@@ -15,6 +15,7 @@ import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@@ -43,6 +44,7 @@ public class RoleService extends BaseService<RoleEntity, RoleRepository> {
return getById(entity.getId());
}
@CacheEvict(cacheNames = "userResources", allEntries = true)
public RoleDto update(UpdateRoleDto request) {
RoleEntity entity = this.repository.get(request.getId());
this.mapper.updateEntity(entity, request);
@@ -52,6 +54,7 @@ public class RoleService extends BaseService<RoleEntity, RoleRepository> {
return getById(entity.getId());
}
@CacheEvict(cacheNames = "userResources", allEntries = true)
public void delete(IdRequest request) {
this.repository.deleteAllById(request.getIds());

View File

@@ -4,6 +4,7 @@ import cn.lihongjie.coal.coalParameterDef.service.CoalParameterDefService;
import cn.lihongjie.coal.dictionary.service.DictionaryService;
import cn.lihongjie.coal.organization.entity.OrganizationEntity;
import cn.lihongjie.coal.organization.service.OrganizationService;
import cn.lihongjie.coal.permission.service.PermissionService;
import cn.lihongjie.coal.resource.service.ResourceService;
import cn.lihongjie.coal.script.service.ScriptService;
import cn.lihongjie.coal.session.SessionService;
@@ -41,6 +42,8 @@ public class InitDataRunner implements CommandLineRunner {
@Autowired SysConfigService sysConfigService;
@Autowired PermissionService permissionService;
@Override
@Transactional
public void run(String... args) throws Exception {
@@ -69,6 +72,8 @@ public class InitDataRunner implements CommandLineRunner {
scriptService.initFromResource();
permissionService.initDefault();
} finally {
SecurityContextHolder.clearContext();
}

View File

@@ -1,6 +1,7 @@
package cn.lihongjie.coal.session;
import cn.lihongjie.coal.common.Constants;
import cn.lihongjie.coal.common.Ctx;
import cn.lihongjie.coal.common.RequestUtils;
import cn.lihongjie.coal.exception.BizException;
import cn.lihongjie.coal.organization.entity.OrganizationEntity;
@@ -22,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
@@ -204,9 +206,18 @@ public class SessionService {
if (sessionId != null) {
stringRedisTemplate.opsForValue().getAndDelete(sessionId);
try {
invalidateResourceCache(Ctx.currentUser().getId());
} catch (Exception e) {
log.warn("清除用户缓存失败", e);
}
}
}
@CacheEvict(cacheNames = "userResources", key = "#userId")
public void invalidateResourceCache(String userId) {}
public void anonymousSession() {
SecurityContext context = SecurityContextHolder.createEmptyContext();

View File

@@ -1,13 +1,33 @@
package cn.lihongjie.coal.spring.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer;
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.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
@EnableCaching
@Configuration
public class CacheConfig {
@Autowired ObjectMapper objectMapper;
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10))
.disableCachingNullValues()
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(
new GenericJackson2JsonRedisSerializer(objectMapper)));
}
@Bean
public RedisCacheManagerBuilderCustomizer myRedisCacheManagerBuilderCustomizer() {
return new RedisCacheManagerBuilderCustomizer() {

View File

@@ -32,6 +32,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@@ -118,6 +120,7 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
}
}
@CacheEvict(cacheNames = "userResources", key = "#request.id")
public UserDto update(UpdateUserDto request) {
UserEntity user = this.repository.get(request.getId());
this.mapper.updateEntity(user, request);
@@ -230,6 +233,7 @@ public class UserService extends BaseService<UserEntity, UserRepository> {
@Autowired PermissionService permissionService;
@Cacheable(cacheNames = "userResources", key = "#id")
public List<ResourceDto> resources(String id) {
UserEntity user = get(id);

View File

@@ -74,7 +74,9 @@ spring:
cache:
type: redis
redis:
enable-statistics: true
application:
name: coal