使用一段代码实现springboot登录注册功能,并向我展示映射文件
时间: 2024-02-25 10:53:05 浏览: 14
好的,下面是一个简单的 Spring Boot 登录注册功能的实现代码,包含了用户注册、登录、退出登录等功能,并使用了 Thymeleaf 模板引擎进行页面渲染:
UserController.java 文件:
```java
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/register")
public String registerPage(Model model) {
model.addAttribute("user", new User());
return "register";
}
@PostMapping("/register")
public String register(@ModelAttribute("user") @Valid User user, BindingResult result) {
if (result.hasErrors()) {
return "register";
}
userService.save(user);
return "redirect:/login";
}
@GetMapping("/login")
public String loginPage(Model model) {
model.addAttribute("user", new User());
return "login";
}
@PostMapping("/login")
public String login(@ModelAttribute("user") @Valid User user, BindingResult result, HttpSession session) {
if (result.hasErrors()) {
return "login";
}
User loginUser = userService.login(user);
if (loginUser == null) {
result.rejectValue("password", null, "用户名或密码错误");
return "login";
}
session.setAttribute("user", loginUser);
return "redirect:/";
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
return "redirect:/";
}
}
```
UserService.java 文件:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void save(User user) {
userRepository.save(user);
}
public User login(User user) {
User loginUser = userRepository.findByUsername(user.getUsername());
if (loginUser != null && loginUser.getPassword().equals(user.getPassword())) {
return loginUser;
}
return null;
}
}
```
UserRepository.java 文件:
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
User.java 文件:
```java
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "用户名不能为空")
@Column(nullable = false, unique = true)
private String username;
@NotBlank(message = "密码不能为空")
@Column(nullable = false)
private String password;
// 省略 getter 和 setter 方法
}
```
register.html 文件:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<h1>注册</h1>
<form th:action="@{/register}" th:object="${user}" method="post">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" th:field="*{username}" required autofocus>
<span th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></span>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" th:field="*{password}" required>
<span th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></span>
</div>
<div>
<button type="submit">注册</button>
</div>
</form>
</body>
</html>
```
login.html 文件:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h1>登录</h1>
<form th:action="@{/login}" th:object="${user}" method="post">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" th:field="*{username}" required autofocus>
<span th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></span>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" th:field="*{password}" required>
<span th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></span>
</div>
<div>
<button type="submit">登录</button>
</div>
</form>
</body>
</html>
```
logout.html 文件:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>退出登录</title>
</head>
<body>
<h1>您已退出登录</h1>
<p><a href="/">返回首页</a></p>
</body>
</html>
```
以上代码中的映射文件为:
```java
@GetMapping("/register")
@PostMapping("/register")
@GetMapping("/login")
@PostMapping("/login")
@GetMapping("/logout")
```