SpringBoot入门实战:SpringBoot整合Shiro

1.背景介绍

SpringBoot是一个用于快速开发Spring应用程序的框架。它的核心是对Spring框架的一层封装,使其更加简单易用。SpringBoot整合Shiro是一种将SpringBoot与Shiro整合的方法,以实现身份验证和授权功能。

Shiro是一个强大的Java安全框架,它提供了身份验证、授权、密码存储和会话管理等功能。Shiro可以与Spring框架整合,以实现更强大的安全功能。

在本文中,我们将介绍如何将SpringBoot与Shiro整合,以实现身份验证和授权功能。我们将从背景介绍、核心概念与联系、核心算法原理和具体操作步骤、数学模型公式详细讲解、具体代码实例和详细解释说明等方面进行讲解。

2.核心概念与联系

在整合SpringBoot和Shiro之前,我们需要了解一些核心概念和联系。

2.1 SpringBoot

SpringBoot是一个用于快速开发Spring应用程序的框架。它的核心是对Spring框架的一层封装,使其更加简单易用。SpringBoot提供了许多预先配置好的依赖项,以及一些自动配置功能,使得开发者可以更快地开发应用程序。

2.2 Shiro

Shiro是一个强大的Java安全框架,它提供了身份验证、授权、密码存储和会话管理等功能。Shiro可以与Spring框架整合,以实现更强大的安全功能。

2.3 SpringBoot与Shiro的整合

SpringBoot与Shiro的整合是为了实现身份验证和授权功能的。通过整合Shiro,我们可以在SpringBoot应用程序中实现身份验证和授权功能,以提高应用程序的安全性。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

在本节中,我们将详细讲解Shiro的核心算法原理、具体操作步骤以及数学模型公式。

3.1 Shiro的核心算法原理

Shiro的核心算法原理包括:

  • 身份验证:Shiro提供了多种身份验证方式,如密码验证、Token验证等。身份验证的核心原理是通过比较用户输入的密码与数据库中存储的密码来验证用户身份。
  • 授权:Shiro提供了多种授权方式,如基于角色的授权、基于资源的授权等。授权的核心原理是通过检查用户的角色和权限来决定用户是否具有访问某个资源的权限。
  • 密码存储:Shiro提供了多种密码存储方式,如MD5、SHA-1等。密码存储的核心原理是通过对密码进行加密存储,以保护密码的安全性。
  • 会话管理:Shiro提供了会话管理功能,用于管理用户的会话。会话管理的核心原理是通过对会话进行跟踪和管理,以保证用户的会话安全。

3.2 Shiro的具体操作步骤

Shiro的具体操作步骤包括:

  1. 配置Shiro的依赖项:在项目的pom.xml文件中添加Shiro的依赖项。
  2. 配置Shiro的Filter:在项目的Web配置类中添加Shiro的Filter,以实现身份验证和授权功能。
  3. 配置Shiro的Realm:在项目的Shiro配置类中添加Shiro的Realm,以实现数据库的访问。
  4. 配置Shiro的权限和角色:在项目的Shiro配置类中添加Shiro的权限和角色,以实现授权功能。
  5. 配置Shiro的密码存储:在项目的Shiro配置类中添加Shiro的密码存储,以实现密码的存储和加密功能。
  6. 配置Shiro的会话管理:在项目的Shiro配置类中添加Shiro的会话管理,以实现会话的跟踪和管理功能。

3.3 Shiro的数学模型公式

Shiro的数学模型公式包括:

  • 身份验证的数学模型公式:f(x) = \begin{cases} 1, & \text{if } x = \text{password} \\ 0, & \text{otherwise} \end{cases}
  • 授权的数学模型公式:g(x, y) = \begin{cases} 1, & \text{if } x \in y \\ 0, & \text{otherwise} \end{cases}
  • 密码存储的数学模型公式:h(x) = \text{encrypt}(x)
  • 会话管理的数学模型公式:s(x) = \text{session}(x)

4.具体代码实例和详细解释说明

在本节中,我们将通过一个具体的代码实例来详细解释Shiro的使用方法。

4.1 项目结构

项目的结构如下:

