SpringBoot整合Shiro实现权限控制的代码实现

下面我将为您详细讲解“SpringBoot整合Shiro实现权限控制的代码实现”的完整攻略,主要分为以下几个步骤:

1. 引入相关依赖

在 pom.xml 中添加以下依赖:

<dependencies>
    <!-- SpringBoot相关依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Shiro相关依赖 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.6.0</version>
    </dependency>

    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

2. 配置Shiro

在 application.yml 中添加以下配置:

# Shiro配置
shiro:
  # 登录地址
  loginUrl: /login
  # 权限拒绝时重定向的地址
  unauthorizedUrl: /403
  # ShiroFilter配置
  filterChainDefinitions: 
    /login: anon
    /logout: anon
    /**: authc
  # 自定义Realm
  realm:
    type: com.example.shirodemo.shiro.MyRealm

3. 自定义Realm

我们需要自定义一个 Realm 类,继承 AuthorizingRealm 类,实现其 doGetAuthorizationInfo 和 doGetAuthenticationInfo 两个方法,这两个方法分别用于授权和认证。

以下是示例代码:

@Slf4j
public class MyRealm extends AuthorizingRealm {

    /**
     * 授权
     *
     * @param principals
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        // 添加授权信息
        authorizationInfo.addRole("admin");
        authorizationInfo.addStringPermission("user:create");
        authorizationInfo.addStringPermission("user:update");
        return authorizationInfo;
    }

    /**
     * 认证
     *
     * @param authenticationToken
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
            throws AuthenticationException {
        log.info("doGetAuthenticationInfo:" + authenticationToken);

        // 根据用户名获取用户信息
        String username = authenticationToken.getPrincipal().toString();
        // 这里模拟数据库中的密码
        String password = "123456";

        if (StringUtils.isEmpty(username)) {
            throw new AccountException("用户名不能为空");
        }

        // 密码认证
        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password, getName());
        return authenticationInfo;
    }
}

4. 编写Controller

编写一个简单的Controller做测试:

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/create")
    public String createUser() {
        log.info("createUser...");
        return "createUser...";
    }

    @GetMapping("/update")
    public String updateUser() {
        log.info("updateUser...");
        return "updateUser...";
    }
}

5. 测试

启动应用,访问 http://localhost:8080/login 进行登录,登录成功后再访问 http://localhost:8080/user/create,将会因为没有 user:create 授权而被拒绝,跳转到 403 页面。

以上就是 SpringBoot 整合 Shiro 实现权限控制的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Shiro实现权限控制的代码实现 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 原因分析IDEA导入Spring-kafka项目Gradle编译失败

    下面是详细的攻略: 问题背景 在开发Spring-kafka项目时,使用IDEA作为开发工具进行import后,进行Gradle编译时会出现失败。导致编译失败的原因主要有以下几个方面: IDEA默认所使用的Gradle版本与项目Gradle版本不一致,导致编译报错 缺少项目依赖的jar包或者版本不匹配 项目配置文件配置有误 解决方案 方案一:更改Gradle…

    Java 2023年5月20日
    00
  • 如何实现Java监听器详解

    下面我将详细讲解“如何实现Java监听器详解”的完整攻略。 什么是Java监听器? 监听器是一种常用的设计模式,可以帮助我们在事件发生时进行相应的处理。在Java中,监听器就是一种回调函数,它可以在特定事件发生时被调用,用于执行相应的代码逻辑。 常用的Java监听器包括:ActionListener、MouseListener、KeyListener和Foc…

    Java 2023年5月18日
    00
  • javaweb中mysql数据库连接步骤方法及其实例

    下面是“javaweb中mysql数据库连接步骤方法及其实例”的完整攻略。 步骤一:下载并安装MySQL 这一步很简单,直接去MySQL官网下载MySQL安装包,并按照安装向导进行安装。 步骤二:创建数据库和数据表 在安装好MySQL后,通过MySQL的客户端命令行或者图形界面工具(如Navicat等)连接MySQL并创建一个新的数据库,然后在该数据库下创建…

    Java 2023年5月19日
    00
  • SpringBoot整合Mybatis与thymleft实现增删改查功能详解

    我会尽可能详细地讲解“SpringBoot整合Mybatis与Thymeleaf实现增删改查功能”的攻略,让您可以轻松实现该功能。 1. 前置条件 在开始之前,确保您已经完成以下准备工作: 安装Java JDK和IDE(如Eclipse、IntelliJ IDEA等) 掌握SpringBoot、Mybatis及Thymeleaf的基础知识 2. 创建Spri…

    Java 2023年5月20日
    00
  • springboot整合多数据源配置方式

    对于“springboot整合多数据源配置方式的完整攻略”,我会逐步进行讲解。 1. 配置数据源 在项目中引入所需的依赖,例如: <!– JDBC驱动依赖,根据数据库不同而变化 –> <dependency> <groupId>com.mysql.jdbc</groupId> <artifactId&…

    Java 2023年5月20日
    00
  • Spring Boot整合mybatis并自动生成mapper和实体实例解析

    下文将详细讲解Spring Boot整合MyBatis并自动生成mapper和实体实例的完整攻略。这个过程可以分成以下几个步骤: 导入依赖 首先,在pom.xml文件中加入MyBatis和MyBatis Generator的依赖。具体如下: <dependencies> <!– MyBatis –> <dependency&…

    Java 2023年5月19日
    00
  • win2003 jsp运行环境架设心得(jdk+tomcat)

    Win2003 JSP运行环境架设心得 (JDK+Tomcat) 完整攻略 简介 本文将介绍在Windows Server 2003操作系统上架设JSP运行环境的过程,其中涉及到JDK和Tomcat的安装、环境配置等内容。教程中会引入两个示例来展示环境搭建的实际应用。 前置知识 在开始操作前,确保您已经掌握以下知识: Windows Server 2003操…

    Java 2023年5月19日
    00
  • Java中char[]输出不是内存地址的原因详解

    题目:Java中char[]输出不是内存地址的原因详解 为什么Java中char[]数组的输出结果不是内存地址呢?这个问题很多Java初学者都会遇到,下面就给大家详细讲解Java中char[]数组的特性。 char[]数组在Java中的特性 Java中的char[]数组与其他基本数据类型数组一样,是一种在内存中开辟空间的一维数组,用来存储相应的数据。 cha…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部