SpringBoot搭建Shiro的快速入门

1. Shiro

Shiro官网

1.1 Shiro简介

以下为Shiro的简单介绍:

  1. Shiro 是一个强大、简单易用的 Java 安全权限框架
  2. Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在 JavaEE 环境
  3. Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存等。

具体的信息可进一步查看Shiro官网

1.2 Shiro三大核心组件

Shiro 有三大核心组件,即 Subject、SecurityManager 和 Realm。它们的关系如下图:
在这里插入图片描述

1.2.1 Subject

Subject 为认证主体,它包含 Principals 和 Credentials 两个信息。

  • Principals:代表身份。可以是用户名、邮件、手机号码等等,用来标识一个登录主体的身份
  • Credentials:代表凭证。常见的有密码,数字证书等等。

简单来说:这两者代表了需要认证的内容,最常见的便是用户名、密码了

1.2.2 SecurityManager

SecurityManager 为安全管理员,它是Shiro 架构的核心。所有具体的交互都通过SecurityManager进行控制;负责所有Subject、且负责进行认证和授权、及会话、缓存的管理

1.2.3 Realm

Realm 是一个域,它是连接 Shiro 和具体应用的桥梁。当需要与安全数据交互时,比如用户账户、访问控制等,Shiro 将会在一个或多个 Realm 中查找。

1.3 Shiro的认证和授权流程

官方的入门实例:http://shiro.apache.org/tutorial.html
大致代码如下:
shiro.ini

[users]
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz

[roles]
admin = *
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5

ini文件大致意思是:

  1. root=secret,admin:用户名root,密码secret,角色是admin
  2. schwartz=lightsaber:* :角色schwartz拥有权限 lightsaber:*

Java代码

public static void main(String[] args) {
   
	Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
	SecurityManager securityManager = factory.getInstance();
	SecurityUtils.setSecurityManager(securityManager);
	
	Subject currentUser = SecurityUtils.getSubject();
	
	if ( !currentUser.isAuthenticated() ) {
   
		UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
	    token.setRememberMe(true);
	    currentUser.login(token);
	}
	
	if ( currentUser.hasRole( "schwartz" ) ) {
   
	    log.info("May the Schwartz be with you!" );
	} else {
   
	    log.info( "Hello, mere mortal." );
	}
	
	if ( currentUser.isPermitted( "lightsaber:wield" ) ) {
   
	    log.info("You may use a lightsaber ring.  Use it wisely.");
	} else {
   
	    log.info("Sorry, lightsaber rings are for schwartz masters only.");
	}
	...
}

上面代码主要有两个步骤:
认证:

UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
token.setRememberMe(true);
currentUser.login(token);

判断权限:

currentUser.hasRole( "schwartz" )

1.3.1 认证流程

在这里插入图片描述
shiro的认证流程如下:

  1. Subject进行login操作,参数是封装了用户信息的token
  2. Security Manager进行登录操作
  3. Security Manager委托给Authenticator进行认证逻辑处理
  4. 调用AuthenticationStrategy进行多Realm身份验证
  5. 调用对应Realm进行登录校验,认证成功则返回用户属性,失败则抛出对应异常

1.3.2 授权流程

在这里插入图片描述
授权流程如下:

  1. 调用Subject.isPermitted()/hasRole()方法
  2. 委托给SecurityManager
  3. 而SecurityManager接着会委托给Authorizer
  4. Authorizer会判断Realm的角色/权限是否和传入的匹配
  5. 匹配如isPermitted/hasRole会返回true,否则返回false表示授权失败

2. SpringBoot集成Shiro并完成登录操作

2.1 项目信息

2.1.1 开发环境

IDEA:2018.2(lombok插件)
SpringBoot:2.3.1.RELEASE
Shiro:1.3.2
freemarker(前端页面)

2.1.2 项目结构图

在这里插入图片描述

2.1.3 pom依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId&
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Shiro 是 Apache 软件基金会的一个开源安全框架,提供了一整套安全管理的解决方案,包括认证、授权、加密和会话管理等功能。Shiro 的目标在于提供简单易用的 API,同时支持高度定制化的需求。 Spring Boot 是一个快速开发的框架,它可以帮助我们快速搭建一个基于 Spring 的应用程序。Spring Boot 的优势在于它内置了很多常用的依赖库和配置,使得开发者可以更加专注于业务逻辑的实现,而不用过多关注底层的配置。 集成 ShiroSpring Boot 可以为我们的应用程序提供强大的安全管理功能,并且可以快速实现这些功能。下面我们将介绍如何在 Spring Boot 中集成 Shiro。 1. 引入 Shiro 依赖 在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.2</version> </dependency> ``` 这个依赖包含了 Shiro 的核心库以及与 Spring 集成的库。 2. 配置 ShiroSpring Boot 中,我们可以通过在 application.properties 或 application.yml 文件中配置 Shiro。以下是一个示例的 YAML 配置文件: ``` server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=UTC username: root password: root shiro: loginUrl: /login successUrl: /index filterChainDefinitions: /index = authc ``` 其中 loginUrl 指定了登录页面的 URL,successUrl 指定了登录成功后跳转的 URL,filterChainDefinitions 指定了 URL 的过滤规则。 3. 编写 Shiro 相关代码 在 Spring Boot 中,我们可以使用 Shiro 的注解来实现对方法或 URL 的权限控制。以下是一个示例代码: ``` @RestController @RequestMapping("/api") public class UserController { @RequiresAuthentication @GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { // ... } @RequiresPermissions("user:create") @PostMapping("/user") public void createUser(@RequestBody User user) { // ... } @RequiresRoles("admin") @DeleteMapping("/user/{id}") public void deleteUser(@PathVariable Long id) { // ... } } ``` 在上面的代码中,@RequiresAuthentication 表示需要认证才能访问该方法,@RequiresPermissions("user:create") 表示需要拥有 user:create 权限才能访问该方法,@RequiresRoles("admin") 表示需要拥有 admin 角色才能访问该方法。 4. 启动应用程序 现在我们可以启动应用程序并访问相应的 URL。如果当前用户没有足够的权限访问某个 URL,Shiro 会自动跳转到登录页面,并在登录成功后重定向到相应的 URL。 总结 通过集成 ShiroSpring Boot,我们可以快速构建一个安全的应用程序。在实际开发中,我们可以根据实际需求来配置 Shiro,例如使用自定义的 Realm、加密算法等。通过合理的配置和使用,我们可以提高应用程序的安全性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值