第六次课:动态菜单-后端接口
分类: springboot 专栏: 在线教育项目实战 标签: 动态菜单-后端接口
2023-05-11 12:02:08 954浏览
动态菜单后端接口
权限模块准备工作
我们模仿若依的菜单效果

根据用户id获取用户菜单
这个是用户登录的时候使用
封装菜单接口
用递归查询的方式封装
@Data
public class MenuVo implements Serializable {
private String id;
private String pid;
private String path;
private String component;
private String name;
private String redirect;
private MetaVo meta;
private List<MenuVo> children;
}
redis缓存
这里建议加的三处
一是登陆者的菜单列表数据,每次登录的时候都要查一遍就挺消耗性能
二是用户登录的时候根据username查询的那个方法也是经常调用。
三是所有菜单数据(因为鉴权的时候要多次使用)

redis配置类
@Configuration
public class MyRedisConfig {
@Resource
RedisConnectionFactory factory;
@Bean
public RedisTemplate redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer ser = new Jackson2JsonRedisSerializer(Object.class);
template.setDefaultSerializer(ser);
return template;
}
@Bean
public CacheManager cacheManager() {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 配置序列化(解决乱码的问题)
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1))//设置过期时间
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}注意:记得要引入redis的依赖以及开启缓存注解哦,针对springsecurity的userdetails实体类记得要加@JsonIgnore注解

新增菜单
管理员有新增菜单的权限
递归删除菜单
@Override
public void removeChildById(String id) {
List<String> idList = new ArrayList<>();
this.selectChildListById(id, idList);
idList.add(id);
//批量修改
List<EduAclPermission> list= new ArrayList<>();
for (String permissionId : idList) {
EduAclPermission permission = new EduAclPermission();
permission.setId(permissionId);
permission.setIsDeleted((Byte.valueOf("1")));
list.add(permission);
}
this.updateBatchById(list);
}修改菜单
树形菜单递归查询
这个是菜单管理列表页使用
根据角色获取菜单
这个是为角色分配菜单前查询该角色的历史菜单使用
给角色分配权限
分配权限。其实就是分配菜单,填充菜单的角色之间的中间表
好博客就要一起分享哦!分享海报
此处可发布评论
评论(6)展开评论
蓝色妖姬
能力:10
2023-05-16 18:56:30
学懂了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。一点点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。丫
点击查看更多评论
展开评论
您可能感兴趣的博客
他的专栏
他感兴趣的技术


新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成