Spring Secriuty登录失败错误状态999重定向302
原因是login.html登录页面有不能加载的静态资源,找出来去掉就好了,比如 bootstrap.min.css
环境
使用Spring Boot Security 3做一个登录功能,使用了一个教程提供的HTML登录页面,代码如下
Spring Security配置,自定义了登录页,资源都做了放行,能正常加载,使用数据库认证,正常查出
@Configuration
public class SecurityConfiguration {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> {
auth.requestMatchers("/static/**").permitAll();
auth.anyRequest().authenticated();
})
.formLogin(conf -> {
conf.loginPage("/login");
conf.loginProcessingUrl("/doLogin");
conf.defaultSuccessUrl("/success");
conf.permitAll();
})
.logout(conf -> {
conf.logoutUrl("/doLogout");
conf.logoutSuccessUrl("/login");
conf.permitAll();
})
.csrf(AbstractHttpConfigurer::disable)
.build();
}
}
数据库认证
@Service
public class SecurityUserService implements UserDetailsService {
@Autowired
UserService userService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("登录用户:" + username);
User user = userService.getPasswordByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("用户 " + username + " 登录失败,用户名不存在!");
}
System.out.println(user);
return org.springframework.security.core.userdetails.User
.withUsername(user.getName())
.password(user.getPassword())
.roles(user.getRole())
.build();
}
}

错误
但是在登录时,总是失败
{
"timestamp": "2023-09-20T08:24:33.240+00:00",
"status": 999,
"error": "None"
}

