热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringSecurity+JWT实现前后端分离认证和授权第二部分:测试+流程分析

目录前言:测试:分为两次请求1.第一个请求就是类似于前端请求一个登录SpringSecurity内置验证的安全登录中心​编辑2.第二个请求就是在

目录

前言:

测试:

分为两次请求

1.第一个请求就是类似于前端请求一个登录SpringSecurity内置验证的安全登录中心

​编辑2.第二个请求就是在第一个请求成功的基础上进行请求的

流程分析【重点】:

 第一个请求的流程:

具体步骤:

 第二个请求的流程:

第二个请求的前提:

具体步骤:

 对两次请求的总结:

 为什么要这样做?



前言:

本文的测试以及流程分析,都是针对于第一部分编码部分所开展的分析与总结。之后我也会发布一

个合集来方便需要学习的朋友进行查看。

测试:

我们测试时,采用的是postman充当客户端进行测试。

 先进行启动:

分为两次请求

1.第一个请求就是类似于前端请求一个登录SpringSecurity内置验证的安全登录中心

解析如下:

为的是获取到请求服务端中我们进行配置的Controller接口的权限。如果这个登录都验证不过去,那么就没有权限去进行请求之后的

Controller中配置的接口资源

我们对于SpringSecurity内置的安全登录,是可以进行自定义配置请求地址的:我们这里配置的是/doLogin。如图:在配置类中进行配置的

我们对于SpringSecurity内置的安全登录,是可以进行自定义配置可成功登录该内置登录中心的成员用户信息,我们这里配置的是:

用户名:mxy 密码:123以及所拥有的权限集合

2.第二个请求就是在第一个请求成功的基础上进行请求的

第二个请求就是对后端服务器中的Controller类中的接口对应的资源进行的请求。

当第一个请求执行成功之后,说明SpringSecurity登录验证已经成功 。

说明可以继续请求后端资源接口。

第一个请求之后,我们就会获取一个JWT。这个JWT中就包含着我们的用户信息。然后我们就把这个JWT配置给Headers中的Authorization。

流程分析【重点】:

 第一个请求的流程:

首先我们使用postman进行请求我们自定义设置的SpringSecurity安全登录验证的接口doLogin

并且配置请求url的携带参数。参数为登录的用户名以及密码 !

具体步骤:

 1.无论什么请求都会先进行经过过滤器

 2.但是由于这是security的登录验证请求,其中并没有token,所以我们直接通过过滤器中的解析JWT的过程。

3. 跳过过滤器之后,我们会进行验证security登录。此时我们要进行判断,postman发送的请求url

中携带的用户名以及密码参数是否在我们自定义的用户中

我们自定义的用户为 :用户名为mxy ,密码为123

 4.如果登录失败:会进入到我们登录失败的处理器中进行处理

 5.如果登录成功:同理会跳转到登录成功处理器进行处理操作:

登录成功处理器,最后会把用户信息进行设置给JWT中。

然后把JWT设置给access_token。并且设置过期时间,以及token的类型为bearer

 设置完成之后进行使用流进行写出 其中还使用到了转化。

 我们通过流写出响应给客户端浏览器的数据对应的格式为JSON,编码为Utf-8

 6.结束之后,postman(客户端)上会显示服务端响应回来的数据,该数据为Json格式

这些数据就是我们上边利用PrintWriter打印流进行写出的:

 第二个请求的流程:

首先第二个请求就是对后端服务器中的Controller类中的接口对应的资源进行的请求。

当第一个请求执行成功之后,说明SpringSecurity登录验证已经成功 说明可以继续请求后端资源接口。

第二个请求的前提:

(1)第一个请求成功

(2)携带第一个请求之后返回的access_token。这个access_token其实就是JWT。我们把这个JWT

设置给Authorization。格式为 :bear+空格+JWT

具体步骤:

 1.这个请求首先会被过滤器进行拦截

2.过滤器发现这个用户已经成功进行了security验证登录。那么当该用户进行这一次请求的时候,

肯定会携带一个access_token。这个东西就是JWT。JWT中封装的就是我们用户的信息 !

所以说:过滤器的作用就是继续解析这个JWT。

3.解析完成之后,再进行封装设置。

 对两次请求的总结:

当第一次请求时,客户端postman携带想要进行登录的用户信息,服务端接收请求,然后进行登录

验证。登录验证成功之后,也就是第一次请求之后,服务端想要写出响应给客户端浏览器用户信息

(即是JWT),但是服务端会把JWT封装叫做access_token进行真正响应给客户端。

所以其实JWT=access_token。

第一次请求之后,客户端具有了已经登录用户的信息 即是access_token。

当第二次请求发出时,客户端postman把第一次请求获取到access_token中JWT数据进行设置给

第二次请求的Header字段中Authorization。第二次请求进行发出,此时过滤器进行拦截到然后进行

对这个Authorization字段进行解析。解析得到的是用户信息,此时对于第二次请求到达服务端而言

我们已经具有了该用户的信息。我们可以通过该用户的信息进行检验是否该用户已经完成了

security登录验证。如果完成了,那么就可以接着进行下一步对后端服务器资源的请求。所以说,

当第二次请求完成了过滤器对其JWT的解析之后,后端服务器就已经获取到了这个用户对应的信

息。所以当我们进行分为后端服务器资源的时候,我们会进行权限判断,此时由于我们第二次请求

中的过滤之后,我们已经把解析之后的JWT的数据 即是用户信息的数据设置给了

所以说,我们就可以进行判断是否该服务端Controller的接口是否具有用户权限进行访问 

 为什么要这样做?

因为在微服务的项目中,我们可以是多个服务端。所以说,我们一个用户信息保证完成一次

security登录验证之后,我们就可以在所有服务端进行请求资源的权力。




推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • php实现用户注册登录界面的方法:1、创建log.php登录主界面;2、设置register.php注册主界面;3、通过mysqli_connect连接数据库并进行相应的数据操作即可。 ... [详细]
  • postmain报400_Postman测试@RequestBody发送请求时报400错误
    postman测试requestbody时碰到400错误图1原因:传参数如果不使用RequestBody,在使用Postman进行Post请求时,通常做 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 什么是Zuul?Zuul包含了对请求的路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。而过滤器功能则负责对请求的处理过 ... [详细]
author-avatar
Roux
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有