springboot登录注册后端
时间: 2025-01-04 16:36:11 浏览: 5
### 使用 Spring Boot 实现登录和注册功能
#### 创建 Spring Boot 项目
为了构建支持登录和注册功能的应用程序,建议使用 Spring Initializr 来初始化项目结构[^2]。在创建过程中应选择 Web 和 Security 组件作为依赖。
#### 配置安全设置
为了让应用程序具备认证能力,在 `application.properties` 文件中添加如下配置:
```properties
spring.security.user.name=admin
spring.security.user.password=secret
```
这一步骤仅用于测试目的;生产环境中应当移除默认账户并采用更复杂的安全策略[^4]。
#### 设计实体模型
定义 User 类表示用户信息,并利用 JPA 注解映射数据库表字段:
```java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// Getters and Setters...
}
```
#### 构建控制器接口
编写 REST 控制器处理 HTTP 请求,提供 `/register` 及 `/login` 接口供客户端调用:
```java
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
UserService userService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterRequest request){
try{
userService.register(request.getUsername(),request.getPassword());
return new ResponseEntity<>(HttpStatus.CREATED);
}catch (Exception e){
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
}
}
@PostMapping("/login")
public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest request, HttpServletResponse response){
final UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(
request.getUsername(),
request.getPassword()
);
Authentication authentication = null;
try {
authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = jwtUtil.generateToken(authentication);
response.setHeader("Authorization", "Bearer "+token);
return ResponseEntity.ok(new LoginResponse(token));
} catch (BadCredentialsException ex) {
throw new BadCredentialsException("Invalid username or password");
}
}
}
```
上述代码片段展示了如何接收来自用户的输入参数并通过业务逻辑层完成相应操作[^3]。
#### 数据库交互服务
实现具体的业务逻辑,比如验证用户名唯一性、加密存储密码等:
```java
@Service
@Transactional(readOnly=true)
public class UserServiceImpl implements UserService {
@Autowired
UserRepository userRepository;
@Override
@Transactional
public void register(String username,String rawPassword)throws Exception{
if(userRepository.existsByUsername(username)){
throw new Exception("Username already exists.");
}
BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
User user=User.builder().
username(username).
password(encoder.encode(rawPassword)).
build();
userRepository.save(user);
}
}
```
此部分负责与持久化层打交道,确保数据的一致性和安全性[^1]。
阅读全文