spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

时间:2023-01-25 21:32:18

昨天因为集成spring security oauth2,所以对之前spring security的配置进行了一些修改,然后就导致登录后不能正确跳转回被拦截的页面,而是返回到localhost根目录。

开始以为是被oauth2拦截了导致出了问题,但是security的拦截器是优先起作用的,所以这不可能。

最后实在没法只有打断点调试找毛病(下图为spring security登录后重定向至拦截前访问的url的实现原理流程)

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

图片是在这里看到的https://blog.csdn.net/zy_cookie/article/details/49535413

从图上可以看出保存 被拦截的request是在 这个类里进行的

HttpSessionRequestCache

在IDEA里搜索这个类,在saveRequest方法设置一个断点,然后进行调试

调试发现当浏览器输入权限限制的url时(如/admin/console),系统会调用saveRequest方法对当前request对象进行缓存(如下图所示)

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

既然保存的是/admin/console,但是为啥取出来的是/呢,继续执行就发现问题了,系统又调用了一次saveRequest方法,而这次保存的request对象是“/”路径的

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

也就是说之前保存的就是被这个给覆盖了,通过源码可以发现,saveRequest方法中是把request对象缓存到session,而且key值为静态值(由此可见如果我们想要自定义一些方法时可以通过该key值取出保存的request对象,不过系统也提供了getRequst方法)

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

根据流程图可知只有被拦截的请求才会被捕获保存起来,于是我去检查我webSercurityConfig,发现除了静态资源其他的资源全都需要验证,也因此“/”根目录被拦截了,把“/”添加到排除列表后问题解决

通过后续的调试发现“/”是因为我自定义的登录页面发出的该请求

值得注意的是spring security完成用户登录后跳转会原页面的处理是在

SavedRequestAwareAuthenticationSuccessHandler类里面进行的,如果想要自定义登录成功后的操作可以继承该类,重写该方法

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

不过我当时写的时候因为生成的代码里自动生成调用父类的该方法导致获取不到saveRequest(就是下面这行)

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

原因是在

SavedRequestAwareAuthenticationSuccessHandler类处理时,获取到saveRequst后会对session中缓存的进行删除

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题

														
		

spring security使用自定义登录界面后,不能返回到之前的请求界面的问题的更多相关文章

  1. spring security采用自定义登录页和退出功能

    更新... 首先采用的是XML配置方式,请先查看  初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...

  2. Spring Security 的注册登录流程

    Spring Security 的注册登录流程 数据库字段设计 主要数据库字段要有: 用户的 ID 用户名称 联系电话 登录密码(非明文) UserDTO对象 需要一个数据传输对象来将所有注册信息发送 ...

  3. Spring Security在标准登录表单中添加一个额外的字段

    概述 在本文中,我们将通过向标准登录表单添加额外字段来实现Spring Security的自定义身份验证方案. 我们将重点关注两种不同的方法,以展示框架的多功能性以及我们可以使用它的灵活方式. 我们的 ...

  4. spring security之 默认登录页源码跟踪

    spring security之 默认登录页源码跟踪 ​ 2021年的最后2个月,立个flag,要把Spring Security和Spring Security OAuth2的应用及主流程源码研究透 ...

  5. Spring Security 3多用户登录实现之二 多登录界面展示

    作者 接前讲,首先针对一个多种用户类型的登录需求,需要先实现多种用户类型的登录界面的展示,Spring Security提供了这样一个接口来帮助我们实现多种用户类型的登录界面的展示,这个接口就是Aut ...

  6. spring security 之自定义表单登录源码跟踪

    ​ 上一节我们跟踪了security的默认登录页的源码,可以参考这里:https://www.cnblogs.com/process-h/p/15522267.html 这节我们来看看如何自定义单表认 ...

  7. Spring Security Oauth2 单点登录案例实现和执行流程剖析

    Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(au ...

  8. Spring Security 表单登录

    1. 简介 本文将重点介绍使用Spring Security登录. 本文将构建在之前简单的Spring MVC示例之上,因为这是设置Web应用程序和登录机制的必不可少的. 2. Maven 依赖 要将 ...

  9. 为什么Spring Security看不见登录失败或者注销的提示

    有很多人在利用Spring Security进行角色权限设计开发时,一般发现正常登录时没问题,但是注销.或者用户名时,直接就回到登录页面了,在登录页面上看不见任何提示信息,如“用户名/密码有误”或“注 ...

随机推荐

  1. return view详解

    1.return View(); 返回值 类型:System.Web.Mvc.ViewResult将视图呈现给响应的 View() 结果. 注释 View() 类的此方法重载将返回一个具有空 View ...

  2. IOS常用加密Encryption

    NSString+Encryption.h // // NSString+Encryption.h // haochang // // Created by Administrator on 14-4 ...

  3. 编译安装CoreSeek-4.1

    编译安装CoreSeek-4.1 yum -y install expat-devel* wget  http://www.coreseek.cn/uploads/csft/4.0/coreseek- ...

  4. bzoj 3620: 似乎在梦中见过的样子

    Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...

  5. C++中string、char *、char[]的转换

    头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会.现在从网上找了点资料,看了看,知道点东西了. 一.string转char*. 主要有三种方法可以将str转换为char*类型,分别是:da ...

  6. Java基础总结02:环境变量的配置

    (一)Windows系统下配置环境变量 ※在"系统变量"中设置3项属性JAVA_HOME.PATH.CLASSPATH(JDK1.5之后此项属性不必再配),若已存在则点击&quot ...

  7. Mysql创建多列唯一索引Sql

    ALTER TABLE `t_city_combo` ADD UNIQUE INDEX ` t_city_combo_index` (`combo_id`, `combo_name`, `city_i ...

  8. [翻译] PPDragDropBadgeView

    PPDragDropBadgeView https://github.com/smallmuou/PPDragDropBadgeView PPDragDropBadgeView is a badge ...

  9. post方式发送接收文件

    //文件post发送 var express = require('express');var router = express.Router();var request = require(&quo ...

  10. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...