SpringBootとJWTを組み合わせて、ユーザー登録機能を実装する方法は何ですか?
ユーザー登録機能を実現するには、次の手順に従うことができます。
- ユーザーエンティティクラスを作成し、ユーザーの基本情報(ユーザー名、パスワード、メールアドレスなど)を含めてください。
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String username;
private String password;
@Column(unique = true)
private String email;
// 省略其他属性和方法
}
- ユーザー登録リクエストクラスを作成し、ユーザーが提出した登録情報を受け取るために使用します。
public class SignupRequest {
private String username;
private String password;
private String email;
// 省略getter和setter方法
}
- ユーザーサービスクラスを作成し、ユーザー登録のロジックを処理する。
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void registerUser(SignupRequest signupRequest) {
// 创建新用户
User user = new User();
user.setUsername(signupRequest.getUsername());
user.setPassword(signupRequest.getPassword());
user.setEmail(signupRequest.getEmail());
// 保存用户到数据库
userRepository.save(user);
}
}
- ユーザーコントローラーを作成し、ユーザー登録リクエストの受け入れに使用する。
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/signup")
public ResponseEntity<String> signup(@RequestBody SignupRequest signupRequest) {
userService.registerUser(signupRequest);
return ResponseEntity.ok("User registered successfully!");
}
}
- JWT認証と権限制御を設定し、登録インターフェースにアクセスできるのは認証が成功したユーザーだけです。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtRequestFilter jwtRequestFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/signup").permitAll()
.anyRequest().authenticated()
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
}
このように、ユーザーが/api/auth/signupエンドポイントにPOSTリクエストを送信すると、AuthControllerのsignupメソッドが呼び出され、ユーザー登録リクエストを処理します。このメソッドでは、実際の登録ロジックを完了するために、UserServiceのregisterUserメソッドが呼び出されます。