spring security 防止已经完成认证的会话再次访问login页面

版本

spring-security:6.2.1

方案

添加过滤器检查会话认证信息,如果包含非匿名用户的认证信息则调用认证成功处理器

final static String URL_LOGIN = "/login";
final AuthenticationSuccessHandler authenticationSuccessHandler = new SavedRequestAwareAuthenticationSuccessHandler();
@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http
) {// 表单登录http.formLogin(formLogin -> {formLogin.loginPage(URL_LOGIN);formLogin.permitAll();formLogin.successHandler(authenticationSuccessHandler);});...
}
// 登录页过滤器
@Bean
Filter loginPageFilter() {return new OncePerRequestFilter() {@Overrideprotected void doFilterInternal(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain filterChain) throws ServletException, IOException {Authentication authorization = SecurityContextHolder.getContext().getAuthentication();if (authorization != null&& authorization.isAuthenticated()&& !(authorization instanceof AnonymousAuthenticationToken)&& request.getRequestURI().equals(URL_LOGIN)) {log.debug("user is authenticated but trying to access login page, redirecting to cached request");authenticationSuccessHandler.onAuthenticationSuccess(request, response, authorization);}filterChain.doFilter(request, response);}};
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEE入门篇|遥感专业术语(实践操作3):时间分辨率(Temporal Resolution)

目录 时间分辨率(Temporal Resolution) 1.Landsat 2.Sentinel-2 时间分辨率(Temporal Resolution) 时间分辨率是指特定传感器图像流的重访时间或时间节奏,重访时间是指卫星连续访问地球表面同一位置…

小迪安全30WEB 攻防-通用漏洞SQL 注入CTF二次堆叠DNS 带外

#知识点: 1、数据库堆叠注入 根据数据库类型决定是否支持多条语句执行 2、数据库二次注入 应用功能逻辑涉及上导致的先写入后组合的注入 3、数据库 Dnslog 注入 解决不回显(反向连接),SQL 注入,命令执行,SSRF 等 4、黑盒模式分析以上 二次注入&…

创作纪念日:记录我的成长与收获

机缘 一开始是在我深入学习前端知识的Vue.js框架遇到了一个问题,怎么都解决不了,心烦意乱地来csdn上找解决方法。开心的是真被我找到了,真的很感恩,也意识到在这个平台上分享自己的经验是多么有意义的事情,可能随便的…

BRIA.AI开源最强AI一键抠图模型RMBG,超简上手体验

本文首发: AIWalker 欢迎关注AIWalker,近距离接触底层视觉与基础AI技术 近日,BRIA.AI团队于HuggingFace开源了一个基于ISNet背景移除模型RMBG-1.4,它可以有效对前景与背景进行分离。RMBG-1.4在精心构建的数据集上训练而来,该数据包…

C++指针变量的引用

C中的指针变量引用是指使用引用来访问指针所指向的内存地址中的值。这种技术可以简化对指针所指向的对象的访问,并提高代码的可读性。 要创建指针变量的引用,可以使用以下语法: int* ptr; // 声明一个指针变量 int*& ref ptr; // 创建…

ElasticSearch报错解决

最近在学习ES的一些东西,遇到了一些问题,整理一下,希望可以帮助到也在学习ES的小伙伴 1、问题1 报错场景: 单机启动多ES集群 报错信息: [2024-02-24T22:58:10,567][WARN ][o.e.t.RemoteClusterService] [cluster0no…

django rest framework 学习笔记-实战商城

01项目环境搭建_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 # 创建项目 django-admin startproject MyShop# 创建app E:\desktop\my_drf\MyShop>django-admin startapp goodsE:\desktop\my_drf\MyShop>django-admin startapp orderE:\desktop\my_drf\MyShop>…

代码随想录算法训练营day39 | 62.不同路径、63. 不同路径 II

62.不同路径 dp数组以及下标的含义:dp[i][j]代表到达第i行第j列有多少条不同的路径递推公式:dp[i][j] dp[i][j-1] dp[i-1][j]dp数组初始化:dp[0][:] 1 dp[:][0] 1遍历顺序:从前往后遍历举例推导dp数组: 按照这种…

springboot+vue项目基础开发(16)主页面布局

主页面代码,在view下面创建mainLayout.vue <script setup> import{Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from @element-plus/icons-vue

【洛谷 P8706】[蓝桥杯 2020 省 AB1] 解码 题解(模拟+输入输出)

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母&#xff0c;可能包含大写和小写。 在这串字母中&#xff0c;有很多连续的是重复的。小明想了一个办法将这串字母表达得更短&#xff1a;将连续的几个相同字母写成字母 出现次数的形式。 例如&#xff0c;连续…

《Docker极简教程》--Docker网络--Docker网络的配置和使用

一、Docker网络配置 1.1 单主机网络配置 创建自定义桥接网络 在Docker中&#xff0c;创建自定义桥接网络是一种常见的网络配置方式&#xff0c;特别适用于单主机环境&#xff0c;可以帮助容器相互通信并与外部网络进行通信。下面我将介绍如何在单主机上创建自定义桥接网络&…

C++ //练习 8.2 测试函数,调用参数为cin。

C Primer&#xff08;第5版&#xff09; 练习 8.2 练习 8.2 测试函数&#xff0c;调用参数为cin。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块见练习8.1 /**************************************************************…

代码随想录|day 23

Day 23 一、回溯 二、代码 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; class Solution { private:vector<int>path;vector<vector<int>>result;void backtracing(int sum,int k,int n,int startindex){//中止条件if(path.size()k){if(sum…

three.js第一个3D案例

在正式学习Three.js之前&#xff0c;先做一些必要的准备工作&#xff0c;具体说就是下载threejs官方文件包&#xff0c;threejs官方文件包提供了很多有用的学习资源。 threejs官方文件包所有版本&#xff1a;https://github.com/mrdoob/three.js/releases threejs文件资源目录…

桥接模式:解耦抽象与实现,实现灵活多变的扩展结构

文章目录 一、引言二、应用场景与技术背景三、模式定义与实现四、实例详解五、优缺点分析总结&#xff1a; 一、引言 ​ 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们可以独立变化。这种模式通过创建一个抽象层和实现层的结构&…

Android RecyclerView 如何展示自定义列表 Kotlin

Android RecyclerView 如何展示自定义列表 Kotlin 一、前提 有这么一个对象 class DeviceDemo (val name: String, val type: String, val address: String)要展示一个包含这个对象的列表 bluetoothDevices.add(DeviceDemo("bb 9800", "LE", "32:…

matlab实现汉明窗低通滤波器,汉宁窗带通滤波器,布莱克曼窗高通滤波器,矩形窗的带阻滤波器。

1 汉明窗低通滤波器 : 在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。 下面是一个示例代码,演示如何在Matlab中使用汉明窗设计低通滤波器: % 定义滤波器参数 fs = 1000; % 采样频率 cutOffFreq = 100; …

如何解决无法npm下载electron依赖的

使用electron&#xff0c;安照官方例子&#xff0c;结果是失败的。原因是下载官网的二进制包失败&#xff0c;结果不能执行。 也用了npm的镜像&#xff1a;registry "https://registry.npmmirror.com/"&#xff0c;也不行。 后来网上折腾一段时间&#xff0c;看到…

Sublime Text4配置C#运行环境

这里写自定义目录标题 前言部署.NET环境Sublime Text4配置C#编译环境1. 下载插件 运行测试 前言 今天把家里的9年前的远古神机搬了出来&#xff0c;重装了个win7的精简版&#xff0c;本打算装个VScode测试一下是否能写C#代码&#xff0c;结果是可以的&#xff0c;但&#xff0…

Qt 设置隐式加载dll路径

在c++中DLL的加载方式有两种,显式加载和隐式加载。 隐式加载 在程序从开始运行时,就会按照系统中一定的搜索路径,寻找动态库,找到就自动加载它,才能成功运行程序,这些步骤,是系统自动完成的。 显示加载 我们对动态库的调用,是在代码中直接使用LoadLibrary,或其他加载函…