본문 바로가기
JAVA/자바 공부

자바 로그인 처리(session) 2024-06-23

by PlusUltraCode 2024. 6. 23.
 

@PostConstruct

@PostConstruct는 해당 빈이 초기화된 후 바로 실행되는 메서드에 사용하는 어노테이션입니다. 주로 초기화 작업을 수행하는 데 사용됩니다.

예제:

@Service
public class MyService {

    @PostConstruct
    public void init() {
        // 초기화 작업
        System.out.println("MyService가 초기화되었습니다.");
    }
}

@RestController와 HttpSession

@RestController는 RESTful 웹 서비스를 구현하는 컨트롤러임을 나타내는 어노테이션입니다. @RequestMapping을 사용하여 특정 URL 경로에 대한 요청을 매핑할 수 있습니다.

로그인 예제:

@RestController
@RequestMapping("/api/account")
public class AccountApiController {

    @PostMapping("/login")
    public void login(
        @RequestBody LoginRequest loginRequest,
        HttpSession httpSession
    ) {
        var id = loginRequest.getId();
        var pw = loginRequest.getPassword();

        var optionalUser = userRepository.findByName(id);

        if(optionalUser.isPresent()) {
            var userDto = optionalUser.get();

            if(userDto.getPassword().equals(pw)) {
                httpSession.setAttribute("USER", userDto);    // 세션에 사용자 정보 저장
            } else {
                throw new RuntimeException("Password Not found");
            }
        } else {
            throw new RuntimeException("User Not Found");
        }
    }
}

설명

  1. @PostConstruct
    • 빈이 초기화된 후 실행됩니다.
    • 주로 초기화 로직을 작성하는 데 사용됩니다.
  2. @RestController
    • RESTful 웹 서비스를 작성하기 위해 사용됩니다.
    • @RequestMapping으로 URL 경로를 매핑합니다.
  3. HttpSession
    • Spring에서 자동으로 세션을 관리합니다.
    • 로그인 과정에서 세션을 사용하여 사용자 정보를 저장합니다.

예제 코드 설명

  • 서비스 클래스 초기화
    • @Service로 서비스 클래스를 정의하고, @PostConstruct로 초기화 메서드를 작성합니다.
  • 로그인 컨트롤러
    • @RestController와 @RequestMapping으로 컨트롤러를 정의합니다.
    • @PostMapping으로 로그인 엔드포인트를 정의합니다.
    • HttpSession을 사용하여 로그인한 사용자의 정보를 세션에 저장합니다.
  •  
@RestController
@RequestMapping("/api/account")
public class AccountApiController {

    @PostMapping("/login")
    public void login(
        @RequestBody LoginRequest loginRequest,
        HttpSession httpSession
    ) {
        var id = loginRequest.getId();
        var pw = loginRequest.getPassword();

        var optionalUser = userRepository.findByName(id);

        if(optionalUser.isPresent()) {
            var userDto = optionalUser.get();

            if(userDto.getPassword().equals(pw)) {
                httpSession.setAttribute("USER", userDto);    // 세션에 사용자 정보 저장
            } else {
                throw new RuntimeException("Password Not found");
            }
        } else {
            throw new RuntimeException("User Not Found");
        }
    }
}

 

 

이렇게 구현된 로그인 기능은 사용자 인증 후 세션에 사용자 정보를 저장하여 이후 요청에서도 해당 정보를 활용할 수 있게 합니다.