- src- main- java- com- example- shiro- ShiroConfig.java- ShiroFilter.java- ShiroRealm.java- resources- application.properties

4.2 ShiroConfig.java

ShiroConfig.java是项目的Shiro配置类,用于配置Shiro的Filter、Realm、权限、角色、密码存储和会话管理。

@Configuration
@ComponentScan("com.example.shiro")
public class ShiroConfig {@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(ShiroRealm shiroRealm) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager());shiroFilterFactoryBean.setLoginUrl("/login");shiroFilterFactoryBean.setSuccessUrl("/index");shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");Map<String, String> filterChainDefinitionMap = new HashMap<>();filterChainDefinitionMap.put("/login", "anon");filterChainDefinitionMap.put("/logout", "logout");filterChainDefinitionMap.put("/unauthorized", "anon");filterChainDefinitionMap.put("/", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}@Beanpublic ShiroRealm shiroRealm() {return new ShiroRealm();}@Beanpublic DefaultWebSecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(shiroRealm());securityManager.setCacheManager(cacheManager());return securityManager;}@Beanpublic CachingRealm cachingRealm() {CachingRealm cachingRealm = new CachingRealm();cachingRealm.setRealm(shiroRealm());return cachingRealm;}@Beanpublic SimpleAuthorizationInfo authorizationInfo() {SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();authorizationInfo.addRole("admin");authorizationInfo.addStringPermission("admin:view");return authorizationInfo;}@Beanpublic SimpleAuthenticationInfo authenticationInfo() {SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo("admin", "admin", "admin");return authenticationInfo;}@Beanpublic CacheManager cacheManager() {SimpleCacheManager cacheManager = new SimpleCacheManager();cacheManager.setCaches(Collections.singletonMap("shiro-cache", new EhCacheManager("shiro-cache")));return cacheManager;}
}

4.3 ShiroFilter.java

ShiroFilter.java是项目的Shiro的Filter,用于实现身份验证和授权功能。

@Component
public class ShiroFilter extends OncePerRequestFilter {@Autowiredprivate ShiroRealm shiroRealm;@Overrideprotected boolean shouldConvertException(Exception ex, HttpServletRequest request, HttpServletResponse response) {return false;}@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {try {ShiroFilterChain filterChain = new ShiroFilterChain(request, response, filterChain);filterChain.doFilter();} catch (Exception ex) {if (ex instanceof UnknownAccountException) {response.sendRedirect("/login");} else {response.sendRedirect("/unauthorized");}}}
}

4.4 ShiroRealm.java

ShiroRealm.java是项目的Shiro的Realm,用于实现数据库的访问。

public class ShiroRealm extends AuthorizingRealm {@Autowiredprivate UserService userService;@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {String username = (String) token.getPrincipal();User user = userService.findByUsername(username);if (user == null) {throw new UnknownAccountException("Unknown user: " + username);}SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, user.getPassword(), getName());return authenticationInfo;}@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();User user = (User) principals.getPrimaryPrincipal();authorizationInfo.addRole(user.getRole());authorizationInfo.addStringPermission(user.getPermission());return authorizationInfo;}
}

5.未来发展趋势与挑战

在未来,Shiro可能会发展为更强大的安全框架,提供更多的安全功能和更好的性能。同时,Shiro也可能会面临更多的挑战,如如何保护应用程序免受新型攻击的挑战,如如何提高应用程序的安全性的挑战等。

6.附录常见问题与解答

在本节中,我们将列出一些常见问题及其解答。

6.1 问题1:如何配置Shiro的Filter?

答案:在项目的Web配置类中添加Shiro的Filter,如下所示:

@Configuration
@ComponentScan("com.example.shiro")
public class ShiroConfig {@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(ShiroRealm shiroRealm) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager());shiroFilterFactoryBean.setLoginUrl("/login");shiroFilterFactoryBean.setSuccessUrl("/index");shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");Map<String, String> filterChainDefinitionMap = new HashMap<>();filterChainDefinitionMap.put("/login", "anon");filterChainDefinitionMap.put("/logout", "logout");filterChainDefinitionMap.put("/unauthorized", "anon");filterChainDefinitionMap.put("/", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}
}

