《尚硅谷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中设置自己想要的用户名和密码。
在这里插入图片描述

### 回答1: 您好!Spring Security 是一个基于 Spring 框架的安全框架,可以为 Web 应用程序提供身份验证(Authentication)、授权(Authorization)和其他安全功能。以下是一些我在学习和使用 Spring Security 过程中的笔记和心得: 1. Spring Security 的核心是安全过滤器链(Security Filter Chain),它是一组过滤器,每个过滤器都负责某种安全任务。Spring Security 的默认配置已经提供了一组安全过滤器链,可以通过配置文件或者代码进行修改或扩展。 2. Spring Security 的认证流程是通过 AuthenticationManager 来实现的。当一个用户进行身份验证时,AuthenticationManager 会遍历配置的 AuthenticationProvider 列表,直到找到一个能够验证用户凭证的 Provider。如果找到了合适的 Provider,则 AuthenticationManager 会调用 Provider 的 authenticate() 方法进行认证。如果认证成功,Provider 会返回一个填充了用户信息、权限信息等的 Authentication 对象。如果认证失败,Provider 会抛出一个 AuthenticationException 异常。 3. Spring Security 的授权流程是通过 AccessDecisionManager 来实现的。当一个用户请求访问某个资源时,Spring Security 会通过已经认证的用户信息和资源信息,计算出用户是否有权访问该资源。这个计算的过程就是 AccessDecisionManager 所负责的。AccessDecisionManager 会遍历配置的 AccessDecisionVoter 列表,每个 Voter 都会投票判断用户是否有权访问该资源。如果投票通过,则用户有权访问该资源;如果投票失败,则用户无权访问该资源。 4. Spring Security 还提供了一些常用的安全功能,例如 CSRF 防护、Session 管理、Remember Me 记住我、OAuth2 等。这些功能都可以通过配置文件或者代码进行启用和定制。 5. 在使用 Spring Security 时,可以使用注解来简化安全配置。例如 @EnableWebSecurity 注解可以启用 Spring Security,并自动配置一组默认的安全过滤器链;@Secured、@PreAuthorize、@PostAuthorize 等注解可以用于方法级别的授权;@AuthenticationPrincipal、@CurrentUser 等注解可以用于获取当前已认证的用户信息。 希望这些笔记能够对您有所帮助,如果您有其他的问题或者需要进一步的解释,请随时提出。 ### 回答2硅谷Spring Security笔记是一份非常详细和实用的学习材料。Spring Security作为Spring框架家族中的一员,用于处理应用程序的安全性,它提供了一系列的API、过滤器和标签,用于实现认证、授权和其他安全相关的功能。 笔记首先介绍了Spring Security的基础概念,包括身份认证和权限授权等。它进一步介绍了如何基于Spring Security实现基于表单的身份认证,这是一个非常实用的功能,并且更加容易理解。笔记还涵盖了基于数据库的认证、使用自定义的UserDetailsService实现自定义用户和角色等重要主题。 笔记还介绍了一些高级的Spring Security用法,如基于注解的访问控制和记住我功能。通过使用这些技术,我们能够更好地控制应用程序的安全性。 最重要的是,笔记提供了丰富的示例和详细的解释,这使得学习Spring Security成为一种有趣和愉快的体验。无论您是初学者还是有经验的开发人员,这份笔记都是一个非常好的参考和指南。 总之,硅谷Spring Security笔记是一份非常有价值的学习材料。通过学习这份笔记,您将会获得一个更加深入的理解Spring Security,并能够应用这些技术到您自己的项目中。 ### 回答3: 硅谷SpringSecurity笔记是一个非常实用的学习资源。SpringSecuritySpring框架中的安全框架,主要实现了认证和授权的功能,并且支持多种安全认证方式,可以轻松应对各种复杂的安全场景。 笔记从SpringSecurity的基本原理和核心组件进行介绍,涵盖了实现基于内存、数据库、LDAP等多种认证方式的详细内容,并且对于Web应用中的CSRF攻击、Session Fixation攻击、跨站脚本攻击等安全问题进行了深入的分析和解决方案。 对于开发人员来说,阅读和掌握这些内容可以帮助他们在开发过程中更好地保障系统的安全性。此外,笔记也介绍了如何在SpringBoot中集成SpringSecurity,并通过演示一个简单的登录功能实现了基本的认证和授权功能,实践性很强。 总的来说,硅谷SpringSecurity笔记内容非常全面,详细介绍了SpringSecurity的各种用法和实现方式,对于初学者和想进一步掌握SpringSecurity开发者来说都是不可多得的好资源。同时,由于笔记的实践性较强,可以让开发者更好地掌握和应用所学知识,在实际项目中更好地保障系统的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值