介绍
在Web应用程序中,经常需要实现用户登录功能。本文将使用Spring Boot来演示如何使用静态资源访问、拦截器和Thymeleaf模板引擎来实现一个简单的登录功能。
准备工作
首先,我们需要创建一个基于Spring Boot的Maven项目,并添加以下依赖项:
<dependencies>
<!-- Spring Boot Web 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Thymeleaf 模板引擎 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
静态资源访问
静态资源文件(如CSS、JavaScript、图片等)通常放在项目的resources/static
目录下。Spring Boot默认会将该目录下的静态资源映射到根路径下。
例如,将一个名为style.css
的CSS文件放在resources/static/css
目录下,可以通过/css/style.css
来访问该文件。
登录页面
创建一个名为login.html
的Thymeleaf模板文件,并放在resources/templates
目录下。以下是一个简单的登录页面的示例代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" th:href="@{/css/style.css}" type="text/css">
</head>
<body>
<h1>Login</h1>
<form action="#" method="post">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username">
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
</body>
</html>
这个页面包含一个表单,用于输入用户名和密码,并通过POST请求将表单数据提交给服务器。
登录拦截器
创建一个名为LoginInterceptor.java
的拦截器类,并实现HandlerInterceptor
接口。该拦截器用于拦截访问受限资源之前的请求,判断用户是否已经登录。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 检查用户是否已经登录
if (request.getSession().getAttribute("user") == null) {
// 如果用户未登录,则重定向到登录页面
response.sendRedirect("/login");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
}
}
配置拦截器
创建一个名为WebConfig.java
的Spring Boot配置类,并使用@Configuration
注解标记。在该类中,注册自定义的拦截器。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册登录拦截器,并指定拦截路径
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/admin/**");
}
}
在上述示例中,我们将拦截路径设置为/admin/**
,表示只有以/admin
开头的路径需要进行登录验证,其他路径可以匿名访问。
控制器
创建一个名为LoginController.java
的控制器类,用于处理登录相关的请求。
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String loginPage() {
return "login";
}
@PostMapping("/login")
public String login(HttpServletRequest request, String username, String password) {
// 在实际应用中,通常需要将用户名和密码与数据库中的记录进行比对,这里只是一个简单示例
if (username.equals("admin") && password.equals("password")) {
// 登录成功,将用户信息保存到Session中
request.getSession().setAttribute("user", username);
return "redirect:/admin/dashboard";
} else {
return "redirect:/login?error";
}
}
@GetMapping("/admin/dashboard")
public String dashboardPage() {
return "dashboard";
}
}
在上述示例中,loginPage
方法用于返回登录页面,login
方法用于处理登录请求,并将用户信息保存到Session中。当用户登录成功后,会重定向到/admin/dashboard
页面。
验证登录状态
为了在登录成功后,页面能够正确显示用户信息,我们可以在模板中添加以下代码来验证登录状态:
<div th:if="${session.user != null}">
<p>Welcome, <span th:text="${session.user}"></span>!</p>
</div>
<div th:unless="${session.user != null}">
<p>Please login!</p>
</div>
以上代码会根据Session中是否存在user
属性来显示欢迎信息或登录提示。
运行和测试
完成以上步骤后,启动应用程序,并在浏览器中访问http://localhost:8080/login
。您将看到一个简单的登录页面。尝试使用用户名admin
和密码password
进行登录,并观察页面是否正确跳转到了/admin/dashboard
页面,并显示了欢迎信息。
总结
本文演示了如何使用Spring Boot实现静态资源访问、拦截器和Thymeleaf模板引擎来实现一个简单的登录功能。这只是个基本示例,实际应用中可能需要更加复杂的权限验证和用户管理。希望本文能为您带来一些帮助,并为您在开发Web应用程序时节省时间和精力。
更多关于Spring Boot的学习资料可以参考官方文档:https://spring.io/projects/spring-boot
本文来自极简博客,作者:魔法使者,转载请注明原文链接:Spring Boot静态资源访问 拦截器 Thymeleaf模板引擎实现简单登录