You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security 6.2.4无法创建自定义个性化登录页面问题

Spring Security自定义登录页不生效问题排查与解决

我在学习Spring Security时,尝试创建自定义登录HTML页面但遇到问题:已按照官方文档配置了SecurityConfig、LoginController及Thymeleaf登录页面,但本地部署后访问/login时仍显示Spring默认登录页。相关代码如下:

原配置代码

SecurityConfig类

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .formLogin(form -> form
                        .loginPage("/login")
                        .permitAll()
                );
        return http.build();
    }
}

LoginController类

@Controller
class LoginController {
    @GetMapping("/login")
    String login() {
        return "login";
    }
}

Thymeleaf登录页面(login.html)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
    <title>Please Log In</title>
</head>
<body>
<h1>Please Log In</h1>
<div th:if="${param.error}">
    Invalid username and password.</div>
<div th:if="${param.logout}">
    You have been logged out.</div>
<form th:action="@{/login}" method="post">
    <div>
        <input type="text" name="username" placeholder="Username"/>
    </div>
    <div>
        <input type="password" name="password" placeholder="Password"/>
    </div>
    <input type="submit" value="Log in" />
</form>
</body>
</html>

问题排查与修复方案

1. 为SecurityFilterChain方法添加@Bean注解

原SecurityConfig中的filterChain方法没有标注@Bean,Spring无法识别并加载这个自定义的安全过滤链配置,导致默认配置生效。修正后代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .formLogin(form -> form
                        .loginPage("/login")
                        .permitAll()
                );
        return http.build();
    }
}

2. 确保LoginController的可见性

原LoginController使用默认包访问权限(无public修饰符),若控制器所在包不在Spring组件扫描范围内,会导致/login请求无法映射到自定义视图。修正后代码:

@Controller
public class LoginController {
    @GetMapping("/login")
    String login() {
        return "login";
    }
}

3. 验证Thymeleaf模板路径

确认login.html放置在Spring Boot默认的Thymeleaf模板目录src/main/resources/templates/下,否则控制器无法找到对应的视图文件。

4. 排查配置冲突

若项目中存在旧的WebSecurityConfigurerAdapter继承类,会与新的SecurityFilterChain配置冲突,需移除旧的安全配置类。

内容的提问来源于stack exchange,提问作者Toko Tabagari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:25:02