本篇博文目录:

  • 一.SpringSecurity简介
    • 1.SpringSecurity
    • 2.SpringSecurity相关概念
  • 二.认证和授权
    • 1.认证
      • (1) 使用SpringSecurity进行简单的认证(SpringBoot项目中)
      • (2) SpringSecurity的原理
      • (3) SpringSecurity核心类
      • (4) 认证登入案例(JWT+SpringSecurity实现登入案例)
    • 2.授权
      • (1) 加入权限到Authentication中
      • (2) SecurityConfig配置文件中开启注解权限配置
      • (3) 给接口中的方法添加访问权限
      • (4) 用户权限表的建立
    • 3.自定义失败处理
      • (1) 创建异常处理类
      • (2) 配置移除处理类
    • 4.跨域问题
  • 三.源码下载

一.SpringSecurity简介

1.SpringSecurity

SpringSecurity 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实上的标准。
SpringSecurity 是一个致力于为 Java 应用程序提供身份验证和授权的框架。像所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以如何轻松地扩展以满足自定义需求

官网地址:
Spring Security简介https://spring.io/projects/spring-security


Spring Security英文教程:https://docs.spring.io/spring-security/reference/index.html

Spring Security中文教程:https://docs.gitcode.net/spring/guide/spring-security/overview.html

2.SpringSecurity相关概念

  • 什么是SpringSecurity

SpringSecurity 是一个提供身份验证、授权和防止常见攻击的框架 。它对保护命令式和反应式应用程序都提供了一流的支持,是保护基于 Spring 的应用程序的事实上的标准。

  • 关于什么是认证和授权

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

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

  • SpringSecurity 特点

Spring 无缝整合,全面的权限控制,专门为 Web 开发而设计(旧版本不能脱离 Web 环境使用,新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境),重量级。

  • SpringSecurity和Shiro的比较

功能,社区资源上SpringSecurity远远优于Shiro,但是Shiro是轻量级更加容易上手,在SSM框架中整合 Spring Security 比较麻烦,但是在SpringBoot项目中 Spring Security 提供了自动化配置方案,可以使用更少的配置来使用 Spring Security,所以推荐在SSM框架中使用Shiro,在SpringBoot和SpringCloud中使用SpringSecurity,你可以通过这篇博文了解这二种方式的实现SpringBoot学习—SpringSecurity与Shiro。

二.认证和授权

1.认证

SpringSecurity 为身份验证提供了全面的支持。身份验证是我们验证试图访问特定资源的用户身份的方式。对用户进行身份验证的一种常见方法是要求用户输入用户名和密码。一旦执行了身份验证,我们就知道了身份并可以执行授权。SpringSecurity 内置了对用户身份验证的支持。

(1) 使用SpringSecurity进行简单的认证(SpringBoot项目中)

创建一个SpringBoot的Web项目,功能非常简单就是通过访问sayHello接口,在游览器输出字符串 "Hello,SpringSecurity" :

项目pom.xml依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.dudu</groupId><artifactId>springsecuritydemo</artifactId><version>0.0.1-SNAPSHOT</version><name>springsecuritydemo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!--springBootWeb依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--test测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

controller下创建SpringSecurityController:

运行项目,访问sayHello接口,搞定:

接下来在项目的pom.xml配置文件中导入SpringSecurity的依赖:

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

再次访问sayHello接口,就会跳转到一个登入界面,在项目中我们并没有编写该登入界面的代码,其实这就是SpringSecurity 内置的用户身份验证:

身份验证默认的账号为:user,密码在项目启动的时候在控制台会打印,注意每次启动的时候密码会发生变化!

输入账号和密码后点击登入:

登入后,就能够成功访问sayHello接口了:

(2) SpringSecurity的原理

SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器,下图列出的是该过滤链中比较重要的几个过滤器。


上图中的三个过滤器分别是:

① UsernamePasswordAuthenticationFilter :对/login 的 POST 请求做拦截,校验表单中用户名,密码。
② ExceptionTranslationFilter:是个异常过滤器,用来处理在认证授权过程中抛出的异常
③ FilterSecurityInterceptor:是一个方法级的权限过滤器, 基本位于过滤链的最底部

在项目启动类中,按下图所示进行debug,就可以观察到这个过滤链,过滤链上一共有16个过滤器( run.getBean(DefaultSecurityFilterChain.class) )

这16个过滤器分别是:

