第六次课:动态菜单-后端接口
分类: springboot 专栏: 在线教育项目实战 标签: 动态菜单-后端接口
2023-05-11 12:02:08 460浏览
动态菜单后端接口
权限模块准备工作
我们模仿若依的菜单效果
根据用户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
学懂了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。一点点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。丫
点击查看更多评论
展开评论
您可能感兴趣的博客
他的专栏
他感兴趣的技术