jwt필터 등록
jwt토큰 생성 및 검증로직등록
Jwt 생성 및 검증 util 생성

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