若依源码分析(5)——菜单管理

菜单管理 /system/menu

在这里插入图片描述

/**
 * 菜单信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/menu")
public class SysMenuController extends BaseController
{
   
    private String prefix = "system/menu";

    @Autowired
    private ISysMenuService menuService;

    @RequiresPermissions("system:menu:view")
    @GetMapping()
    public String menu()
    {
   
        // 跳转到menu.html
        return prefix + "/menu";
    }
    
    //下面为各种Controller...
}

菜单信息显示 /system/menu/list

/**
     * 菜单列表展示
     * @param menu
     * @return
     */
    @RequiresPermissions("system:menu:list")
    @PostMapping("/list")
    @ResponseBody
    public List<SysMenu> list(SysMenu menu)
    {
   
        // 传进来的menu为null
        // 获取当前登录用户的userId
        // 因为有权限的限制,拥有不同权限的用户显示的菜单是不一样的
        Long userId = ShiroUtils.getUserId();
        // 根据当前用户id查询菜单列表
        // 根据传入的id来判断其对应具有的权限
        // 先查userId -> 查roleId -> 查menuId
        List<SysMenu> menuList = menuService.selectMenuList(menu, userId);
        // 返回响应数据@ResponseBody
        return menuList;
    }

service层 将userId放入menu的params字段中,传给dao层

 /**
     * 查询菜单集合
     * 
     * @return 所有菜单信息
     */
    @Override
    public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
    {
   
        List<SysMenu> menuList = null;
        if (SysUser.isAdmin(userId))
        {
   
            // 管理员拥有所有权限,直接查询所有menu信息
            menuList = menuMapper.selectMenuList(menu);
        }
        else
        {
   
            // 不是管理员权限,将userId放入params的请求参数中
            // 会根据权限隐藏相应的信息
            menu.getParams().put("userId", userId);
            // 根据userId查询
            menuList = menuMapper.selectMenuListByUserId(menu);
        }
        return menuList;
    }

pojo - sys_menu表

/**
 * 菜单权限表 sys_menu
 * 
 * @author ruoyi
 */
public class SysMenu extends BaseEntity
{
   
    private static final long serialVersionUID = 1L;

    /** 菜单ID */
    private Long menuId;

    /** 菜单名称 */
    private String menuName;

    /** 父菜单名称 */
    private String parentName;

    /** 父菜单ID */
    private Long parentId;

    /** 显示顺序 */
    private String orderNum;

    /** 菜单URL */
    private String url;

    /** 打开方式:menuItem页签 menuBlank新窗口 */
    private String target;

    /** 类型:0目录,1菜单,2按钮 */
    private String menuType;

    /** 菜单状态:0显示,1隐藏 */
    private String visible;

    /** 权限字符串 */
    private String perms;

    /** 菜单图标 */
    private String icon;

    /** 子菜单 */
    private List<SysMenu> children = new ArrayList<SysMenu>();

    public Long getMenuId()
    {
   
        return menuId;
    }

    public void setMenuId(Long menuId)
    {
   
        this.menuId = menuId;
    }

    @NotBlank(message = "菜单名称不能为空")
    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
    public String getMenuName()
    {
   
        return menuName;
    }

    public void setMenuName(String menuName)
    {
   
        this.menuName = menuName;
    }

    public String getParentName()
    {
   
        return parentName;
    }

    public void setParentName(String parentName)
    {
   
        this.parentName = parentName;
    }

    public Long getParentId()
    {
   
        return parentId;
    }

    public void setParentId(Long parentId)
    {
   
        this.parentId = parentId;
    }

    @NotBlank(message = "显示顺序不能为空")
    public String getOrderNum()
    {
   
        return orderNum;
    }

    public void setOrderNum(String orderNum)
    {
   
        this.orderNum = orderNum;
    }

    @Size(min = 0, max = 200, message = "请求地址不能超过200个字符")
    public String getUrl()
    {
   
        return url;
    }

    public void setUrl(String url)
    {
   
        this.url = url;
    }

    public String getTarget
  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
加壳是指将一个已经编译好的可执行文件,通过加密、压缩等手段,使其变得难以被反汇编和逆向工程,从而提高软件的安全性。其中,UPX 是一种常用的加壳工具,可以将 Windows 和 Linux 下的可执行文件进行压缩和加密。 下面我们来分析一下 UPX 的加壳原理: 1. 文件压缩 UPX 首先对可执行文件进行压缩,可以使用多种压缩算法,包括 LZMA、LZ77 和 Huffman 等。这些算法可以将文件中的重复数据或者无效数据进行删除或者压缩,从而减小文件的体积。 2. 加密 UPX 还可以对压缩后的文件进行加密,可以使用多种加密算法,包括 Blowfish、AES 和 RC4 等。加密可以使得文件内容变得难以被窃取和分析,从而提高软件的安全性。 3. 重定位 由于压缩和加密可能会影响可执行文件的结构,因此 UPX 还需要对文件进行重定位,以确保可执行文件在运行时能够正确加载和执行。重定位是指将可执行文件中的函数地址和数据地址进行修改,使得它们能够正确地指向压缩和加密后的数据。 4. 解压 当可执行文件被运行时,UPX 会先解压它,然后将它加载到内存中,并将其重定位。解压是指将压缩和加密后的文件恢复成原来的可执行文件,以便能够正确地执行其中的函数和数据。 总的来说,UPX 的加壳原理就是通过文件压缩、加密和重定位等手段,使得可执行文件变得难以被分析和逆向工程。但是,需要注意的是,UPX 只是一种基本的加壳工具,对于一些高级的反调试和反反汇编技术,可能并不能有效地提高软件的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值