若依后台权限核心:Spring Security 认证授权详解

简介: 若依(RuoYi)框架整合 Spring Security 的具体实现方式,我会从核心原理、整合步骤、关键配置、实战示例四个维度,结合若依前后端分离版(Spring Boot + Vue)的特点,给出可直接落地的整合方案,帮你理解若依是如何基于 Spring Security 实现权限管控

 你想了解若依(RuoYi)框架整合 Spring Security 的具体实现方式,我会从核心原理、整合步骤、关键配置、实战示例四个维度,结合若依前后端分离版(Spring Boot + Vue)的特点,给出可直接落地的整合方案,帮你理解若依是如何基于 Spring Security 实现权限管控的:


最新版本若依源码下载:

https://gitee.com/ruoyieleadmin/ruoyi-ele-admin


一、核心原理:若依与 Spring Security 的整合逻辑

若依框架原生已深度整合 Spring Security,并非 “额外整合”,其核心逻辑是:

  1. Spring Security 提供基础的认证(登录)、授权(权限校验)、资源拦截能力;
  2. 若依在此基础上扩展了基于 RBAC 的权限模型(用户 - 角色 - 菜单 - 按钮)、JWT 令牌、自定义权限校验规则,适配后台管理系统的复杂权限需求;
  3. 核心交互流程:

image.gif 编辑

二、关键整合步骤(若依原生实现,可参考改造)

以下是若依整合 Spring Security 的核心配置步骤,你可基于此理解或自定义扩展:

步骤 1:引入核心依赖(若依已内置)

ruoyi-admin/pom.xml 中,若依已引入 Spring Security 及 JWT 相关依赖:

<!-- Spring Security 核心依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- JWT 依赖(若依自定义扩展) -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

image.gif

步骤 2:配置 Spring Security 核心配置类

