《尚硅谷Java项目SpringSecurity+OAuth2权限管理实战教程》系列文章_Spring Security快速入门

系列文章目录

第一章 Spring Security快速入门
第二章 Spring Secrity自定义配置
第三章 前后端分离
第四章 身份认证
第五章 授权
第六章 OAuth2



前言

学习SpringSecurity需要前置知识:Java基础、Spring、MyBatis、SpringBoot。
目标:利用最少时间掌握SpringSecurity和OAuth2,掌握底层逻辑,应用到实际项目。
技术版本:SpringBoot 3.2.0 SpringSecrity 6.2.0 JDK 17 MySQL 8.0


一、SpringSecurity是什么和OAuth2是什么?

SpringSecurity:安全性框架,提供了一系列功能来保护应用程序的安全性
OAuth2:开放标准的授权协议,百度定义:OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。同时为Web应用,桌面应用和手机,和智能家居设备提供专门的认证流程。

二、Spring Security基本功能

Spring Security官网链接

官网对Spring Security基本功能的介绍:Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements.译文:Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于spring的应用程序的事实上的标准。Spring Security是一个框架,专注于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于它可以轻松地扩展以满足自定义需求。

Spring Security特点

  1. 对身份验证和授权的全面和可扩展的支持。(授权:用户进行身份认证后,系统会控制谁能访问哪些资源,这个过程叫做授权。用户无法访问没有权限的资源。身份认证:身份认证是验证谁正在访间系统资源,判断用户是否为合法用户。认证用户的常见方式是要求用户输入用户名和密码。)
  2. 防止攻击,如会话固定,点击劫持,跨站点请求伪造等。
  3. Servlet API集成。
  4. 与Spring Web MVC的可选集成。

三、实现最简单的身份认证

官方示例代码:https://github.com/spring-projects/spring-security-samples

1、IDEA新建项目

在这里插入图片描述
选择三个依赖,如下图所示。
在这里插入图片描述
然后点击创建。之后我们实现Gtihub的一个示例代码,相应内容参照前面给出的链接。
在这里插入图片描述
启动后,访问地址即可看到页面(此页面借用了外网的一个在线页面,可能会加载不出来),默认情况下Spring Security将初始的用户名和密码存在了SecurityProperties类中。这个类中有一个静态内部类User,配置了默认的用户名(name = “user”)和密码(password = uuid),密码在上图中箭头所指处可以看到。
在这里插入图片描述
如上图所示进行登录,登录后结果如下图所示。
在这里插入图片描述

四、Spring Security默认做了什么

  1. 保护应用程序URL,要求对应用程序的任何交互进行身份验证。
  2. 程序启动时生成一个默认用户“user”。
  3. 生成一个默认的随机密码,并将此密码记录在控制台上。
  4. 生成默认的登录表单和注销页面。提供基于表单的登录和注销流程。
  5. 对于web请求,重定向到登录页面(因为你还没有登录,无法通过web请求访问其他页面);
  6. 对于服务请求,返回401未经授权。
  7. 处理跨站请求伪造(CSRF)攻击。
  8. 处理会话劫持攻击。
  9. 写入Strict-Transport-Security以确保HTTPS。
  10. 写入X-Content-Type-0ptions以处理探攻击。
  11. 写入Cache Control头来保护经过身份验证的资源。
  12. 写入X-Frame-0ptions以处理点击劫持攻击。

五、Spring Security底层原理

官方文档链接
Architecture( 结构)中提到”本节讨论基于Servlet的应用程序中的Spring Security高级体系结构。我们将在参考文献的身份验证、授权和防止漏洞利用保护部分中建立这种高层次的理解“。
如下图所示,我们如果能把Filter对象当作Spring容器中的Bean对象来管理的话,那Filter对象进行添加、删除、启用、禁用更灵活。
在这里插入图片描述
关键要理解官方文档中的DelegatingFilterProxy,我自己理解,通过SpringBoot中编写一些Bean,然后这个DelegatingFilterProxy会帮我们把我们的Bean所代表的Filter加入到过滤器链中,如下图所示。
在这里插入图片描述

六、DefaultSecurityFilterChain

在这里插入图片描述
如下图所示,在启动之前的项目时,出现的一个日志信息,把它整理出来,如下所示,有16个默认加载的Filter。

2024-07-18T11:43:42.197+08:00  INFO 8960 --- [security-demo] [main] 
o.s.s.web.DefaultSecurityFilterChain: Will secure any request with 
[org.springframework.security.web.session.DisableEncodeUrlFilter@91da29b, 
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7066363, 
org.springframework.security.web.context.SecurityContextHolderFilter@481558ce, 
org.springframework.security.web.header.HeaderWriterFilter@6411504a, 
org.springframework.web.filter.CorsFilter@75b38c36,
org.springframework.security.web.csrf.CsrfFilter@e91b4f4, 
org.springframework.security.web.authentication.logout.LogoutFilter@2693c618, 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@553da911, //显而易见是密码相关的过滤器
org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@420cd102, 
org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@47248a48, 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter@67bd351e, 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7f353a0f, 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1c93b51e, 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2349f14d, 
org.springframework.security.web.access.ExceptionTranslationFilter@2091833, 
org.springframework.security.web.access.intercept.AuthorizationFilter@6975fb1c
]

七、SecurityProperties

1、查看默认用户名以及密码是如何生成

通过搜索,找到SecurityProperties.class
在这里插入图片描述
如下图所示,我们可以看到默认的用户是”user",以及密码是生成的UUID。
在这里插入图片描述

2、自己设定用户名和密码

如下图所示,在application.properties中设置自己想要的用户名和密码。
在这里插入图片描述

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值