(3) SpringSecurity核心类

Spring Security详细讲解(JWT+SpringSecurity登入案例)相关推荐

  1. 使用Spring Security Oauth2 和 JWT保护微服务--Uaa授权服务器的编写

    学习自深入理解微服务 采用Spring Security OAuth2 和 JWT的方式,Uaa服务只需要验证一次,返回JWT.返回的JWT包含了用户的所有信息,包括权限信息 从三个方面讲解: JWT ...

  2. Spring Security OAuth2整合JWT

    文章目录 1. Spring Security 与 OAuth2 2. Spring Security OAuth2的配置和使用 ①:引入依赖 ②:配置 spring security ③:配置授权服 ...

  3. 基于 Spring Security OAuth2和 JWT 构建保护微服务系统

    我们希望自己的微服务能够在用户登录之后才可以访问,而单独给每个微服务单独做用户权限模块就显得很弱了,从复用角度来说是需要重构的,从功能角度来说,也是欠缺的.尤其是前后端完全分离之后,我们的用户信息不一 ...

  4. JWT实战 Spring Security Oauth2整合JWT 整合SSO单点登录

    文章目录 一.JWT 1.1 什么是JWT 1.2 JWT组成 头部(header) 载荷(payload) 签名(signature) 如何应用 1.3 JJWT 快速开始 创建token toke ...

  5. 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...

  6. Spring Cloud详细讲解

    Spring Cloud详细讲解 一.微服务架构4个核心问题 1.服务很多,客户端该怎么访问? 2.这么多服务服务之间如何通信? 3.这么多服务,如何治理? 4.服务挂了怎么办? 解决方案: Spri ...

  7. Spring Security OAuth2 单点登录和登出

    文章目录 1. 单点登录 1.1 使用内存保存客户端和用户信息 1.1.1 认证中心 auth-server 1.1.2 子系统 service-1 1.1.3 测试 1.2 使用数据库保存客户端和用 ...

  8. 用spring security设置用户jwt令牌和设置接口访问权限案例

    文章目录 1.配置Swagger 2.spring security配置 3.用户校验逻辑 注册和登录接口 dao层 service层 pojo层 4.加密验证逻辑 5.生成令牌逻辑 身份验证提供者: ...

  9. Spring Security(一)- SpringSecurity 框架简介

    文章目录 一.SpringSecurity 框架简介 1. 概要 2. Spring Security 与 Shiro 对比 2.1 Spring Security 2.2 SpringSecurit ...

最新文章

  1. linux 安全基线加固
  2. 基于FPGA的智能PID控制器的设计与实现
  3. 每天学一点flash(16) as3.0 与asp通信(3) 错误探究
  4. echarts的x轴数量固定_联轴器 多节膜片式夹紧螺丝固定型 DAAPC(对应LK5CWP)
  5. 【优化算法】鼠群优化算法(RSO)【含Matlab源码 1462期】
  6. 电力-103规约主站端实现
  7. 教你几招提高自媒体文章原创度
  8. android电视工程模式,智能电视进入工厂/工程模式教程汇总!
  9. java lazy实现依赖调用_spring 之 lazy-init Autowired depends-on
  10. 冬瓜哥详解存储OS变迁
  11. 爬虫模拟登陆强智教务系统
  12. LNK2026 模块*对于 SAFESEH 映像是不安全的“原因以及解决方法
  13. python支持wps_python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
  14. 《数据结构与算法基础 严蔚敏版》第一章 绪论
  15. (Tiled官方文档翻译)第十节:使用无限地图(Tiled1.1)
  16. 多元统计分析 小总结 python实现
  17. 微信分享后端接口简单实现
  18. SpaceVim 中文教程
  19. 二本网络工程学生转型大数据开发,放弃京东offer,选择了二线城市
  20. 零基础如何备考PMP项目管理?

热门文章

  1. MPU6050姿态解算1-DMP方式
  2. 就一个翻译功能,百度你都跟不上谷歌,无力吐槽
  3. 三维空间刚体运动4-3:四元数线性插值方法:Squad
  4. 怎么实现文字转语音朗读?这几个小技巧快来码住
  5. BlockingQueue drainTo()
  6. Java项目实现文件上传FTP
  7. PHP基础——安装Apache软件
  8. 基于OpenAI的Chatbot开发记录
  9. vim + vundle + YCM+自动格式化
  10. 小程序真机调试连接本地服务器进行调试