若依的 SecurityConfig.java 是整合核心,负责配置认证管理器、资源拦截规则、自定义过滤器等:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // 注入若依自定义用户认证逻辑
    @Autowired
    private UserDetailsService userDetailsService;
    // 注入JWT认证过滤器
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    // 注入自定义未授权处理类
    @Autowired
    private AuthenticationEntryPointImpl unauthorizedHandler;
    // 注入自定义登出成功处理类
    @Autowired
    private LogoutSuccessHandlerImpl logoutSuccessHandler;
    /**
     * 配置认证管理器
     */
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
    /**
     * 配置密码加密方式
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    /**
     * 配置用户认证逻辑
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
    /**
     * 配置资源拦截规则
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 关闭跨域防护
            .cors().and().csrf().disable()
            // 未授权处理
            .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
            // 无状态会话,不创建Session
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
            // 配置拦截规则
            .authorizeRequests()
            // 放行登录接口、验证码接口、静态资源
            .antMatchers("/login", "/captchaImage").anonymous()
            // 放行Swagger文档
            .antMatchers("/swagger/**", "/v2/api-docs", "/doc.html").permitAll()
            // 所有其他请求需要认证
            .anyRequest().authenticated()
            .and()
            // 配置登出
            .logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        
        // 添加JWT过滤器(在UsernamePasswordAuthenticationFilter之前)
        http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

image.gif

步骤 3:自定义 UserDetailsService(用户认证核心)

若依实现 UserDetailsService 接口,从数据库加载用户信息(用户名、密码、角色、权限),供 Spring Security 认证使用:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    private SysUserMapper userMapper;
    @Autowired
    private SysRoleMapper roleMapper;
    @Autowired
    private SysMenuMapper menuMapper;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 1. 查询用户基本信息
        SysUser user = userMapper.selectUserByUserName(username);
        if (StringUtils.isNull(user)) {
            throw new UsernameNotFoundException("用户不存在");
        }
        // 2. 查询用户角色
        List<SysRole> roles = roleMapper.selectRolePermissionByUserId(user.getUserId());
        // 3. 查询用户权限(菜单+按钮)
        List<String> permissions = menuMapper.selectMenuPermsByUserId(user.getUserId());
        // 4. 封装为Spring Security的UserDetails对象
        return new LoginUser(user, roles, permissions);
    }
}

image.gif

步骤 4:自定义 JWT 过滤器(令牌校验)

若依扩展 Spring Security 过滤器链,实现 JWT 令牌的校验,替代传统的 Session 认证:

@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
    @Autowired
    private TokenService tokenService;
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        // 1. 从请求头中获取token(默认Header:Authorization,前缀Bearer )
        LoginUser loginUser = tokenService.getLoginUser(request);
        // 2. 校验token有效性,且未完成认证
        if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) {
            // 3. 验证token过期时间
            tokenService.verifyToken(loginUser);
            // 4. 将用户信息存入Spring Security上下文,完成认证
            UsernamePasswordAuthenticationToken authenticationToken = 
                new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
            authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
        }
        // 继续执行过滤器链
        chain.doFilter(request, response);
    }
}

image.gif

步骤 5:自定义权限注解(接口 / 按钮级权限控制)

若依基于 Spring Security 的方法级权限控制,扩展了自定义注解 @PreAuthorize,实现细粒度权限管控:

// 示例1:接口级权限控制(仅拥有"system:user:list"权限的角色可访问)
@GetMapping("/list")
@PreAuthorize("@ss.hasPermi('system:user:list')")
public TableDataInfo list(SysUser user) {
    // 业务逻辑
}
// 示例2:角色级权限控制(仅ADMIN角色可访问)
@GetMapping("/delete")
@PreAuthorize("hasRole('ADMIN')")
public AjaxResult delete(Long userId) {
    // 业务逻辑
}

image.gif

总结

  1. 若依框架原生已深度整合 Spring Security,核心是通过扩展 UserDetailsService 实现用户认证、自定义过滤器实现 JWT 校验、@PreAuthorize 实现细粒度权限控制;
  2. 整合核心配置集中在 SecurityConfig.java,关键扩展点包括:用户信息加载、令牌校验过滤器、权限注解、异常处理;
  3. 适配业务系统时,只需基于若依的基础整合,扩展权限标识、拦截规则、异常处理即可,无需重新搭建 Spring Security 体系。


最新版本若依源码下载:

https://gitee.com/ruoyieleadmin/ruoyi-ele-admin

相关文章
|
2天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
3599 14
|
8天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
3229 27
|
13天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
6849 61
|
2天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
1225 5
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
2天前
|
人工智能 网络安全 数据安全/隐私保护
Docker部署OpenClaw(Clawdbot)攻略+阿里云部署OpenClaw 2026版教程
OpenClaw(前身为Clawdbot、Moltbot)作为一款高性能的AI代理平台,凭借自然语言驱动的任务自动化、多平台无缝协作、轻量化容器化架构等核心优势,成为2026年办公自动化、智能协作、跨端指令执行的主流工具,可实现邮件处理、日程管理、航班值机、多IM平台消息联动等丰富功能,无需复杂开发即可快速搭建专属AI助手。Docker作为轻量级容器化技术,能完美解决OpenClaw部署过程中的环境冲突、依赖配置、跨平台兼容等问题,实现一键搭建、快速启动、灵活迁移的部署体验。
1005 2
|
30天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
45457 158
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
4天前
|
存储 人工智能 BI
2026年OpenClaw(Clawdbot)极简部署:接入小红书全自动运营,一个人=一支团队
2026年的小红书运营赛道,AI自动化工具已成为核心竞争力。OpenClaw(原Clawdbot)凭借“Skill插件化集成、全流程自动化、跨平台联动”的核心优势,彻底颠覆传统运营模式——从热点追踪、文案创作、封面设计到自动发布、账号互动,仅需一句自然语言指令,即可实现全链路闭环。而阿里云作为OpenClaw官方推荐的云端部署载体,2026年推出专属秒级部署方案,预装全套运行环境与小红书运营插件,让零基础用户也能10分钟完成部署,轻松拥有7×24小时在线的“专属运营团队”。
1115 4
|
8天前
|
人工智能 自然语言处理 安全
2026年OpenClaw Skills安装指南:Top20必装清单+阿里云上部署实操(附代码命令)
OpenClaw(原Clawdbot)的强大之处,不仅在于其开源免费的AI执行引擎核心,更在于其庞大的Skills生态——截至2026年2月,官方技能市场ClawHub已收录1700+各类技能插件,覆盖办公自动化、智能交互、生活服务等全场景。但对新手而言,面对海量技能往往无从下手,盲目安装不仅导致功能冗余,还可能引发权限冲突与安全风险。
1724 9
|
5天前
|
人工智能 JavaScript API
2026年Windows系统本地部署OpenClaw指南:附阿里云简易部署OpenClaw方案,零技术基础也能玩转AI助手
在AI办公自动化全面普及的2026年,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言指令操控、多任务自动化执行、多工具无缝集成”的核心优势,成为个人与轻量办公群体打造专属AI助手的首选。它彻底打破了传统AI“只会对话不会执行”的局限——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可灵活接入通义千问、OpenAI等云端API,或利用本地GPU运行模型,真正实现“聊天框里办大事”。
1137 2

热门文章

最新文章