目录

一.引言

1.1项目背景

1.2为什么要进行权限控制?

二.前端权限控制:动态菜单与按钮显隐

2.1 动态菜单加载逻辑

2.2 按钮级权限控制

三、后端权限验证:Spring Security 与接口注解

3.1 Spring Security 认证流程

        1. 请求拦截与凭证封装

        2.UserDetailsService 加载用户角色与权限

        3.Authentication 对象存入 SecurityContextHolder

3.2授权阶段

四.实战:新增自定义接口与权限验证

4.1创建新接口

4.2添加权限标识到菜单

4.3角色分配权限

4.2 前端配置

五.测试

5.1登录普通账号,给权限测试

5.2登录普通账号,不给权限测试

六、总结:构建高安全性的权限系统

一.引言

1.1项目背景

Ruoyi-Vue(若依管理系统)是一个基于 Spring Boot + Vue 的前后端分离框架,广泛用于企业级应用开发。其权限控制系统以 RBAC(Role-Based Access Control) 为核心,结合前端动态渲染与后端接口校验,实现了“菜单显隐 + 接口拦截”的双重安全防护。

1.2为什么要进行权限控制?

  • 安全性:防止未授权用户访问敏感功能(如删除数据、修改配置)
  • 灵活性:支持动态角色分配与权限变更(无需重启服务)
  • 数据隔离:不同用户只能查看/操作其权限范围内的数据(如部门经理仅查看本部门数据)

二.前端权限控制:动态菜单与按钮显隐

2.1 动态菜单加载逻辑

用户登录后,前端通过 GET /getInfo 接口获取权限菜单,并动态生成路由:

2.2 按钮级权限控制

通过 Vue 自定义指令 v-hasPermi 控制按钮显隐:

三、后端权限验证:Spring Security 与接口注解

3.1 Spring Security 认证流程

        1. 请求拦截与凭证封装

        用户提交登录表单(UsernamePasswordAuthenticationFilter作为 Spring Security 过滤器链中的关键组件,负责拦截并处理认证请求,提取并封装凭证:

   public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
        if (this.postOnly && !request.getMethod().equals("POST")) {
            throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
        } else {
            String username = this.obtainUsername(request);
            username = username != null ? username.trim() : "";
            String password = this.obtainPassword(request);
            password = password != null ? password : "";
            UsernamePasswordAuthenticationToken authRequest = UsernamePasswordAuthenticationToken.unauthenticated(username, password);
            this.setDetails(request, authRequest);
            return this.getAuthenticationManager().authenticate(authRequest);
        }
    }
        2.UserDetailsService 加载用户角色与权限

        从数据源获取用户详细信息(包括角色和权限)

        3.Authentication 对象存入 SecurityContextHolder

        将认证结果存储到当前请求的线程上下文中

3.2授权阶段

通过 @PreAuthorize 注解校验接口权限:

四.实战:新增自定义接口与权限验证

4.1创建新接口

4.2添加权限标识到菜单

4.3角色分配权限

4.2 前端配置

设置权限控制

设置提示信息

五.测试

5.1登录普通账号,给权限测试

5.2登录普通账号,不给权限测试

六、总结:构建高安全性的权限系统

  • 双校验机制:前端控制显隐,后端控制访问
  • RBAC 模型优势:通过角色聚合权限,简化管理
  • 动态权限加载:Redis 缓存与实时更新保障灵活性

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