SpringSecurity从入门到精通

学习参考视频链接
【SpringSecurity框架教程-Spring Security+JWT实现项目级前端分离认证授权-挑战黑马&尚硅谷】https://www.bilibili.com/video/BV1mm4y1X7Hc?vd_source=dcfc9dbffa81a6fce64aad9c9dabcc17
虽然版本过时了,但是基本的东西被这个博主讲的十分清晰,需要自己微调,不能照搬视频.

1.简介

Spring Security 中文文档

Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。

一般Web应用的需要进行认证授权

认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户

授权:经过认证后判断当前用户是否有权限进行某个操作

而认证和授权也是SpringSecurity作为安全框架的核心功能

2.快速入门

你可以通过添加 spring-boot-starter-security 来为你的Spring Boot项目添加Spring Security。

  1. 添加依赖
<!--security依赖项目(重点)-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
 </dependency>       

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
        
  1. 启动类

创建SpringBoot项目时自动创建好了 此处我做了更改只是为了后期Debug

@SpringBootApplication
public class SanGengSecurityApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SanGengSecurityApplication.class, args);
        System.out.println("args = " + args);
    }

}
  1. 创建Controller
@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String hello(){
        return "hello";
    }
}
  1. 启动工程

你可以在 localhost:8080/ 访问该应用程序,这将使浏览器重定向到默认的登录页面。你可以提供 user 的默认用户名和随机生成的密码,这些密码会被记录到控制台中。然后浏览器会被带到最初请求的页面。

要注销,你可以访问 localhost:8080/logout,然后确认你想注销。

输入默认账号: user 密码在控制台打印了

在这里插入图片描述
登录进来

3.认证

3.1登录校验流程

3.2原理初探

SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。这里我们可以看看

入门案例中的过滤器。

在这里插入图片描述
图中只展示了核心过滤器,其它的非核心过滤器并没有在图中展示。

UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。

ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。

FilterSecurityInterceptor:负责权限校验的过滤器。

我们可以通过Debug查看当前系统中SpringSecurity过滤器链中有哪些过滤器及它们的顺序。

输入 run.getBean(DefaultSecurityFilterChain.class) 求值

3.3认证详流程详解

在这里插入图片描述

概念速查:

Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。

AuthenticationManager接口:定义了认证Authentication的方法

UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的

方法。

UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装

成UserDetails对象返回。然后将这些信息封装到Authentication对象中

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