SpringBoot进阶之整合Shiro鉴权框架(四)

简介: SpringBoot进阶之整合Shiro鉴权框架(四)

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶, 篇幅会较多~


适合人群

  • 学完Java基础
  • 想通过Java快速构建web应用程序
  • 想学习或了解SpringBoot
  • SpringBoot进阶学习

大佬可以绕过 ~


背景

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获~


情景回顾

上期带大家学习了Shiro中如何记录用户状态,本期将带大家学习Shiro中如何进行权限认证。同样的,我们集成到Springboot中。


doGetAuthenticationInfo()

还记得之前带大家实现的doGetAuthenticationInfo()方法实现的用户认证吗,其实还有一个,我们可以用它实现权限控制,这里我们基于RBAC基于用户角色来控制权限, 之前有一个方法没实现,我们现在实现一下:

/**
     * 获取用户角色和权限
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        String userName = user.getUsername();
        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
        // 获取用户角色
        Set<String> roleSet = new HashSet<>();
        String role = UserMock.getRole(userName);
        roleSet.add(role);
        simpleAuthorizationInfo.setRoles(roleSet);
        // 获取用户权限
        String permission = UserMock.getPermission(userName);
        Set<String> permissionSet = new HashSet<String>();
        permissionSet.add(permission);
        simpleAuthorizationInfo.setStringPermissions(permissionSet);
        return simpleAuthorizationInfo;
    }
复制代码


开启权限注解

Shiro中,为我们提供了一列好用的注解,我们一起看一下:

// 表示Subject已经通过login身份验证
@RequiresAuthentication  
// 表示当前是用户身份
@RequiresUser  
// 表示当是游客身份。
@RequiresGuest  
// 表示当前需要的角色
@RequiresRoles(value={"admin", "user"}, logical= Logical.AND)  
// 表示当前需要的权限
@RequiresPermissions (value={"p:admin", "p:user"}, logical= Logical.OR)
复制代码


使用它之前,我们需要开启它的注解,怎么做呢?在ShiroConfig中加入:

@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
}
复制代码


下面直接使用就可以了:

@RestController
public class IndexController {
    @RequiresPermissions("p:user")
    @RequestMapping("/index")
    public String index(Model model) {
        // 登录成后,即可通过Subject获取登录的用户信息
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        model.addAttribute("user", user);
        return "index --->" + user.getUsername();
    }
}
复制代码


这样就可以了, 很简单,大家可以自己运行一下。还有一个疑问❓用户没有权限,我想自定义返回错误信息怎么办呢?很简单,我们一起看一下


权限异常捕获

还记得之前教大家的全局已经捕获吗?没错我们只要在那里加上要捕获的异常类就好了,实际上它是抛出了AuthorizationException的异常

@ControllerAdvice
public class ExceptionController {
    @ExceptionHandler(value = AuthorizationException.class)
    public String handleAuthorizationException() {
        return "您当前没有权限访问~ 请联系管理员";
    }
}
复制代码

这样就可以了~


结束语

本期内容就到这里结束了,总结一下,本节主要讲了Shiro如何进行权限认证以及常用的权限注解,大家可以自己多试试


下期预告

下期给大家讲讲Shiro中如何进行缓存,缓存对于业务来讲还是比较重要的,尤其对于量大的情况下。欢迎加群一起学习交流 ~

相关文章
|
22天前
|
安全 Java Apache
SpringBoot+Shiro(一)
SpringBoot+Shiro(一)
|
7天前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
18 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
7天前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
23 2
Springboot+shiro,完整教程,带你学会shiro
|
7天前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
102 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
4天前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
20 3
|
5天前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
|
23天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
1010 12
|
21天前
|
XML 前端开发 Java
控制spring框架注解介绍
控制spring框架注解介绍
|
21天前
|
存储 NoSQL Java
Spring Session框架
Spring Session 是一个用于在分布式环境中管理会话的框架,旨在解决传统基于 Servlet 容器的会话管理在集群和云环境中的局限性。它通过将用户会话数据存储在外部介质(如数据库或 Redis)中,实现了会话数据的跨服务器共享,提高了应用的可扩展性和性能。Spring Session 提供了无缝集成 Spring 框架的 API,支持会话过期策略、并发控制等功能,使开发者能够轻松实现高可用的会话管理。
Spring Session框架
|
1天前
|
监控 Java 开发者
BeanPostProcessor:Spring框架的灵活扩展机制
【10月更文挑战第4天】在Spring框架中,BeanPostProcessor接口是一个非常重要的扩展点,它允许开发者在Spring容器实例化、依赖注入以及初始化Bean的过程中插入自定义逻辑。
7 0