第六次课:动态菜单-后端接口

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: springboot 专栏: 在线教育项目实战 标签: 动态菜单-后端接口

2023-05-11 12:02:08 460浏览

动态菜单后端接口

权限模块准备工作

我们模仿若依的菜单效果

http://vue.ruoyi.vip/

根据用户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-18 14:11:42

李灿我爱你哦
周杰伦 能力:10

2023-05-18 14:10:46

那我就开心
蓝色妖姬 能力:10

2023-05-18 13:39:41

我不装了,我摊牌了,我没学懂
蓝色妖姬 能力:10

2023-05-16 18:56:30

学懂了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。一点点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。丫
周杰伦 能力:10

2023-05-16 09:24:23

天天学 学懂了嘛
蓝色妖姬 能力:10

2023-05-15 10:27:08

学习中
点击查看更多评论

展开评论

您可能感兴趣的博客

客服QQ 1913284695