🎼个人主页:【Y小夜】
😎作者简介:一位双非学校的大三学生,编程爱好者,
专注于基础和实战分享,欢迎私信咨询!
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
目录
🎯简介
在 Web 开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用 开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方 面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一 方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的调整,因而 需要更多的开发时间,影响应用的发布进程。因此,从应用开发的第一天就应该把安全相关的因素考虑 进来,并在整个应用的开发过程中。
Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。
🎯认识Spring Security
以实现强大的 Web 安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
记住几个类:
- WebSecurityConfigurerAdapter: 自定义Security策略
- AuthenticationManagerBuilder:自定义认证策略
- @EnableWebSecurity:开启WebSecurity模式
Spring Security的两个主要目标是 “认证” 和 “授权”(访问控制)。
🎃“认证”(Authentication)
- 身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。
- 身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用。
🎃“授权” (Authorization)
- 授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置, 几乎任何内容)的完全权限。
- 这个概念是通用的,而不是只在Spring Security 中存在。
🎯权限控制和注销
开启自动配置的注销的功能
//定制请求的授权规则
@Override
protected void configure(HttpSecurity http) throws Exception {
//....
//开启自动配置的注销的功能
// /logout 注销请求
http.logout();
}
我们想让他注销成功后,依旧可以跳转到首页
导入依赖:
<!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleafextras-springsecurity4 -->
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
如果注销404 了,就是因为它默认防止 csrf 跨站请求伪造,因为会产生安全问题,我们可以将请求 改为post 表单提交,或者在 spring security 中关闭 csrf 功能;我们试试:在 配置中增加
http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout
请求
http.logout().logoutSuccessUrl("/");
CSRF(Cross-site request forgery,跨站请求伪造)攻击是一种恶意利用行为,其核心在于攻击者通过技术手段欺骗用户浏览器去访问一个已经认证过的网站,并执行如发邮件、发送消息或财产操作等。CSRF与XSS(跨站脚本)不同,后者是利用站点内的信任用户,而CSRF则是假冒受信任用户对受信任网站进行请求。
🎯记住密码的功能
🎃开启记住密码
//定制请求的授权规则
@Override
protected void configure(HttpSecurity http) throws Exception {
//。。。。。。。。。。。
//记住我
http.rememberMe();
}
🎃实现原理
我们可以查看浏览器的 cookie

点击注销的时候,可以发现, spring security 帮我们自动删除了这个 cookie

结论:登录成功后,将cookie发送给浏览器保存,以后登录带上这个cookie,只要通过检查就可以 免登录了。如果点击注销,则会删除这个cookie。
🎯定制登录页
现在这个登录页面都是spring security 默认的,怎么样可以使用我们自己写的Login界面
在刚才的登录页配置后面指定 loginpage
http.formLogin().loginPage("/toLogin");
配置接收登录的用户名和密码的参数
http.formLogin()
.usernameParameter("username")
.passwordParameter("password")
.loginPage("/toLogin")
.loginProcessingUrl("/login"); // 登陆表单提交请求