首页 > 其他分享 >SpringSecurity从入门到精通

SpringSecurity从入门到精通

时间:2022-11-28 00:35:04浏览次数:37  
标签:精通 入门 登录 boot 用户 认证 过滤器 Security SpringSecurity

0. 简介

  • Spring Security和Shiro比较。中大型的项目都是使用SpringSecurity做安全框架,小项目使用Shiro比较多,因为它比Spring Security上手更加简单
  • 认证与授权:
    • 认证:验证当前访问系统的是不是本系统的用户,并确认具体是那个用户
    • 授权:经过认证后判断当前用户是否具有权限进行某个操作

1. 快速入门

1.1 准备工作

  • 创建SpringBoot项目,导入相关的依赖
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.5.0</version>
  </parent>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>
  </dependencies>

1.2 引入Spring Security

  • 导入Spring Security依赖
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
  • 导入Security依赖之后,再次访问后端请求时会默认打开一个登录页面
  • 此处默认的用户名(Username)是user,密码(Password)会在后台打印出来一长串字符,登录后就能够正常访问请求
  • Security默认的登出网址/logout

2. 认证

2.1 登录校验流程

2.2 原理

SpringSecurity原理是一个过滤器链,内部包含了提供各种功能的过滤器。

  • UsernamePasswordAuthenticationFilter:负责处理我们在登录页面填写的用户名密码后的登录请求
  • ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException
  • FilterSecurityInterceptor:负责权限校验的过滤器

认证流程详解:

  • 提交用户名密码
  • 封装Authentication对象,只有用户名密码,没有权限
  • 调用authenticate方法进行认证
  • 调用DaoAuthenticationProvider的authenticate方法进行认证
  • 调用loadUserByUsername方法查询用户
  • 根据用户名查询用户及对应的权限信息
  • 把对应的用户信息包括权限信息封装成UserDetail对象
  • 通过PasswordEncoder对比UserDetails中的密码和Authentication的密码是否一致
  • 如果正确就把UserDetails中的权限信息设置到Authentication对象中
  • 如果上一步返回了Authentication对象就是用SecurityContextHolder.getContext().setAuthentication()方法存储该对象,其他过滤器会通过SecurityContextHolder获取当前用户信息

2.3 解决问题

  • 登录:
    • 自定义登录接口,调用ProviderManager的方法进行认证,认证通过把用户信息存入redis
    • 自定义UserDetailsService,在这个实现类中查询数据库
  • 校验:
    • 定义jwt认证过滤器,获取token,解析token,获取其中的userid,从redis获取用户信息
    • 将用户信息存入SecurityContextHolder

标签:精通,入门,登录,boot,用户,认证,过滤器,Security,SpringSecurity
From: https://www.cnblogs.com/zhongshu/p/16931112.html

相关文章

  • Fastapi微服务系列(1)-之GRPC入门篇
    一些微服务说明前言在转回python之前,其实就对微服务有所尝试,不过当时使用的是go-micro-v2来进行了解,当时也只是浅尝辄止,没深入继续深究~其实微服务这东西没必要为了微服......
  • 学习《Python编程 从入门到实践》第四天
    周末比工作日都要忙碌呢,一大堆家务事;要慢慢减少自己玩手机的时间,将时间用到有意义的事情上面去呢;不过能有几个小时做自己想去做的事情的时间,觉得还是蛮幸运的。道理大家......
  • uniCloud云开发入门以及对传统开发方式的思考
    事情缘由作为选修了移动互联网应用的一员,老师讲的什么JS基础,还有ES6和uniapp,当然是没怎么听,因为是之前大二的时候都大概看过。但是快到期末,老师讲了云开发,并且布置了与此......
  • Shell入门
    一、Shell是什么Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。......
  • Java入门代码练习
    一、第一个Java程序1、helloworldpublicclassHello{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}2、变量i......
  • github及git入门笔记
    1githubhttps://github.com/1.1github注册进入官方https://github.com/首页,点击如下图片中signup按钮,按照提示信息注册即可。注册好之后,如下图所示1.2github......
  • 学习Java掌握那些知识就入门了
    了解Java的基础Java基本语法、Java平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Jav......
  • Velocity模板引擎的的使用示例(入门级)
    简单说下这个引擎的两个分支(虽然语言不同调用方法大同小异):1、Java平台下的:org.apache.velocity2、.Net平台下的:NVelocity注:本文章不涉及到后端只说模板的使用方法基本......
  • SDN控制器-ONOS源码编译与mininet快速入门
    SDN控制器-ONOS源码编译与mininet​​所需环境​​​​系统要求​​​​onos编译软件环境安装​​​​依赖软件安装​​​​Bazel/Bazelisk安装​​​​jdk11安装(可选)​​......
  • OllyDBG 入门系列(三)-函数
    在第一篇中已经介绍了领空的概念,如我这里调试这个程序时 OllyDBG 的标题栏显示的就是“[CPU - 主线程, 模块 - CrackHea]”,这表明我们当前在被调试程序的领空)。通过......