springboot实现登录注册
时间: 2023-09-04 13:15:51 浏览: 43
实现登录注册功能的步骤如下:
1.创建数据库表
首先要创建一个用户表,包括用户名、密码等字段。可以使用如下的 SQL 语句创建一个用户表:
```
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
2.添加依赖
在 pom.xml 文件中添加如下依赖:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
```
3.配置数据源
在 application.properties 文件中配置数据源:
```
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=password
```
4.实现用户实体类
创建一个 User 实体类,包含用户名、密码等属性,并为其添加 JPA 注解:
```java
@Entity
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// getter 和 setter 方法省略
}
```
5.实现用户 DAO 接口
创建一个 UserRepository 接口,继承 JpaRepository 接口,并添加一个根据用户名查找用户的方法:
```java
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
6.实现登录功能
创建一个 LoginController 类,实现登录功能:
```java
@Controller
public class LoginController {
@Autowired
private UserRepository userRepository;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(@RequestParam String username, @RequestParam String password, HttpSession session) {
User user = userRepository.findByUsername(username);
if (user != null && user.getPassword().equals(password)) {
session.setAttribute("user", user);
return "redirect:/";
} else {
return "login";
}
}
}
```
7.实现注册功能
创建一个 RegisterController 类,实现注册功能:
```java
@Controller
public class RegisterController {
@Autowired
private UserRepository userRepository;
@GetMapping("/register")
public String register() {
return "register";
}
@PostMapping("/register")
public String doRegister(@RequestParam String username, @RequestParam String password) {
User user = userRepository.findByUsername(username);
if (user == null) {
user = new User();
user.setUsername(username);
user.setPassword(password);
userRepository.save(user);
return "redirect:/login";
} else {
return "register";
}
}
}
```
8.添加安全配置
在 SecurityConfig 类中添加安全配置,包括登录页面、登录处理 URL、登出 URL 等:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/register").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/")
.and()
.logout().logoutUrl("/logout").logoutSuccessUrl("/");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
@Bean
public UserDetailsService userDetailsService() {
return new UserDetailsService() {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("用户不存在");
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());
}
};
}
}
```
以上是基于 Spring Boot 和 Spring Security 实现登录注册功能的步骤。