à悟空学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr
(本节提供源代码,在最下面可以下载)距上一个章节过了二个星期了,最近时间也是比较紧,一直没有时间可以写博客,今天难得有点时间,就说说Spring Boot如何集成Shiro吧。这个章节会比较复杂,牵涉到的技术点也会比较,如果没有Spring Boot基础的还是建议先学习基础,不然此博客看起来会比较费劲。好了废话不都说了,还是开始我们的Spring Boot Shiro之旅吧。还是依照之前的风格,我们分解下我们的目标:
----------------------------------------------------------------
(1). Shiro简单介绍
(2). 集成Shiro核心分析
(3). 无Shiro的Spring Boot
(4). 集成Shiro 进行用户授权
(5). Shiro缓存
(6). Shiro记住密码
(7). Shiro验证码
-------------------------------------------------------------------
(1). Shiro简单介绍
Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与 Spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。
Apache Shiro 的三大核心组件
<!--[endif]-->
- Subject 当前用户操作
- SecurityManager 用于管理所有的Subject
- Realms 用于进行权限信息的验证,也是我们需要自己实现的。
我们需要实现Realms的Authentication 和 Authorization。其中 Authentication 是用来验证用户身份,Authorization 是授权访问控制,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。
Apache Shiro 核心通过 Filter 来实现,就好像SpringMvc 通过DispachServlet 来主控制一样。
既然是使用 Filter 一般也就能猜到,是通过URL规则来进行过滤和权限校验,所以我们需要定义一系列关于URL的规则和访问权限。
另外我们可以通过Shiro 提供的会话管理来获取Session中的信息。Shiro 也提供了缓存支持,使用 CacheManager 来管理。
完整架构图:
Shiro是很强大的一个安全框架,这里只是抛装引玉下,还有很多的需要大家自己去学习Shiro。
(2). 集成Shiro核心分析
集成Shiro的话,我们需要知道Shiro框架大概的一些管理对象。
第一:ShiroFilterFactory,Shiro过滤器工厂类,具体的实现类是:ShiroFilterFactoryBean,此实现类是依赖于SecurityManager安全管理器。
第二:SecurityManager,Shiro的安全管理,主要是身份认证的管理,缓存管理,cookie管理,所以在实际开发中我们主要是和SecurityManager进行打交道的,ShiroFilterFactory主要配置好了Filter就可以了。当然SecurityManager并进行身份认证缓存的实现,我们需要进行对应的编码然后进行注入到安全管理器中。
第三:Realm,用于身份信息权限信息的验证。
第四:其它的就是缓存管理,记住登录之类的,这些大部分都是需要自己进行简单的实现,然后注入到SecurityManager让Shiro的安全管理器进行管理就好了。
(3). 无Shiro的Spring Boot
我们先编写一个无Shiro的简单的框架,在这个框架中我们可以访问到index,login,userInfo,userInfoAdd。
这个步骤对于有Spring Boot基础的就应该很简单了,在这里简单的介绍下:
(a) 新建一个maven java project,取名为spring-boot-shiro1
(b) 在pom.xml中引入基本依赖,在这里还没有引入shiro等的依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kfit</groupId>
<artifactId>spring-boot-shiro1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-shiro1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<!--
spring boot 父节点依赖,
引入这个之后相关的引入就不需要添加version配置,
spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!-- spring boot web支持:mvc,aop... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thmleaf模板依赖. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
</project>
在这里只引入了Spirng Boot的web依赖以及对thymleaf模板引擎的依赖。
(c) 编写网页文件:
index.html,login.html,userInfo.html,userInfoAdd.html
这个文件存在在src/main/resouces/templates, 这几个文件中都是简单的代码,只有登录界面中有账号和密码:
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
<h3>index</h3>
</body>
</html>
login.html :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<body>
错误信息:<h4 th:text="${msg}"></h4>
<form action="" method="post">
<p>账号:<input type="text" name="username" value="admin"/></p>
<p>密码:<input type="text" name="password" value="123456"/></p>
<p><input type="submit" value="登录"/></p>
</form>
</body>
</html>
其它的页面都是简单的一个标签而已:
<h3>用户查询界面</h3>
<h3>用户添加界面</h3>
请自行编码。
(d)编写启动类
编写启动类com.kfit.App.java:
package com.kfit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类.
* @author Angel(QQ:412887952)
* @version v.0.1
*/
@SpringBootApplication
publicclass App {
/**
* 参数里VM参数设置为:
-javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify
* @param args
*/
publicstaticvoid main(String[] args) {
SpringApplication.run(App.class, args);
}
}
这样类似的代码我们已经介绍很多了,没有什么可以过多的介绍了,
这时候我们右键run as 运行App.java类访问index,login页面,会报Error Page,因为我们还没编写Controller处理类呢。
(e)编写HomeController类
在com.kfit.root.controller新建HomeController类:
package com.kfit.root.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
publicclass HomeController {
@RequestMapping({"/","/index"})
public String index(){
return"/index";
}
@RequestMapping(value="/login",method=RequestMethod.GET)
public String login(){
return"login";
}
}
在这里我们并没有把UserInfo对应的处理也在页面进行编码了,因为之后我们创建了UserInfo之后,打算新建一个UserInfoController进行处理,所以这里就没有相应的userInfo的跳转处理。
这时候我们在运行我们的程序就应该可以访问index,login页面了。
到此这个小节就结束了,现在我们的程序还有问题,就是index页面在没有登录的时候,就可以进行访问了,我们希望是如果直接访问index页面,如果没有登录的话,直接跳转到login进行登录。
那么下一小节我们将会介绍如何在当前代码中集成shiro。
如果在一篇博客中介绍整个的集成过程的话,可能会比较乱,另外就是也没法介绍的那么细致,所以博主决定还是分开进行讲解,这样大家会比较好理解。那么下一篇博客大家再见吧,我要先去健健身,回来接着写。
【视频&交流平台】
à悟空学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr
http://412887952-qq-com.iteye.com/blog/2321532
======================================
Spring Boot Shiro视频实战篇【已更新】
======================================
适合人群
有Spring Boot基础的人群。
使用技术
(1)spring boot(整合框架)
(2)spring mvc
(3)spring data jpa(持久化操作)
(4)shiro(安全框架)
(5)thymeleaf(模板引擎)
(6)ehcache(缓存管理)
(7)mysql(数据库)
(8)js/css/img(静态资源使用)
(9)kaptcha(验证码库)
课程目录
1. Spring Boot Shiro介绍
2. Spring Boot 搭建无Shiro的框架
3. Spring Boot Shiro拦截
4. Spring Boot Shiro身份认证准备工作
5. Spring Boot Shiro身份认证
6. Spring Boot Shiro权限控制
7. Spring Boot Shiro缓存
8. Spring Boot Shiro记住密码
9. Spring Boot Shiro登录成功之后下载favicon.ico
10. Spring Boot 在thymeleaf使用shiro标签
11. Spring Boot Shiro密码加密算法
12.Spring Boot Shiro使用JS-CSS-IMG
13. Spring Boot Shiro限制登录尝试次数
14.Spring Boot Shiro 验证码
相关推荐
《30天从零开始编写一个五脏俱全的图形操作系统》是一本旨在引导读者从零基础开始构建自己的操作系统的学习指南。这本书由日本编程天才川合秀实撰写,并由周自恒等人翻译成中文版,提供了详尽的步骤和实例,帮助读者...
Windy (v39.1.5) Premium.apk
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
"序号1915-A39.1.2.0_SP16.rar" 这个文件名可能代表一个特定的补丁版本,其中包含了一些关键的信息。 首先,"序号1915" 可能是一个内部识别号,用于追踪和管理不同的补丁版本。在大型企业或软件开发公司中,这样的...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
捷稀路由器升级固件,最新版本 39.1.2.4820 N490 Q5 firmware.39.1.2.4820 N490 Q5.bin 升级后 固件版本: 39.1.2.4820 系统更稳定,2020/2/22
标题中的“PyPI 官网下载 | mypy-boto3-batch-1.12.39.1.tar.gz”表明这是一个从Python Package Index(PyPI)官方源下载的压缩包,名为“mypy-boto3-batch-1.12.39.1.tar.gz”。PyPI是Python社区广泛使用的第三方库...
《PyPI官网下载:mypy-boto3-snowball-1.16.39.1.tar.gz——深入了解Python库的构建与使用》 在Python的开发过程中,PyPI(Python Package Index)扮演了至关重要的角色,它是全球最大的Python软件仓库,提供了无数...
标题中的“mypy_boto3_workmail-1.16.39.1-py3-none-any.whl”是一个Python库的发行版本,用于类型检查和AWS WorkMail服务的交互。这个库是myPy(一个静态类型检查工具)对boto3(Amazon Web Services (AWS) 的...
资源来自pypi官网。 资源全名:mypy_boto3_workmail-1.16.39.1-py3-none-any.whl
本文将详细探讨PyPI官网上的资源“mypy-boto3-pinpoint-sms-voice-1.16.39.1.tar.gz”,这是一个针对AWS Pinpoint SMS和Voice服务的类型注解库,版本号为1.16.39.1。通过这个库,Python开发者能够更加高效、安全地...
而农村网络零售额达到1.24万亿元,同比增长了39.1%。这样的增长幅度显示出了电子商务在农村市场的巨大潜力和影响力。 农村网络零售额的大幅增长主要得益于以下几个方面: 1. 互联网基础设施的普及和改善,使得农村...
open suse linux 10.0最新的gcc编译器
资源分类:Python库 所属语言:Python 资源全名:mypy_boto3_sms-1.16.39.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:mypy_boto3_ds-1.16.39.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
一键还原系统傻瓜式的系统备份、还原、重装工具。体积小巧,速度超快,功能强悍。支持所有Windows系统,及各种新旧硬件(包括EFI主板和GPT硬盘)一键还原系统功能:1、速度超快:备份
资源分类:Python库 所属语言:Python 资源全名:mypy_boto3_acm_pca-1.16.39.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
39.1 服务级别管理:确保服务按照约定的水平提供,包括SLA的设定、监控和维护。 39.2 服务报告:定期生成和分发服务性能报告,以展示服务状态和改进情况。 39.3 可用性和IT服务持续性管理:关注系统的可用性,以及...
Juniper常用SNMP(OID)使用手册 本文档讲述了Juniper Networks常用...本文档提供了Juniper Networks设备的SNMP OID应用指南,涵盖了多种设备型号和监控类型,旨在帮助网络管理员快速理解和应用Juniper设备的SNMP功能。