springboot注册登录模块代码
时间: 2023-10-13 19:22:07 浏览: 43
由于注册登录模块的实现可能涵盖较多的代码,因此在此无法提供完整的代码。以下是基于Spring Boot实现注册登录模块的一些关键步骤和示例代码:
1. 创建用户实体类
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
// 省略构造方法、getter和setter
}
```
2. 创建用户仓库接口
```java
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
3. 创建用户服务接口及实现
```java
public interface UserService {
User register(User user);
User login(String username, String password);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User register(User user) {
// 对密码进行加密
String encodedPassword = new BCryptPasswordEncoder().encode(user.getPassword());
user.setPassword(encodedPassword);
return userRepository.save(user);
}
@Override
public User login(String username, String password) {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new RuntimeException("用户不存在");
}
if (!new BCryptPasswordEncoder().matches(password, user.getPassword())) {
throw new RuntimeException("密码不正确");
}
return user;
}
}
```
4. 创建控制器
```java
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody User user) {
userService.register(user);
return ResponseEntity.ok("注册成功");
}
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
User user = userService.login(request.getUsername(), request.getPassword());
// 生成token并返回
String token = Jwts.builder().setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 86400000))
.signWith(SignatureAlgorithm.HS512, "secret".getBytes()).compact();
return ResponseEntity.ok(new LoginResponse(token));
}
}
class LoginRequest {
private String username;
private String password;
// 省略getter和setter
}
class LoginResponse {
private String token;
// 省略getter和setter
}
```
需要注意的是,控制器中生成token时使用了JJWT库。在使用时需要在pom.xml文件中添加如下依赖:
```xml
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
```
其中的"secret"字符串是用于签名的密钥,应该更换为一个更安全的密钥。