如果此时修改url再次登录,或者直接访问目标页面,是可以成功的
或者取消自定义登录页,直接使用Spring Security提供的默认登录页是可以登录
解决
问题大致意思是页面有不能加载的静态资源,会转发错误页面,而Spring Security认为错误页面没有授权,就出现这个上面的错误页面,所以在login.html页面,很容易找到一个特殊的静态资源,bootstrap.min.css,去掉就好了
参考java - Spring 安全性重定向到状态代码为 999 的页面 - 堆栈溢出 (stackoverflow.com)
在浪费了很多时间之后,我想出了发生了什么。
所以 spring 找不到登录页面上使用的静态资源之一。但是,它不会返回此资源的状态,而是尝试呈现错误页面并将请求转发到 。然后 spring 安全性拒绝此请求,因为用户未获得授权。它将请求保存到会话(用于成功登录后重定向)并将用户重定向到登录页面。
404``/error``/error当然,用户看不到此重定向,因为状态返回在后台完成的请求。但主要问题是保存在会话中的请求。
302``/error然后用户登录成功,弹簧检查会话中的此属性并重定向到页面。默认情况下,spring假设您在静态资源的某个位置有这样的页面。如果您没有此页面,您将看到状态代码为999的奇怪错误。
/error解决方案 1
忽略安全配置中的页面:
/errorweb.ignoring().antMatchers("/favicon.ico", "/resources/**", "/error");
因此,成功登录后,此请求将不会保存到会话以供用户重定向。您将看到,在登录页面上,对静态资源的请求的状态代码将从 更改为 。
302``404解决方案 2
忽略部分 Spring 引导自动配置:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
这给出了相同的结果,但禁用了配置中的某些 bean,所以要小心。
ErrorMvcAutoConfiguration
我有同样的问题。我尝试注释每个样式表链接,以查看导致错误的一个。这是我的自定义css文件。问题是在我的 css 文件中,我有一个不存在的图像的 url,还有另一个错误的@import语句。评论这些之后,一切正常。
Spring Secriuty登录失败错误状态999重定向302的更多相关文章
- Spring Security之多次登录失败后账户锁定功能的实现
在上一次写的文章中,为大家说到了如何动态的从数据库加载用户.角色.权限信息,从而实现登录验证及授权.在实际的开发过程中,我们通常会有这样的一个需求:当用户多次登录失败的时候,我们应该将账户锁定,等待一 ...
- 为什么Spring Security看不见登录失败或者注销的提示
有很多人在利用Spring Security进行角色权限设计开发时,一般发现正常登录时没问题,但是注销.或者用户名时,直接就回到登录页面了,在登录页面上看不见任何提示信息,如“用户名/密码有误”或“注 ...
- springmvc集成shiro登录失败处理
一般的登录流程会有:用户名不存在,密码错误,验证码错误等.. 在集成shiro后,应用程序的外部访问权限以及访问控制交给了shiro来管理. shiro提供了两个主要功能:认证(Authenticat ...
- Spring Security 登录校验 源码解析
传统情况下,在过滤器中做权限验证,Spring Secuirty也是在Filter中进行权限验证. 创建并注册过滤器 package com.awizdata.edubank.config; impo ...
- Shiro+SpringMVC 实现更安全的登录(加密匹配&登录失败超次数锁定帐号)
原文:http://blog.csdn.net/wlwlwlwl015/article/details/48518003 前言 初学shiro,shiro提供了一系列安全相关的解决方案,根据官方的介绍 ...
- spring security 登录、权限管理配置
登录流程 1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表) 2)用户发出请求 3)过滤器拦截(MySecurityFil ...
- 四:Spring Security 登录使用 JSON 格式数据
Spring Security 登录使用 JSON 格式数据 1.基本登录方案 1.1 创建 Spring Boot 工程 1.2 添加 Security 配置 2.使用JSON登录 江南一点雨-Sp ...
- Oracle取消用户连续登录失败次数限制
当用户连续登录失败次数过多时,Oracle会锁定该用户,“FAILED_LOGIN_ATTEMPTS”用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以按照以下方法操作: ...
- 用户 'IIS APPPOOL\DefaultAppPool' 登录失败。
今天新建了一个ASP.NET(Language=C#)网站,配置好数据库后编写了几行代码测试数据库的是否能正常使用. 当运行程序时,第一个页面都没有打开就出现了错误(因为我首页就访问数据库,填充一些D ...
- ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联
用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...
随机推荐
- 2022-12-13:游戏玩法分析 I。写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。 +-----------+-------------+ | player_id | first_l
2022-12-13:游戏玩法分析 I.写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期. ±----------±------------+ | player_id | first_log ...
- Error in nextTick: "TypeError: Right-hand side of 'instanceof' is not an object"
发生这种情况,直接去查看 props 对象是否 类型正确 props 有 大概两种 写法吧, 一种就是对象形 ,一种是数组形 // 对象形props: { show: { type: Boolean ...
- 《Generative Adversarial Nets》论文精读
论文精读<Generative Adversarial Nets> 导言:生成模型是目前爆火的一个研究方向,据Microsoft对于ChatGPT-4的研究称"ChatGPT-4 ...
- ODOO13之六:Odoo 13开发之模型 – 结构化应用数据
在本系列文章第三篇Odoo 13 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...
- 高分辨率大图像可缩放 Web 查看器的实践
高分辨率大图像可缩放 Web 查看器的实践 一.使用 vips 将高分辨率大图像转换为 DZI 安装 vips 具体安装步骤请参考libvips Install. 注意,在 windows 11 中安 ...
- .NET7 中Autofac依赖注入整合多层,项目中可直接用
一.配置Autofac替换内置DI 1.安装Nuget包:Autofac.Extensions.DependencyInjection 2.Program.cs中加上 builder.Host.Use ...
- 2. Tomcat-Servlet
1. Tomcat 目录结构说明: bin 可执行文件目录 conf 配置文件目录 lib 存放 lib 的目录 logs 日志文件目录 webapps 项目部署的目录 work 工作目 ...
- React后台管理系统(TypeScript、Redux状态管理)环境搭建01
搭建环境的时候,我们必须要先确保环境有node环境和npm环境,如下使用cmd命令 确保自己有了这两个环境之后我们就可以开始搭建项目,首先找一个文件夹,这个文件夹用来初始化当前环境,例如,我这里选 ...
- Python3.7源码编译
1.下载Python3.7.0源码 git clone https://github.com/python/cpython.gitgit checkout v3.7.0 wget https://ww ...
- .NET 7 新特性全面解析
在 2021 年 11 月 8 日发布的 .NET 6 当前已经广泛使用.微软团队已经开始着手为.NET 7制定计划和新特性.本文将为您全面解析.NET 7 的新特性,并提供源代码示例. 1. 更好的 ...