Spring Security详细讲解(JWT+SpringSecurity登入案例)
本篇博文目录:
- 一.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登入案例)相关推荐
- 使用Spring Security Oauth2 和 JWT保护微服务--Uaa授权服务器的编写
学习自深入理解微服务 采用Spring Security OAuth2 和 JWT的方式,Uaa服务只需要验证一次,返回JWT.返回的JWT包含了用户的所有信息,包括权限信息 从三个方面讲解: JWT ...
- Spring Security OAuth2整合JWT
文章目录 1. Spring Security 与 OAuth2 2. Spring Security OAuth2的配置和使用 ①:引入依赖 ②:配置 spring security ③:配置授权服 ...
- 基于 Spring Security OAuth2和 JWT 构建保护微服务系统
我们希望自己的微服务能够在用户登录之后才可以访问,而单独给每个微服务单独做用户权限模块就显得很弱了,从复用角度来说是需要重构的,从功能角度来说,也是欠缺的.尤其是前后端完全分离之后,我们的用户信息不一 ...
- JWT实战 Spring Security Oauth2整合JWT 整合SSO单点登录
文章目录 一.JWT 1.1 什么是JWT 1.2 JWT组成 头部(header) 载荷(payload) 签名(signature) 如何应用 1.3 JJWT 快速开始 创建token toke ...
- 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统
<深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...
- Spring Cloud详细讲解
Spring Cloud详细讲解 一.微服务架构4个核心问题 1.服务很多,客户端该怎么访问? 2.这么多服务服务之间如何通信? 3.这么多服务,如何治理? 4.服务挂了怎么办? 解决方案: Spri ...
- Spring Security OAuth2 单点登录和登出
文章目录 1. 单点登录 1.1 使用内存保存客户端和用户信息 1.1.1 认证中心 auth-server 1.1.2 子系统 service-1 1.1.3 测试 1.2 使用数据库保存客户端和用 ...
- 用spring security设置用户jwt令牌和设置接口访问权限案例
文章目录 1.配置Swagger 2.spring security配置 3.用户校验逻辑 注册和登录接口 dao层 service层 pojo层 4.加密验证逻辑 5.生成令牌逻辑 身份验证提供者: ...
- Spring Security(一)- SpringSecurity 框架简介
文章目录 一.SpringSecurity 框架简介 1. 概要 2. Spring Security 与 Shiro 对比 2.1 Spring Security 2.2 SpringSecurit ...
最新文章
- linux 安全基线加固
- 基于FPGA的智能PID控制器的设计与实现
- 每天学一点flash(16) as3.0 与asp通信(3) 错误探究
- echarts的x轴数量固定_联轴器 多节膜片式夹紧螺丝固定型 DAAPC(对应LK5CWP)
- 【优化算法】鼠群优化算法(RSO)【含Matlab源码 1462期】
- 电力-103规约主站端实现
- 教你几招提高自媒体文章原创度
- android电视工程模式,智能电视进入工厂/工程模式教程汇总!
- java lazy实现依赖调用_spring 之 lazy-init Autowired depends-on
- 冬瓜哥详解存储OS变迁
- 爬虫模拟登陆强智教务系统
- LNK2026 模块*对于 SAFESEH 映像是不安全的“原因以及解决方法
- python支持wps_python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
- 《数据结构与算法基础 严蔚敏版》第一章 绪论
- (Tiled官方文档翻译)第十节:使用无限地图(Tiled1.1)
- 多元统计分析 小总结 python实现
- 微信分享后端接口简单实现
- SpaceVim 中文教程
- 二本网络工程学生转型大数据开发,放弃京东offer,选择了二线城市
- 零基础如何备考PMP项目管理?
热门文章