Spring Boot用户注册验证的实现全过程记录
在Spring Boot中实现用户注册验证可以帮助我们确保只有合法的用户才能够使用我们的服务,让我们的应用更加安全可靠。本攻略将介绍如何使用Spring Boot实现完整的用户注册及验证功能。
1. 创建Spring Boot项目并添加相关依赖
首先,需要创建一个Spring Boot项目,并在pom.xml
中添加如下依赖:
<dependencies>
<!-- web相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JPA相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Spring Security依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
2. 创建用户实体类并定义JPA映射
创建用户实体类User
,并使用JPA注解定义映射,示例代码如下:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String username;
@Column(nullable = false)
private String password;
// 省略getters/setters及其它方法
}
3. 创建用户注册页面及控制器
创建用户注册页面并使用Thymeleaf模板引擎生成页面,示例代码如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form method="post" th:action="@{/register}">
<label for="username">用户名</label>
<input type="text" id="username" name="username" required>
<label for="password">密码</label>
<input type="password" id="password" name="password" required>
<button type="submit">注册</button>
</form>
</body>
</html>
创建用户注册的控制器UserController
,示例代码如下:
@Controller
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/register")
public String registerPage(Model model) {
model.addAttribute("user", new User());
return "register";
}
@PostMapping("/register")
public String register(@ModelAttribute User user) {
userRepository.save(user);
return "redirect:/login";
}
}
控制器中的registerPage
方法用来展示用户注册页面,register
方法用来处理提交的注册表单,并将用户新增到数据库中。
4. 添加Spring Security配置
添加Spring Security配置,防止非法访问未授权的页面,示例代码如下:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/register").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
上述代码中,Spring Security的配置包括:
- 配置
PasswordEncoder
,使用BCrypt加密算法加密用户密码; - 重写
configure
方法,用来配置Spring Security的认证方式,这里使用UserDetailsService
获取用户信息,通过PasswordEncoder
来比对用户密码的正确性; - 重写
configure
方法,用来配置Spring Security的授权方式,这里允许用户访问/register
页面,并对其它页面进行认证保护; - 配置登录页面及注销页面。
5. 创建用户登录页面
创建用户登录页面,示例代码如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form method="post" th:action="@{/login}">
<label for="username">用户名</label>
<input type="text" id="username" name="username" required>
<label for="password">密码</label>
<input type="password" id="password" name="password" required>
<button type="submit">登录</button>
</form>
</body>
</html>
6. 在页面中显示用户信息
当用户登录成功后,可以在页面中显示其信息。修改控制器及模板文件如下:
@Controller
public class UserController {
@GetMapping("/profile")
public String profile(Principal principal, Model model) {
String username = principal.getName();
model.addAttribute("username", username);
return "profile";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户信息</title>
</head>
<body>
<h1>欢迎,[[${username}]]!</h1>
</body>
</html>
7. 示例说明
示例一:用户注册及登录
- 启动Spring Boot应用;
- 访问
http://localhost:8080/register
,注册新用户并保存; - 访问
http://localhost:8080/login
,用刚刚注册的用户登录; - 登录成功后,浏览器会重定向到
http://localhost:8080/profile
页面,并显示当前登录用户的信息。
示例二:非法访问
- 启动Spring Boot应用;
- 直接访问
http://localhost:8080/profile
,会重定向到http://localhost:8080/login
,进入登录页面; - 输入错误的用户名或密码,登录失败;
- 重新输入正确的用户名及密码,登录成功。
以上两个示例演示了用户注册及登录的过程,以及非法访问的流程。在本攻略中,我们通过使用Spring Boot和Spring Security实现了完整的用户注册及验证功能,将应用变得更加安全可靠。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot用户注册验证的实现全过程记录 - Python技术站