4. 상품 (생성)

강재영's avatar
Dec 18, 2024
4. 상품 (생성)
 

jwt필터 등록

jwt토큰 생성 및 검증로직등록

Jwt 생성 및 검증 util 생성
notion image
 
package shop.mtcoding.todayhome.core.util; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import shop.mtcoding.todayhome.user.User; import java.util.Date; public class JwtUtil { public static String create(User user){ String accessToken = JWT.create() .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7)) .withClaim("id",user.getId()) .withClaim("username", user.getUsername()) .sign(Algorithm.HMAC512("meta")); return accessToken; } public static User verify(String jwt){ jwt = jwt.replace("Bearer ", "").trim(); DecodedJWT decodedJWT = JWT.require(Algorithm.HMAC512("meta")).build().verify(jwt); int id = decodedJWT.getClaim("id").asInt(); String username = decodedJWT.getClaim("username").asString(); System.out.println("id: " + id); System.out.println("username: " + username); return User.builder() .id(id) .username(username) .build(); } }

로그인 요청과 응답 과정

 

Requset

{ "username":"ssar", "password":"1234" }

controller

@PostMapping("login") public ResponseEntity<?> login(@RequestBody UserRequest.LoginDTO loginDTO){ UserResponse.LoginDTO responseDTO = userService.로그인(loginDTO); return ResponseEntity.ok() .header("Authorization","Bearer " + responseDTO.accessToken()) .body(Resp.ok(responseDTO)); }
 

Service

public UserResponse.LoginDTO 로그인(UserRequest.LoginDTO loginDTO) { User userPS = userRepository.findByUsernameAndPassword(loginDTO.getUsername(), loginDTO.getPassword()) .orElseThrow(() -> new ExceptionApi401("아이뒤 또는 이메일이 틀렸습니다.")); String accessToken = JwtUtil.create(userPS); return new UserResponse.LoginDTO(accessToken, userPS); }

repository

public interface UserRepository extends JpaRepository<User, Integer> { @Query("select u from User u where u.username=:username and u.password=:password") Optional<User> findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
 
 

로그인 요청과 응답 과정

 

Requset

{ "username":"ssar", "password":"1234" }

controller

@PostMapping("login") public ResponseEntity<?> login(@RequestBody UserRequest.LoginDTO loginDTO){ UserResponse.LoginDTO responseDTO = userService.로그인(loginDTO); return ResponseEntity.ok() .header("Authorization","Bearer " + responseDTO.accessToken()) .body(Resp.ok(responseDTO)); }
 

Service

public UserResponse.LoginDTO 로그인(UserRequest.LoginDTO loginDTO) { User userPS = userRepository.findByUsernameAndPassword(loginDTO.getUsername(), loginDTO.getPassword()) .orElseThrow(() -> new ExceptionApi401("아이뒤 또는 이메일이 틀렸습니다.")); String accessToken = JwtUtil.create(userPS); return new UserResponse.LoginDTO(accessToken, userPS); }

repository

public interface UserRepository extends JpaRepository<User, Integer> { @Query("select u from User u where u.username=:username and u.password=:password") Optional<User> findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
 
 
Share article

강재영 블로그