SpringSecurity入门,前后端分离案例(笔记持续更新...)

SpringSecurity入门

简介

SpringSecurity 是Spring家族中的一个安全管理框架。相比于另一个安全框架 Shiro ,它提供了更丰富的功能,社区资源也比Shiro丰富。
一般来说中大型的项目都是使用 SpringSecurity 来做安全框架。小项目用 Shiro 的比较多,因为相比于 SpringSecurity , Shiro 的上手会更简单一些。
一般 Web 应用需要进行认证授权

  • 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户
  • 授权:经过认证后判断当前用户是否有权限执行某个操作

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

1、快速入门

1.1、准备工作

首先搭建一个简单的SpringBoot工程
① 设置父工程,添加依赖

<parent>
	<artifactId>spring-boot-starter-parentartifactId>
	<groupId>org.springframework.bootgroupId>
	<version>2.5.0version>
parent>

<dependencies>
	<dependency>
 		<groupId>org.springframework.bootgroupId>
		<artifactId>spring-boot-starter-webartifactId>
	dependency>

	<dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
	dependency>
dependencies>

② 创建启动类

@SpringBootApplication
public class SecurityApplication {
    public static void main(String[] args) {
        SpringApplication.run(SecurityApplication.class, args);
    }
}

③ 编写测试controller,启动服务器测试

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

④ 显示如下,准备工作完成
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第1张图片

1.2、引入SpringSecurity

在 SpringBoot 项目中使用 SpringSecurity 我们只需要引入依赖即可实现入门案例。

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-securityartifactId>
dependency>

引入依赖后再次取尝试访问之前的接口(http://localhost:8080/hello),就会自动跳转到 SpringSecurity 的默认登陆页面,默认用户名是user,密码会输出在控制台
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第2张图片SpringSecurity入门,前后端分离案例(笔记持续更新...)_第3张图片

登录成功后,就可以进入到我们要访问的接口(http://localhost:8080/hello)
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第4张图片
之后切换路径为:http://localhost:8080/logout,实现退出
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第5张图片

2、认证

2.1、登录校验流程

核心是token
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第6张图片

2.2、初步认识原理

想要知道如何实现自己的登录流程,就必须要先知道入门案例中的SpringSecurity的流程。

2.2.1、SpringSecurity完整流程

SpringSecurity 的原理其实就是一个过滤器链,内部包含了各种功能的过滤器,这里可以先看一下入门案例的过滤器。
SpringSecurity入门,前后端分离案例(笔记持续更新...)_第7张图片

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

  2. ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeneidException 和 AuthenticationException

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

2.2.2、认证流程详解(后续补充)

2.3、解决问题

2.3.1、思路分析

登录:

① 自定义登录接口,调用ProviderManager的方法进行认证,如果认证通过就生成jwt,把用户id作为key,用户信息作为value存入Redis中。

② 定义UserDetailsService,在这个实现类中去查询数据库。

校验:

① 定义jwt认证过滤器,需要获取token,解析token,获取其中的userId,之后从Redis中获取用户信息。

② 将用户信息存入SecurityContextHolder

你可能感兴趣的:(java,spring)