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://xiahunao.cn/news/3270024.html

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

相关文章

电影院售票网站

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 用户管理界面 正在上映管…

正则表达式 先行/后发断言

参考资料 正则表达式的先行断言(lookahead)和后行断言(lookbehind)正则表达式中分组功能高级用法前瞻断言与后瞻断言初心者歓迎&#xff01;手と目で覚える正規表現入門・その&#xff14;&#xff08;最終回&#xff09;「中級者テクニックをマスターしよう」 目录 一. Posit…

AmyloidPETNet:使用端到端深度学习对脑PET成像中的淀粉样阳性进行分类| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 AmyloidPETNet: Classification of Amyloid Positivity in Brain PET Imaging Using End-to-End Deep Learning AmyloidPETNet&#xff1a;使用端到端深度学习对脑PET成像中的淀粉样阳性进行分类 01 文献速递介绍 阿尔茨海默病 (AD) 的一个病理异常是脑内淀粉样…

JavaScript——常用库

文章目录 绪论jQuery选择器事件修改 css查找ajax setTimeout与setIntervalsetTimeoutsetInterval requestAnimationFrameMap与SetlocalStorageJSONDateWebSocketwindowcanvas结语 绪论 『时间是伟大的作家&#xff0c;总会写下完美的结局。』—— 「秋之回忆」 jQuery 这个是优…

AI绘画:艺术与科技融合的新篇章

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI绘画作为一种新兴的艺术形式&#xff0c;正逐步改变着传统艺术创作的格局。从早期的简单模仿到如今的个性化创作&#xff0c;AI绘画不仅提升了艺术创作的效率和质量&#xff0c;还开辟了全新的应用场景和商…

sizeof和strlen区别

如图&#xff0c;sizeof来计算的时候&#xff0c;得出的是计算机用多少个字节来表示一个地址 而strlen来计算的时候&#xff0c;只是计算出他的有效字符长度 打印出的不同地址就是其不同的区别

【深海王国】小学生都能玩的单片机!番外1:Arduino家族Uno-Mega-Nano-Pro Mini-ATtiny85的使用指南(3)

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来单片机的番外系列——小学生都能玩的单片机&#xff01;番外1带你快速学习认识Arduino家族&#xff1a;Uno、Mega、Nano、Pro Mi…

Java小抄|使用StopWatch输出执行耗时

文章目录 背景常用接口定义demo1 统计输出的总耗时demo2 统计最后一个任务的耗时demo3 统计多个任务的耗时占比 背景 StopWatch是spring-framwork提供的一个可以对任务执行时间进行控制的类&#xff0c;方便记录任务的开始时间和结束时间 常用接口定义 getTotalTimeSeconds(…

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace&#xff08;最好别用&#xff09; 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …

网络通信---TCP协议1

今日内容 三次握手: 指建立tcp连接时&#xff0c;需要客户端和服务端总共发送三次报文确认连接。 四次挥手&#xff1a; 断开一个tcp连接&#xff0c;需要客户端和服务端发送四个报文以确认断开。 编程模型 TCP报文 客户端 服务端

Charles实战(三)

第一章节&#xff1a;过滤 Filter Focus Recording Settings - Include Filter Focus 第二章&#xff1a;重发 简单重发&#xff1a;鼠标右键- Repeat 简单压力&#xff1a; 鼠标右键 - Repeat Advanced Iterations:重复发送多少次 20 Concurrency:每次发几组请求&#x…

23 Python常用内置函数——map()

内置函数 map() 把一个函数 func 依次映射到序列或迭代器对象的每个元素上&#xff0c;并返回一个可迭代的 map 对象作为结果&#xff0c;map 对象中的每个元素是原序列中元素经过函数 func 处理后的结果&#xff0c;map() 函数不对原序列或迭代器对象做任何修饰。 print(map(…

数字图像处理和机器视觉中的常用特殊矩阵及MATLAB实现详解

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理和机器视觉实践中&#xff0c;为了提高编程效率&#xff0c;MATLAB 提…

ResT v2 论文解读

paper&#xff1a;ResT V2: Simpler, Faster and Stronger official implementation&#xff1a;https://github.com/wofmanaf/ResT 出发点 ResTv2的设计目标是改进先前版本ResTv1的结构&#xff0c;以提高模型的效率和性能。ResTv1通过引入多尺度注意力机制&#xff08;EMS…

深入源码:解析SpotBugs静态代码分析框架 0

文章目录 引言SpotBugs概述启动附录 引言 SpotBugs是一个开源的Java静态分析工具&#xff0c;旨在帮助开发人员检测Java代码中的潜在缺陷和漏洞。以下是对SpotBugs的详细解释&#xff1a; SpotBugs概述 定义与功能&#xff1a;SpotBugs是FindBugs的继任者。FindBugs是一个广受…

甲方产品过于平庸该如何编写策划案?

面对甲方产品相对平庸的情况&#xff0c;作为策展新人&#xff0c;你需要发挥创意和策略思维&#xff0c;通过巧妙的策划来挖掘和呈现产品的独特价值&#xff0c;让观众在展馆中依然能找到吸引他们的亮点。 以下是一些建议&#xff0c;希望能帮助你编写出既真实又能吸引眼球的…

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录,注册功能实现

技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 登陆页面如下 在这个页面中我们实现了一个登录页面和一个注册页面的Jsp文件&#xff0c;和两个java 的服务层文件 分别是web包下的denglu.jsp和zhuce.jsp以…

【Django】js实现简单计算器

文章目录 完整html写script写views写urls ##需求 ##实验 完整html {% load static %} <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

【JUC】Java锁介绍

文章目录 阿里锁开发规范乐观锁和悲观锁悲观锁乐观锁 synchronized 类锁、对象锁synchronized有三种应用方式锁相关的8种案例演示&#xff08;对象锁、类锁&#xff09;标准访问ab两个线程&#xff0c;请问先打印邮件还是短信&#xff1f;sendEmail钟加入暂停3秒钟&#xff0c;…

c++入门----类与对象(中)

OK呀&#xff0c;家人们承接上文&#xff0c;当大家看过鄙人的上一篇博客后&#xff0c;我相信大家对我们的c已经有一点印象了。那么我们现在趁热打铁再深入的学习c入门的一些知识。 类的默认成员函数 首先我们学习的是我们的默认函数。不知道大家刚读这个名词是什么反应。默认…