Springboot安全管理
Spring Security:
Spring Security是基于Spring生态圈的,用于提供安全访问控制解决方案的框架。
Spring Security的安全管理有两个重要概念,分别是Authentication(认证)和Authorization(授权)。
Spring Boot整合Spring Security实现的安全管理功能:
MVC Security是Spring Boot整合Spring MVC框架搭建的Web应用的安全管理。
WebFlux Security是Spring Boot整合Spring WebFlux框架搭建的Web应用的安全管理。
OAuth2是大型项目的安全管理框架,可以实现第三方认证、单点登录等功能。
Actuator Security用于对项目的一些运行环境提供安全监控,例如Health健康信息、Info运行信息等,它主要作为系统指标供运维人员查看管理系统的运行情况。
1.创建Spring Boot项目
创建项目,引入Web和Thymeleaf的依赖启动器:
2.引入页面Html资源文件
在项目的resources下templates目录中,引入案例所需的资源文件,项目结构如下
<1>.common/1.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--<meta name="viewport" content="width=device-width, initial-scale=1,--><!--shrink-to-fit=no">--><title>番剧详情</title></head>
<body ><a th:href="@{/}">返回</a><h1>文豪野犬</h1><p style="align-self: auto">文豪们的异能之战!中岛敦被赶出孤儿院,即将饿死在横滨时,遇到了投河自尽的太宰治。敦声称自己一直被猛虎追赶,太宰便借机让其协助武装侦探社找寻“食人虎”。最终“食人虎”的真面目令人咋舌,而且此事件的背后竟然隐藏着巨大的阴谋……文豪们的异能力之战,即将打响!</p>
</body>
</html>
common/2.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--<meta name="viewport" content="width=device-width, initial-scale=1,--><!--shrink-to-fit=no">--><title>番剧详情</title></head>
<body >
<a th:href="@{/}">返回</a>
<h1>间谍过家家</h1>
<p style="align-self: auto">每个人都有不可告人的一面——这是一个世界各国均暗地里进行激烈情报战的时代。东国(Ostania)与西国(Westalis)的冷战状态已经持续数十年。“黄昏”是西国情报局东国对策科“WISE”的一名优秀间谍。为调查威胁东西两国和平的人物——东国国家统一党总裁多诺万·德斯蒙,上级给予了他一个绝密任务。任务名为:“枭”(Strix)行动。内容是“一周之内组建家庭,潜入德斯蒙儿子就读的名门学校的联谊会”。于是“黄昏”扮演成精神科医生劳埃德·福杰,开始组建家庭。然而,他找来的女儿阿尼亚是个能读心的超能力者,妻子约尔是个杀手。三人利害关系一致,便互相隐瞒身份,开始了共同生活。世界的和平,就掌握在这意外不断的临时一家人手中
</p>
</body>
</html>
<2>vip/1.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--<meta name="viewport" content="width=device-width, initial-scale=1,--><!--shrink-to-fit=no">--><title>番剧详情</title></head>
<body >
<a th:href="@{/}">返回</a>
<h1>黑执事</h1>
<p style="align-self: auto">时值19世纪,在英国名门贵族凡多姆海伍家,有一位神秘、优雅、十全十美的执事,他就是“黑执事” 塞巴斯蒂安。虽然塞巴斯蒂安总是淡淡地说: “我只是一名执事罢了”,但举止、知识、品味、料理、武术等等没有任何事能难得倒他!塞巴斯蒂安的主人,是年仅12岁就位居凡多姆海伍家族的当主——夏尔。夏尔不仅只花了短短3年的时间,就让凡多姆公司成为英国最大的零食玩具制造商,更在台面下为女王执行秘密任务,因此又被称为“邪恶贵族”!塞巴斯蒂安除了负责照顾夏尔的日常生活起居之外,还得帮成事不足、败事有余的家仆们收拾善后。最重要的是,塞巴斯蒂安必须因应夏尔各种任性的要求,优雅达成不可能的任务!“身为 凡多姆海恩家的执事,怎能连这点小事也办不到?”为了主人夏尔,塞巴斯蒂安将尽心服侍、实现主人所有的愿望。
</p>
</body>
</html>
vip/2.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--<meta name="viewport" content="width=device-width, initial-scale=1,--><!--shrink-to-fit=no">--><title>番剧详情</title></head>
<body >
<a th:href="@{/}">返回</a>
<h1>咒术回战</h1>
<p style="align-self: auto">咒术回战是大导演朴性厚 竹下良平 筑紫大介 的一部优秀的日韩动漫 类型影视作品,主演有榎木淳弥 内田雄马 濑户麻沙美 。影片的关键词是咒术 回战 , 辛酸、后悔、耻辱——人类诞生的负面感情化作诅咒潜伏于日常当中。诅咒是蔓延于世间的灾祸根源,最坏的情况下会导致人死亡。而诅咒,只能通过诅咒来祓除。 拥有惊人身体能力的少年·虎杖悠仁,原本过着普通的高中生活,但某天他为了救下遭到“诅咒”袭击的同伴而吞下了特级咒物“两面宿傩的手指”,自己的魂魄也寄宿了诅咒。自此与身为诅咒的“两面宿傩”共有肉体的虎杖,在最强咒术师五条悟的介绍下编入了对诅咒专门机关「东京都立咒术高等专门学校」……为了祓除诅咒,化身为诅咒的少年无法回头的壮绝物语开始启动——
</p>
</body>
</html>
<3>index.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no"><title>影視直播亭</title><!--<link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet"><link th:href="@{/login/css/signin.css}" rel="stylesheet">--></head>
<body>
<h1 align="center"> 欢迎进入番剧网站首页</h1>
<div sec:authorize="isAnonymous()"><h2 align="center"> 游客你好,如果想查看番剧<a th:href="@{/userLogin}"> 请登录</a></h2>
</div>
<div sec:authorize="isAuthenticated()"><h2 align="center"><span sec:authentication="name" style="height: 1px"></span>您好,你的用户权限为,可以观看以下番剧<span sec:authentication="principal.authorities" style="height: 1px"></span></h2><form th:action="@{/myIogout}" method="post"><input th:type="submit" th:value="注销"></form>
</div>
<hr>
<div sec:authorize="hasRole(’common’)"><h3>普通番剧</h3><ul><li><a th:href="@{/detail/common/1.html}">文豪野犬</a></li><img src="mb-4 " th:src="@{/login/img/wenhao.png}" width="100" height="100"><li><a th:href="@{/detail/common/2.html}">间谍过家家</a></li><img src="mb-4 " th:src="@{/login/img/jiandie.png}" width="100" height="100"></ul>
</div>
<div sec:authorize="hasAuthority(’ROLE_vip’)"><h3>VIP专享</h3><ul><li><a th:href="@{/detail/vip/1.html}">黑执事</a></li><img src="mb-4 " th:src="@{/login/img/heizhishi.png}" width="100" height="100"><li><a th:href="@{/detail/vip/2.html}">咒术回战</a></li><img src="mb-4 " th:src="@{/login/img/zhoushu.png}" width="100" height="100"></ul>
</div>
</body>
</html>
3.编写Web控制层
@Controller
public class FilmeController {// 影片详情页@GetMapping("/detail/{type}/{path}")public String toDetail(@PathVariable("type")String type, @PathVariable("path")String path) {return "detail/"+type+"/"+path; }}
4.添加spring-boot-starter-security启动器
一旦项目引入spring-boot-starter-security启动器,MVC Security和WebFlux Security负责的安全功能都会立即生效
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
5.端口号
server.port=8082
6.项目启动测试:
项目启动时会在控制台Console中自动生成一个安全密码
浏览器访问http://localhost:8082/查看项目首页项目中并没有手动创建用户登录页面,而添加了Security依赖后,Spring Security会自带一个默认的登录页面
Security会默认提供一个可登录的用户信息,其中用户名为user,密码随机生成,这个密码会随着项目的每次启动随机生成并打印在控制台上,在登录页面输入用户名和密码
7.开启安全管理效果测试
默认安全管理方式存在的问题:这种默认安全管理方式存在诸多问题,例如: 只有唯一的默认登录用户user、密码随机生成且过于暴露、登录页面及错误提示页面不是我们想要的等。
<1>MVC Security安全配置简介
项目引入spring-boot-starter-security依赖启动器,MVC Security安全管理功能就会自动生效,其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。
<2>如何关闭Sercurity提供的Web应用默认安全配置
要完全关闭Security提供的Web应用默认安全配置,可以自定义WebSecurityConfigurerAdapter类型的Bean组件以及自定义UserDetailsService、AuthenticationProvider或AuthenticationManager类型的Bean组件。
另外,可以通过自定义WebSecurityConfigurerAdapter类型的Bean组件来覆盖默认访问规则。
WebSecurityConfigurerAdapter类的主要方法及说明:
configure(AuthenticationManagerBuilder auth)-------定制用户认证管理器来实现用户认证
configure(HttpSecurity http)-------------------------------定制基于HTTP请求的用户访问控制
8.自定义WebSecurityConfigurerAdapter配置类:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
}
注: @EnableWebSecurity注解是一个组合注解,主要包括@Configuration注解、@Import({WebSecurityConfiguration.class, SpringWebMvcImportSelector.class})注解和@EnableGlobalAuthentication注解
9.使用内存进行身份认证:
SecurityConfig类中重写configure(AuthenticationManagerBuilder auth)方法,并在该方法中使用内存身份认证的方式自定义了认证用户信息。定义用户认证信息时,设置了两个用户名和密码以及对应的角色信息。
@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {//加密器BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();//把密码往内存里存 . 引用加密器 .auth.inMemoryAuthentication().passwordEncoder(encoder)//提供用户名 . 密码 . 验证规则.withUser("haimi").password(encoder.encode("123456")).roles("common")//加一个用户.and().withUser("海米酱").password(encoder.encode("123456")).roles("vip");}
10.效果测试:
重启项目进行效果测试,项目启动成功后,仔细查看控制台打印信息,发现没有默认安全管理时随机生成的密码了。通过浏览器访问http://localhost:8082/
输入正确的用户名和密码,会进入网站首页(单击电影名称同样可以查看番剧详情)
11.数据准备
数据库 springbootdata
<1>t_customer用户表
<2>t_authority用户权限表
<3>t_customer_authority用户权限关联表
12.添加JDBC连接数据库的依赖启动器:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
13.进行数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
14.使用JDBC进行身份验证
在SecurityConfig 类中的configure(AuthenticationManagerBuilder auth)方法中使用JDBC身份认证的方式进行自定义用户认证,使用JDBC身份认证时,首先需要对密码进行编码设置(必须与数据库中用户密码加密方式一致);然后需要加载JDBC进行认证连接的数据源DataSource;最后,执行SQL语句,实现通过用户名username查询用户信息和用户权限。
@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();String userSQL ="select username,password,valid from t_customer "+ "where username = ?";String authoritySQL="select c.username,a.authority from t_customer c, "+"t_authority a,t_customer_authority ca where "+"ca.customer_id=c.id and ca.authority_id=a.id and c.username =?";auth.jdbcAuthentication().passwordEncoder(encoder).dataSource(dataSource).usersByUsernameQuery(userSQL).authoritiesByUsernameQuery(authoritySQL);
}}
15.效果测试
重启项目进行效果测试,项目启动成功后,通过浏览器访问http://localhost:8082/
输入正确的用户名和密码,会进入网站首页(单击电影名称同样可以查看番剧详情)
Springboot安全管理相关推荐
- SpringBoot——安全管理(一)
SpringBoot--安全管理 一.简介 二.Spring Security 一.简介 安全可以说是公司的红线了,一般项目都有严格的认证和授权操作,在Java开发领域常见的安全框架有Shiro和Sp ...
- 【SpringBoot】最通俗易懂的安全管理机制(Spring Security)
注:本文章基于尚硅谷Springboot高级特性相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者! 本章代码较多,所以只截取部分代码(尤其是前端页面) ...
- 小小白学Springboot(十一)——Security安全管理
基本准备 基础页面 基础数据库 页面访问的控制类 自定义用户身份认证 JDBC身份认证 自定义用户授权管理 自定义用户访问控制 自定义403页面(访问权限不够时的页面) 自定义登录页面 用户退出登录 ...
- SpringBoot整合Shiro安全框架完整实现
目录 一.环境搭建 1. 导入shiro-spring依赖 2. 编写首页及其controller 3. 编写shiro配置类 二.Shiro实现登录拦截 1. 编写页面及其controller 2. ...
- Java项目:健身管理系统(Java+ssm+springboot)
源码获取:博客首页 "资源" 里下载! 主要技术:springmvc. springboot .mybatis.mysql .jQuery.layui.css.jsp shiro权 ...
- 七个开源的 SpringBoot 前后端分离项目,Star过千,快去收藏夹吃灰吧!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 微信公众号:江南一点雨 前后端分离已经在慢慢走进各公司的技 ...
- SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源: juejin.im/post/5d087d60518825 ...
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- Springboot监控之一:SpringBoot四大神器之Actuator之3-springBoot的监控和管理--指标说明...
Spring Boot包含很多其他的特性,它们可以帮你监控和管理发布到生产环境的应用.你可以选择使用HTTP端点,JMX或远程shell(SSH或Telnet)来管理和监控应用.审计(Auditing ...
最新文章
- 拉格朗日乘数法的原理,我用10幅图把它讲清楚了
- 你必须掌握的 21 个 Java 核心技术!
- “反过来”学数学:从图形到符号的思考法
- Oracle PL/SQL入门之慨述
- “cannot find module ‘npmlog’….”的错误
- 关于hibernate中提示can not create table ******
- Linux中crontab无法执行java程序的问题
- 如何使计算机为您读取文档
- MySQL 高水位update_Oracle delete 高水位线处理问题
- python做股票系统_GitHub - yeyaowen/stock: stock,股票系统。使用python进行开发。
- 124第十四章—权限的配置
- 熊猫烧香系列变种分析报告
- 谈谈基于SQL Server 的Exception Handling[中篇]
- JQuery-Ztree 树插件下载 与 快速入门
- 实用免费的SNMP网管工具-sugarnmsTool
- 如何使用MySQL Workbench建立数据库
- 移动端web app自适应布局探索与总结
- vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia.
- ThrottleStop CPU频率调节
- 基于spring mvc+bootstrap 集成的返利平台 新增内容-自动对接京东数据