SpringSecurity6从入门到实战之自定义登录页面

SpringSecurity6从入门到实战之自定义登录页面

在使用SpringSecurity进行认证操作的时候,可以发现默认提供的登录页面比较简陋.那么我们能否对登录页面进行自定义配置呢?接下来开始讲解应该如何进行配置

自定义登录页面流程

引入模板依赖

由于自定义登录页面会使用到前端相关技术,这里需要引入thymeleaf依赖

xml 复制代码
<!--thymeleaf-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在 templates 中定义登录界面

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>自定义登录页面</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" th:action="@{/doLogin}">
    用户名:<input name="uname" type="text"/><br>
    密码:<input name="upass" type="password"/><br>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

定义登录页面 controller

新建LoginController

java 复制代码
@Controller
public class LoginController {

    @RequestMapping("/login.html")
    public String login() {
        return "login";
    }
}

这里直接访问localhost:8080/login.html会发现还是会需要进行认证操作,因为我们在自定义配置中还没有进行放行

定义 Spring Security 配置类

java 复制代码
@Configuration
@EnableWebSecurity
public class MySecurityConfig {
    // 自定义表单认证
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()
                .requestMatchers("/test").permitAll() // 放行该资源
                .requestMatchers("/login.html").permitAll() // 放行该资源
                .anyRequest().authenticated() // 其它请求 必须先认证通过后 才能访问
                .and().formLogin() // 开启表单认证
                .loginPage("/login.html")  // 默认登录页
                .loginProcessingUrl("/doLogin")  // 处理登录请求的url
                .usernameParameter("uname") // 用户名文件框的名称
                .passwordParameter("upass") // 密码框的名称
                .and().csrf().disable();  //关闭 CSRF
        ;

        return http.build();
    }
}

可以发现这里的配置项都是跟login.html中的内容一一对应

测试

这里就可以发现访问需要认证的/hello会跳转到我们自定义的登录页面来了

输入账号密码进行认证


最终发现通过认证操作可以访问/hello接口了

相关推荐
寻星探路39 分钟前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧3 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法4 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7254 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎4 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄4 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
金刚猿4 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
忆~遂愿4 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds4 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹4 小时前
【Java基础】多态 | 打卡day2
java·开发语言