Spring Boot Web 登录认证
在现代Web应用中,用户的身份认证是一个至关重要的功能。Spring Boot 提供了一套轻量级的解决方案来实现用户登录认证。本文将介绍如何使用 Spring Boot 和 Spring Security 实现一个简单的登录认证系统。
1. 环境准备
在开始之前,确保你已经安装了以下工具: - JDK (建议使用 8 及以上版本) - Maven - IDE (如 IntelliJ IDEA 或 Eclipse)
接下来,创建一个新的 Spring Boot 项目,使用 Spring Initializr(https://start.spring.io/)选择以下依赖: - Spring Web - Spring Security - Thymeleaf(用于视图层)
2. 项目目录结构
简单的项目结构可能如下所示:
src
└── main
├── java
│ └── com
│ └── example
│ └── demo
│ ├── DemoApplication.java
│ ├── SecurityConfig.java
│ ├── WebController.java
│ └── UserDetailsServiceImpl.java
└── resources
├── templates
│ ├── login.html
│ └── home.html
└── application.properties
3. 配置 Spring Security
首先,让我们创建一个基本的 Spring Security 配置类。
// SecurityConfig.java
package com.example.demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 在内存中定义一个用户(用户名:user,密码:password,角色:USER)
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}password")
.roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll() // 登录页面允许所有人访问
.anyRequest().authenticated() // 其他请求需要身份认证
.and()
.formLogin()
.loginPage("/login") // 自定义登录页面
. permitAll()
.and()
.logout()
.permitAll();
}
}
在上述代码中,我们指定了一个内存中的用户,并允许所有人访问登录页面。所有其他请求都需要用户登录才能访问。
4. 创建控制器
然后创建一个简单的控制器来处理请求。
// WebController.java
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class WebController {
@GetMapping("/login")
public String login() {
return "login"; // 返回登录视图
}
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "欢迎来到主页!");
return "home"; // 返回主页视图
}
}
5. 创建视图
接下来,在 src/main/resources/templates
目录下创建 login.html
和 home.html
两个文件。
login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form th:action="@{/login}" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" /><br/>
<label for="password">密码:</label>
<input type="password" id="password" name="password" /><br/>
<button type="submit">登录</button>
</form>
</body>
</html>
home.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>主页</title>
</head>
<body>
<h1 th:text="${message}"></h1>
<a href="/logout">注销</a>
</body>
</html>
6. 配置应用程序属性
最后,在 application.properties
文件中可以添加一些基本配置,例如:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
7. 启动应用
现在可以启动应用程序。进入到 DemoApplication.java
文件,运行该类。应用启动后,访问 http://localhost:8080/login
,输入用户名和密码(user/password)进行登录。
总结
通过以上步骤,我们成功实现了一个简单的 Spring Boot Web 登录认证系统。Spring Security 为我们处理了复杂的认证和授权逻辑,使得开发者可以专注于业务逻辑。这个例子可以作为更复杂应用的基础,当然在生产环境中,建议使用数据库来存储用户信息,并加强安全措施。