SpringBootとJWTを組み合わせて、ユーザー登録機能を実装する方法は何ですか?

ユーザー登録機能を実現するには、次の手順に従うことができます。

  1. ユーザーエンティティクラスを作成し、ユーザーの基本情報(ユーザー名、パスワード、メールアドレスなど)を含めてください。
@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;
    
    // 省略其他属性和方法
}
  1. ユーザー登録リクエストクラスを作成し、ユーザーが提出した登録情報を受け取るために使用します。
public class SignupRequest {
    private String username;
    private String password;
    private String email;
    
    // 省略getter和setter方法
}
  1. ユーザーサービスクラスを作成し、ユーザー登録のロジックを処理する。
@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);
    }
}
  1. ユーザーコントローラーを作成し、ユーザー登録リクエストの受け入れに使用する。
@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!");
    }
}
  1. 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メソッドが呼び出されます。

bannerAds