spring security 指定了 failureForwardUrl 的请求接口 但是没有效果

news/2025/3/13 7:20:11/文章来源:https://www.cnblogs.com/-hqq/p/18236239
  • springboot版本:3.3.0
  • spring security版本:3.3.0

代码如下:

spring security 配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;/*** <p>* spring security 配置类.* </p >** @author Heqq*/
@Configuration
public class SecurityConfiguration {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {return http.authorizeHttpRequests(auth -> {auth.requestMatchers("/error.html").permitAll() // error.html不需要被认证.requestMatchers("/login.html").permitAll() // login.html不需要被认证.anyRequest().authenticated(); // 所有请求都必须要被认证,必须登录之后被访问
                }).formLogin(c -> {c.loginProcessingUrl("/login") // 这个login不是随随便便写的,要跟login.html表单的action属性值一致,当发现是/login的时候,认为是登录,会执行UserDetailsServiceImpl的登录逻辑.loginPage("/login.html")// 自定义登录页面,斜杠不能少!!!
//                            .successForwardUrl("/main.html")// 登录成功后跳转的页面.successForwardUrl("/to-main")// 登录成功后跳转页面 Post请求.failureForwardUrl("/to-error"); // 登录失败后跳转页面  Post请求
                }).csrf(csrf -> csrf.disable()) // 关闭csrf防护
                .build();}
}

controller接口

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** <p>* 用户登录控制器.* </p >** @author Heqq*/
@Slf4j
@Controller
public class LoginController {/*** 登录成功后,跳转到主页.** @return*/@RequestMapping("to-main")public String toMain() {log.info("登录成功");return "redirect:main.html";}/*** 登录失败跳转的页面.** @return*/@RequestMapping("to-error")public String toError() {log.info("登录失败");return "redirect:error.html";}
}

静态页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录失败</title>
</head>
<body>
操作失败,请重新登录 <a href="/login.html">跳转</a>
</body>
</html>

启动项目后,来到登录页面,输入错误的密码,始终跳转到login.html页面,期望结果是:输入错误密码来到错误页面。

原因:虽然在spring security配置类放行了静态资源,也指定了登录失败的跳转url,但是没有放行跳转到错误页面的url!!!

 

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

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

相关文章

C++和MySQL的连接

CPlusPlus-MySQL 这个项目是C++和MySQL连接的代码DEMO-V1这个是C语言的版本 DEMO-V2 这个是C++的版本找到你的数据库安装目录复制到你的工程里然后加一个查询景点信息管理员不用注册游客的预约预约成功之后要输出一个预约票显示预约人信息和预约时段取消修改预约和代预约好像也…

Gin框架下的JWT

Gin框架下的JWT 什么是JWT 我们都知道,HTTP协议是无状态的,click here,那么服务端怎么知道用户状态的呢(比如是否登录呢),这里就需要用到中间件来进行用户认证。 中间件认证有这么几种方式sessiontokentoken和session最大的区别就是token是存储在客户端的: 我们都知道,s…

实验6

实验1点击查看代码 // P286例8.17 // 对教材上的程序作了微调整,把输出学生信息单独编写成一个函数模块 // 打印不及格学生信息和所有学生信息程分别调用 #include <stdio.h> #include <string.h> #define N 10 // 运行程序输入测试时,可以把这个数组改小一些输…

[转][翻译]深入理解Win32结构化异常处理(一)

在所有的Win32操作系统提供的功能里,最常用但是描述最不全的(underdocument)恐怕就是结构化异常处理了(structured exception handling (SEH))。当你想到Win32的结构化异常处理,你会想到 _try, _finally, 和 _except这些东西,你可以从任何一本Win32的书中找到SEH的很好的…

使用python进行贝叶斯统计分析|附代码数据

原文链接:http://tecdat.cn/?p=7637 最近我们被客户要求撰写关于贝叶斯统计的研究报告,包括一些图形和统计输出。 本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. ( 点击文末“阅读原文”获取完整代码数据******** )。 # Imports import pymc3 as pm # python的概率编…

R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析

原文链接:http://tecdat.cn/?p=7923 原文出处:拓端数据部落公众号使用R和Python进行分析的主要好处之一是,它们充满活力的开源生态系统中总是有新的和免费提供的服务。如今,越来越多的数据科学家能够同时在R,Python和其他平台上使用数据,这是因为供应商向R和Python引入了…

【专题】2024医药研发趋势年度回顾白皮书报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=36410 原文出处:拓端数据部落公众号 在开始编纂2024年的药物研发合集之前,我们先概览当前研发管线中的药物总数,以确立后续分析所依托的框架。鉴于本报告合集的核心内容围绕这些药物展开,对“研发管线”的明确定义显得尤为重要。 在此,我…

代码随想录算法训练营第二十九天 | 491.非递减子序列 46.全排列 47.全排列II

491.非递减子序列 题目链接 文章讲解 视频讲解 层间去重:回溯法相当于深搜,所以所以是一直递归到叶节点才开始回溯; 每次进入backtracking也就进入了搜索树的下一层,所以每进入一层需要用一个used_set来记录使用过的元素;class Solution { private:vector<int> sub;…

6.6--链表

链表的定义 C++的定义链表节点方式,如下所示: // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };不定义构造函数,C++默认生成一个构造函数,但是这个构造函…

6.5--链表

链表的定义 C++的定义链表节点方式,如下所示: // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };不定义构造函数,C++默认生成一个构造函数,但是这个构造函…