6.2 问题2:如何配置Shiro的Realm?

答案:在项目的Shiro配置类中添加Shiro的Realm,如下所示:

@Bean
public ShiroRealm shiroRealm() {return new ShiroRealm();
}

6.3 问题3:如何配置Shiro的权限和角色?

答案:在项目的Shiro配置类中添加Shiro的权限和角色,如下所示:

@Bean
public SimpleAuthorizationInfo authorizationInfo() {SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();authorizationInfo.addRole("admin");authorizationInfo.addStringPermission("admin:view");return authorizationInfo;
}@Bean
public SimpleAuthenticationInfo authenticationInfo() {SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo("admin", "admin", "admin");return authenticationInfo;
}

6.4 问题4:如何配置Shiro的密码存储?

答案:在项目的Shiro配置类中添加Shiro的密码存储,如下所示:

@Bean
public CacheManager cacheManager() {SimpleCacheManager cacheManager = new SimpleCacheManager();cacheManager.setCaches(Collections.singletonMap("shiro-cache", new EhCacheManager("shiro-cache")));return cacheManager;
}

6.5 问题5:如何配置Shiro的会话管理?

答案:在项目的Shiro配置类中添加Shiro的会话管理,如下所示:

@Bean
public DefaultWebSecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(shiroRealm());securityManager.setCacheManager(cacheManager());return securityManager;
}

7.总结

在本文中,我们详细介绍了如何将SpringBoot与Shiro整合,以实现身份验证和授权功能。我们介绍了Shiro的核心概念、联系、算法原理、操作步骤以及数学模型公式。同时,我们通过一个具体的代码实例来详细解释Shiro的使用方法。最后,我们总结了一些常见问题及其解答。希望本文对您有所帮助。



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489050.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法&#xff08;Least Squares Metho…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上&#xff0c;鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

超燃!纯AI生成《泰坦尼克号》大片!浙大阿里发布MovieDreamer:超长电影生成“梦工厂“

论文链接&#xff1a;https://arxiv.org/pdf/2407.16655 项目主页&#xff1a;https://aim-uofa.github.io/MovieDreamer/ github链接&#xff1a;https://github.com/aim-uofa/MovieDreamer 亮点直击 MovieDreamer&#xff0c;一个新颖的分层框架&#xff0c;将自回归模型与扩…

正则表达式与文本处理

目录 一、正则表达式 1、正则表达式定义 1.1正则表达式的概念及作用 1.2、正则表达式的工具 1.3、正则表达式的组成 2、基础正则表达式 3、扩展正则表达式 4、元字符操作 4.1、查找特定字符 4.2、利用中括号“[]”来查找集合字符 4.3、查找行首“^”与行尾字符“$”…

前端江湖:从菜鸟到大侠的修炼手册

在这个数字编织的梦幻世界里&#xff0c;前端&#xff0c;这个听起来就带着几分仙气与神秘感的词汇&#xff0c;实则是每一位互联网探险家手中的魔法杖。它不仅连接着代码的冰冷逻辑与用户的炽热情感&#xff0c;更在无数次的点击与滑动间&#xff0c;绘制出一幅幅绚丽多彩的交…

通过IP获取对应的经纬度地区

背景 项目现在要通过IP获取对应的地区和经纬度。后面会根据经纬度在地图上展示 直接用大佬给出的ip-info 这是大佬给的项目地址 https://gitee.com/jthinking/ip-info这是运行实例 感谢大佬打赏 ![在这里插入图片描述]

怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由 怎样在 Nginx 中配置基于请求客户端指纹识别数据的路由 在当今数字化的世界中&#xff0c;网站和应用程…

谷粒商城实战笔记-69-商品服务-API-品牌管理-JSR303自定义校验注解

文章目录 1. 需求介绍2. 创建自定义校验注解2.1 编写自定义校验注解2.1.1 注解定义2.1.2 配置文件 3. 实现自定义校验器3.1 编写自定义校验器 4. 使用自定义校验5. 多类型校验器的支持6. 测试 上一节讲解了如何使用分组校验。 这一节将详细介绍如何在Java中实现自定义校验注解以…

步进电机常见的三种驱动方式

