From 3c4397f4307d2e3bc17e55121b5f297174a4e25c Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 8 May 2025 15:51:59 +0900 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99controller=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C=E5=92=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/jp/app/controller/UserController.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/main/java/co/jp/app/controller/UserController.java diff --git a/src/main/java/co/jp/app/controller/UserController.java b/src/main/java/co/jp/app/controller/UserController.java new file mode 100644 index 0000000..1d8ed10 --- /dev/null +++ b/src/main/java/co/jp/app/controller/UserController.java @@ -0,0 +1,81 @@ +package co.jp.app.controller; + +import co.jp.app.common.ApiResponse; +import co.jp.app.dto.LoginDto; +import co.jp.app.dto.RegistrationDto; +import co.jp.app.service.JwtService; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.bind.annotation.*; + +import co.jp.app.entity.ErrorEntity; +import co.jp.app.entity.UserEntity; +import co.jp.app.service.ErraService; +import co.jp.app.service.UserService; + +import java.util.HashMap; +import java.util.Map; + + +@CrossOrigin("http://192.168.1.50:5173") +@RestController +@RequestMapping("/api/user") +public class UserController { + + private final UserService userService; + private final AuthenticationManager authenticationManager; + private final JwtService jwtService; + + @Autowired + public UserController(UserService userService, AuthenticationManager authenticationManager, JwtService jwtService) { + this.userService = userService; + this.authenticationManager = authenticationManager; + this.jwtService = jwtService; + } + + @PostMapping("/register") + public ResponseEntity registerUser(@Valid @RequestBody RegistrationDto registrationDto) { + try { + + UserEntity registeredUser = userService.registerNewUser(registrationDto); + + return ResponseEntity.status(HttpStatus.CREATED).body(ApiResponse.success(registeredUser.getEmail())); + } catch (Exception e) { + + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ApiResponse.fail("ユーザー登録失敗しました。")); + } + } + + @PostMapping("/login") + public ResponseEntity authenticateUser(@Valid @RequestBody LoginDto loginDto) { + try { + Authentication authentication = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(loginDto.getEmail(), loginDto.getPassword()) + ); + SecurityContextHolder.getContext().setAuthentication(authentication); + UserDetails userDetails = (UserDetails) authentication.getPrincipal(); + + String jwtToken = jwtService.generateToken(userDetails); // 生成单一的Token + + Map tokenResponse = new HashMap<>(); + tokenResponse.put("token", jwtToken); + + return ResponseEntity.ok(ApiResponse.success(tokenResponse)); + + } catch (BadCredentialsException e) { + + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ApiResponse.fail("メールアドレスまたはパスワードが間違っています。")); + } catch (Exception e) { + + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ApiResponse.fail("サーバーエラー。")); + } + } +}