Commit e6c4ee2e authored by maqing's avatar maqing

启动优化

parent b91156fc
package com.hungraim.ltc.pojo.entity.system;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("LTC_RESOURCE_INTERFACE")
public class SystemResourceinterface {
private Long resourceId;
private Long interfaceId;
}
...@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; ...@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.hungraim.ltc.constant.AuthConstants; import com.hungraim.ltc.constant.AuthConstants;
import com.hungraim.ltc.pojo.entity.system.SystemInterface; import com.hungraim.ltc.pojo.entity.system.SystemInterface;
import com.hungraim.ltc.pojo.entity.system.SystemRoleResource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -87,14 +88,14 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author ...@@ -87,14 +88,14 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
String[] splitpath = path.split("/"); String[] splitpath = path.split("/");
String pathNew = "/" + splitpath[1] + "/" + splitpath[2] + "/*"; String pathNew = "/" + splitpath[1] + "/" + splitpath[2] + "/*";
Set<String> authorities = new HashSet<>(); Set<String> authorities = new HashSet<>();
Map<String, List<Long>> rolesResources = redisTemplate.opsForHash().entries(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY); Map<String, List<SystemRoleResource>> rolesResources = redisTemplate.opsForHash().entries(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY);
Map<String, List<SystemInterface>> interfaces = redisTemplate.opsForHash().entries(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY); Map<String, List<String>> interfaces = redisTemplate.opsForHash().entries(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY);
List<Long> resources = rolesResources.get(roleId); List<SystemRoleResource> resources = rolesResources.get(roleId);
for (Long resource : resources) { for (SystemRoleResource resource : resources) {
List<SystemInterface> systemInterfaces = interfaces.get(resource.toString()); List<String> systemInterfaces = interfaces.get(resource.getResourceId().toString());
if (systemInterfaces != null && systemInterfaces.size() > 0) { if (systemInterfaces != null && systemInterfaces.size() > 0) {
for (SystemInterface iter : systemInterfaces) { for (String iter : systemInterfaces) {
if (pathMatcher.match(iter.getInterfaceUrl(), pathNew)) { if (pathMatcher.match(iter, pathNew)) {
authorities.addAll(Convert.toList(String.class, roleId)); authorities.addAll(Convert.toList(String.class, roleId));
} }
} }
......
...@@ -3,6 +3,8 @@ package com.hungraim.ltc.system.dao; ...@@ -3,6 +3,8 @@ package com.hungraim.ltc.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hungraim.ltc.pojo.entity.system.SystemInterface; import com.hungraim.ltc.pojo.entity.system.SystemInterface;
import com.hungraim.ltc.pojo.entity.system.SystemResource; import com.hungraim.ltc.pojo.entity.system.SystemResource;
import com.hungraim.ltc.pojo.entity.system.SystemResourceinterface;
import com.hungraim.ltc.pojo.entity.system.SystemRoleResource;
import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.*;
import java.util.List; import java.util.List;
...@@ -14,14 +16,17 @@ import java.util.List; ...@@ -14,14 +16,17 @@ import java.util.List;
@Mapper @Mapper
public interface SystemInterfaceMapper extends BaseMapper<SystemInterface> { public interface SystemInterfaceMapper extends BaseMapper<SystemInterface> {
@Select("SELECT a.INTERFACE_ID,a.INTERFACE_URL FROM LTC_INTERFACE a,LTC_RESOURCE_INTERFACE e where a.INTERFACE_ID=e.INTERFACE_ID and e.RESOURCE_ID=#{resourceId}") @Select("SELECT a.INTERFACE_ID,a.INTERFACE_URL FROM LTC_INTERFACE a")
List<SystemInterface> listInterface(Long resourceId); List<SystemInterface> listInterface();
@Select("select c.RESOURCE_ID,c.INTERFACE_ID from LTC_RESOURCE_INTERFACE c")
List<SystemResourceinterface> listResourceInterface();
@Select("select b.ROLE_ID from LTC_ROLE b") @Select("select b.ROLE_ID from LTC_ROLE b")
List<Long> listRole(); List<Long> listRole();
@Select("select c.RESOURCE_ID from LTC_ROLE_RESOURCE c WHERE c.ROLE_ID=#{roleId}") @Select("select c.RESOURCE_ID,c.ROLE_ID from LTC_ROLE_RESOURCE c")
List<Long> listRoleResource(Long roleId); List<SystemRoleResource> listRoleResource();
} }
...@@ -3,6 +3,8 @@ package com.hungraim.ltc.system.service.impl; ...@@ -3,6 +3,8 @@ package com.hungraim.ltc.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hungraim.ltc.constant.AuthConstants; import com.hungraim.ltc.constant.AuthConstants;
import com.hungraim.ltc.pojo.entity.system.SystemInterface; import com.hungraim.ltc.pojo.entity.system.SystemInterface;
import com.hungraim.ltc.pojo.entity.system.SystemResourceinterface;
import com.hungraim.ltc.pojo.entity.system.SystemRoleResource;
import com.hungraim.ltc.system.dao.SystemInterfaceMapper; import com.hungraim.ltc.system.dao.SystemInterfaceMapper;
import com.hungraim.ltc.system.service.ISystemInterfaceService; import com.hungraim.ltc.system.service.ISystemInterfaceService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -11,6 +13,7 @@ import org.springframework.data.redis.core.RedisTemplate; ...@@ -11,6 +13,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author mq * @author mq
...@@ -34,29 +37,39 @@ public class SystemInterfaceServiceImpl extends ServiceImpl<SystemInterfaceMappe ...@@ -34,29 +37,39 @@ public class SystemInterfaceServiceImpl extends ServiceImpl<SystemInterfaceMappe
@Override @Override
public void listResourceInterface() { public void listResourceInterface() {
try {
redisTemplate.delete(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY); redisTemplate.delete(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY);
redisTemplate.delete(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY); redisTemplate.delete(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY);
Map<String, List<Long>> roleResourcesMap = new TreeMap<>(); Map<String, List<SystemRoleResource>> roleResourcesMap = new TreeMap<>();
Map<String, List<SystemInterface>> stringStringHashMap = new HashMap<>(); Map<String, List<String>> stringStringHashMap = new HashMap<>();
//角色数据
List<Long> roles = systemInterfaceMapper.listRole(); List<Long> roles = systemInterfaceMapper.listRole();
String roleId; //角色和资源数据
for (Long role : roles) { List<SystemRoleResource> roleResources = systemInterfaceMapper.listRoleResource();
List<Long> roleResources = systemInterfaceMapper.listRoleResource(role); //资源和接口数据
//保存资源和接口 List<SystemResourceinterface> resourceInterface = systemInterfaceMapper.listResourceInterface();
for (Long roleResource:roleResources){ //接口数据
List<SystemInterface> systemInterfaces=systemInterfaceMapper.listInterface(roleResource); List<SystemInterface> systemInterfaces = systemInterfaceMapper.listInterface();
stringStringHashMap.put(roleResource.toString(),systemInterfaces); roles.stream().forEach(role -> {
} //角色和资源数据
// 转换 roles -> ROLE_{roleId} List<SystemRoleResource> roleResourceList = roleResources.stream().filter(roleResource -> roleResource.getRoleId().equals(role)).collect(Collectors.toList());
roleId=AuthConstants.AUTHORITY_PREFIX + role; roleResourceList.stream().forEach(roleResource -> {
//保存角色和资源 //资源和接口数据
roleResourcesMap.put(roleId,roleResources); List<SystemResourceinterface> resourceinterfaceList = resourceInterface.stream().filter(role2 -> role2.getResourceId().equals(roleResource.getResourceId())).collect(Collectors.toList());
} List<String> systemResourceinterfaces = new ArrayList<>();
resourceinterfaceList.stream().forEach(resourceinterface->{
List<SystemInterface> collect = systemInterfaces.stream().filter(role2 -> role2.getInterfaceId().equals(resourceinterface.getInterfaceId())).collect(Collectors.toList());
systemResourceinterfaces.add(collect.get(0).getInterfaceUrl());
});
//资源和接口
stringStringHashMap.put(roleResource.getResourceId().toString(),systemResourceinterfaces);
});
//角色和资源
roleResourcesMap.put(AuthConstants.AUTHORITY_PREFIX + role.toString(),roleResourceList);
});
redisTemplate.opsForHash().putAll(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY, roleResourcesMap); redisTemplate.opsForHash().putAll(AuthConstants.PERMISSION_ROLES_RESOURCE_KEY, roleResourcesMap);
redisTemplate.opsForHash().putAll(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY, stringStringHashMap); redisTemplate.opsForHash().putAll(AuthConstants.PERMISSION_RESOURCE_INTERFACE_KEY, stringStringHashMap);
}catch (RuntimeException e){
e.printStackTrace();
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment