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