步进电机是一种作为控制用的特种电机, 它的旋转是以固定的角度(称为"步距角")一步一步运行的, 其特点是没有积累误差( 为100%), 所以广泛应用于各种开环控制。 步进电机的运行要有一电子装置进行驱动, 这种装置就是步进电机驱动器, 它是把控制系统发出的脉冲信号转化…

宝塔单ip,新建多站点

报错如上&#xff1a; 那么如何新建多站点呢 先随便写个名字上去&#xff0c;然后再重新绑定别的端口… 这个时候访问99端口即可 。 如果是有域名&#xff0c;则不需要这样做 、直接80端口也可以多站点

富芮坤FR800X系列之按键检测模块设计

FR800X系列按键检测模块 读者对象&#xff1a; 本文档主要适用以下工程师&#xff1a; 嵌入式系统工程师 单片机软件工程师 IOT固件工程师 BLE固件工程师 文章目录 1.概要2.用户如何设计按键检测模块2.1 GPIO初始化2.2按键模块初始化2.3设计中断函数&#xff1a;2.4循环…

Florence2:Advancing a unified representation for a variety of vision tasks

Florence-2模型:开启统一视觉基础模型的新篇章_florence -2-CSDN博客文章浏览阅读1.1k次,点赞108次,收藏109次。Florence-2是由微软Azure AI团队开发的一款多功能、统一的视觉模型。它通过统一的提示处理不同的视觉任务,表现出色且优于许多大型模型。Florence-2的设计理念是…

ArcSDE超过连接数解决方案

问题说明&#xff1a;服务器间歇性的会报连接数超限的问题&#xff0c;经常需要手动释放部分连接才能解决。之前遇到过类似的问题&#xff0c;主要是增大数据库连接数&#xff0c;同时检查死链接的情况&#xff0c;因为修改配置需要重启数据库&#xff0c;所以前期一直手动释放…

谷粒商城实战笔记-62-商品服务-API-品牌管理-OSS整合测试

文章目录 一&#xff0c;Java中上传文件到阿里云OSS1&#xff0c;整合阿里云OSS2&#xff0c;测试上传文件 二&#xff0c;Java中整合阿里云OSS服务指南引言准备工作1. 注册阿里云账号2. 获取Access Key3. 添加依赖 实现OSS客户端1. 初始化OSSClient2. 创建Bucket3. 上传文件4.…

初识Play Framework框架和第一个Java play web项目的创建

文章目录 初识Play Framework框架和第一个Java play web项目的创建一、简介特点架构开发流程示例代码总结 二、创建第一个Java play web项目1、下载play框架&#xff0c;配置系统环境变量(jdk的安装就不再说了) 2、检查play的版本和创建第一个play项目3、将项目通过idea或eclip…

福特汽车:总是悲喜交加时

每辆电动汽车的亏损高达6.94万美元&#xff0c;这把全美最大汽车制造商——福特汽车&#xff0c;也整不会了。 燃油车全美销量第一、电动车全美销量第二&#xff0c;销量大增的福特汽车增收不增利&#xff0c;息税前利润下滑27%至28亿美元&#xff0c; 因盈利远不及预期&#x…

【Python】pandas:查看数据(head, tail, values属性, at, iat, loc, iloc, [ ], sample)

pandas是Python的扩展库&#xff08;第三方库&#xff09;&#xff0c;为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。 pandas官方文档&#xff1a;User Guide — pandas 2.2.2 documentation (pydata.org) 帮助&#xff1a;可使用help(...)查看函数说明文…

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码&#xff1a; package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…

Linux 查找命令

目录 1. 查看二进制文件 which 2. 查看指定文件 find ​2.1 文件名查找 2.2 文件大小查找 前面学习过的 Linux 命令&#xff0c;其实质是一个个的二进制可执行程序&#xff0c;与 Windows 系统中的 .exe 文件是一个意思。 1. 查看二进制文件 which 语法&#xff1a; w…

sonar代码扫描报错:ERROR: Something went wrong storing the PDF at server side.

原因&#xff1a; URL带“/”引起的&#xff0c;去掉即可。 去掉之后成功&#xff1a;