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安全管理相关推荐

  1. SpringBoot——安全管理(一)

    SpringBoot--安全管理 一.简介 二.Spring Security 一.简介 安全可以说是公司的红线了,一般项目都有严格的认证和授权操作,在Java开发领域常见的安全框架有Shiro和Sp ...

  2. 【SpringBoot】最通俗易懂的安全管理机制(Spring Security)

    注:本文章基于尚硅谷Springboot高级特性相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者! 本章代码较多,所以只截取部分代码(尤其是前端页面) ...

  3. 小小白学Springboot(十一)——Security安全管理

    基本准备 基础页面 基础数据库 页面访问的控制类 自定义用户身份认证 JDBC身份认证 自定义用户授权管理 自定义用户访问控制 自定义403页面(访问权限不够时的页面) 自定义登录页面 用户退出登录 ...

  4. SpringBoot整合Shiro安全框架完整实现

    目录 一.环境搭建 1. 导入shiro-spring依赖 2. 编写首页及其controller 3. 编写shiro配置类 二.Shiro实现登录拦截 1. 编写页面及其controller 2. ...

  5. Java项目:健身管理系统(Java+ssm+springboot)

    源码获取:博客首页 "资源" 里下载! 主要技术:springmvc. springboot .mybatis.mysql .jQuery.layui.css.jsp shiro权 ...

  6. 七个开源的 SpringBoot 前后端分离项目,Star过千,快去收藏夹吃灰吧!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 微信公众号:江南一点雨 前后端分离已经在慢慢走进各公司的技 ...

  7. SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源: juejin.im/post/5d087d60518825 ...

  8. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  9. Springboot监控之一:SpringBoot四大神器之Actuator之3-springBoot的监控和管理--指标说明...

    Spring Boot包含很多其他的特性,它们可以帮你监控和管理发布到生产环境的应用.你可以选择使用HTTP端点,JMX或远程shell(SSH或Telnet)来管理和监控应用.审计(Auditing ...

最新文章

  1. 拉格朗日乘数法的原理,我用10幅图把它讲清楚了
  2. 你必须掌握的 21 个 Java 核心技术!
  3. “反过来”学数学:从图形到符号的思考法
  4. Oracle PL/SQL入门之慨述
  5. “cannot find module ‘npmlog’….”的错误
  6. 关于hibernate中提示can not create table ******
  7. Linux中crontab无法执行java程序的问题
  8. 如何使计算机为您读取文档
  9. MySQL 高水位update_Oracle delete 高水位线处理问题
  10. python做股票系统_GitHub - yeyaowen/stock: stock,股票系统。使用python进行开发。
  11. 124第十四章—权限的配置
  12. 熊猫烧香系列变种分析报告
  13. 谈谈基于SQL Server 的Exception Handling[中篇]
  14. JQuery-Ztree 树插件下载 与 快速入门
  15. 实用免费的SNMP网管工具-sugarnmsTool
  16. 如何使用MySQL Workbench建立数据库
  17. 移动端web app自适应布局探索与总结
  18. vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia.
  19. ThrottleStop CPU频率调节
  20. 基于spring mvc+bootstrap 集成的返利平台 新增内容-自动对接京东数据

热门文章

  1. r7 PRO 4750u 和r74800h 的区别
  2. MATLAB——mean 函数
  3. 万字长文,62 道 Java 核心面试题,一次性打包送给积极向上的你
  4. java kill线程_如何优雅的 kill 线程
  5. 沈庆的歌和《软件方法》-来自真·歌迷的送别
  6. 「FVWM」- 截图 @20210121
  7. dede flag php,dede新增自定义flag(自定义属性)的方法
  8. 人类行为读心术——人际交往中的心理策略!
  9. 如何判断是否患上了咽喉炎?
  10. matlab 相位解包裹,3D轮廓测量中相位解包裹应用