Spring_로그인 상태 관리 및 세션 처리

jjyu_my·2024년 10월 20일

Spring

목록 보기
7/10
post-thumbnail

Spring과 JavaScript를 활용한 상태 관리 및 세션 접근


📌 AJAX 요청과 상태 코드 처리

  • 자바스크립트의 AJAX를 사용하여 스프링 컨트롤러의 주소로 요청을 보냅니다
  • 이 요청의 응답 상태 코드가 200이 아닐 경우, 에러로 간주하고 예외 처리(캐치문)를 통해 적절한 경로로 이동합니다
  • 즉!! 스프링에서는 기본적으로 요청의 상태 코드를 200으로 설정하여 정상적으로 들어오도록설정합니다
  • 또한, 스프링에서는 기본적으로 200 OK 상태를 반환하지만, 서버에서 명시적으로 상태 코드를 설정할 수도 있습니다
  • 예를 들어, 특정 예외가 발생하면 400 Bad Request나 500 Internal Server Error 상태 코드를 반환할 수 있습니다
@PostMapping("/check")
public ResponseEntity<String> checkSomething() {
    try {
        // Some business logic
        return ResponseEntity.ok("Success");
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error");
    }
}

📌 아이디 중복 검사

  • 아이디 중복 검사는 단일 행(single row)으로 처리됩니다
  • 즉!! 요청에 대한 응답은 하나의 결과만 반환합니다
  • 보통 데이터베이스에서 중복 아이디 검사는 단일 결과를 반환합니다
  • 요청에 대한 응답은 true 또는 false로 간단하게 처리될 수 있습니다
@GetMapping("/check-username")
public boolean checkUsername(@RequestParam String username) {
    return userService.isUsernameAvailable(username);
}

📌 Thymeleaf와 세션 접근

  • Thymeleaf는 세션에 직접 접근할 수 있는 기능을 제공합니다
  • 뷰(view)에서 세션 객체에 접근할 때, 반드시 컨트롤러를 거칠 필요가 없습니다
  • 즉!! Thymeleaf 템플릿 안에서 직접 세션 데이터를 사용할 수 있습니다
  • Thymeleaf는 #session 객체를 사용하여 세션 데이터를 참조할 수 있습니다
  • 세션 데이터에 직접 접근하고 사용할 수 있어 매우 편리합니다
<p th:text="${#session.getAttribute('username')}"></p>

📌 로그아웃 및 접근 제어

  • 로그아웃 기능을 구현할 때, 조건문을 사용하여 로그인 상태에 따라 접근을 제어할수 있습니다
  • Thymeleaf의 th:unless를 사용하여 로그인한 경우에만 특정 요소를 표시할수있습니다
  • 세션이 존재하지 않는 경우(로그아웃 상태)에는 해당 뷰에 접근할 수 없도록 처리합니다
  • 로그인 상태에 따라 표시되는 요소를 조정할 때, th:if와 th:unless를 사용하여 세션의 존재 여부에 따라 다른 콘텐츠를 표시할 수 있습니다
<div th:if="${#session.getAttribute('user') != null}">
    <p>Welcome, <span th:text="${#session.getAttribute('user')}">User</span></p>
</div>
<div th:unless="${#session.getAttribute('user') != null}">
    <a href="/login">Login</a>
</div>

📌세션 어트리뷰트 사용

  • 세션 어트리뷰트(Session Attribute)를 통해 필요한 데이터를 자동으로 관리합니다

🔎 세션값 접근 방법

  • getAttribute():
    특정 키를 사용하여 세션에서 값을가져온다
  • setAttribute():
    세션에 값을 저장할 때 사용
  • removeAttribute():
    세션에서 특정 키의 값을 제거
  • 세션에 데이터를 저장하거나 조회할 때는 아래와 같이 HttpSession 객체의 메서드를 사용합니다
HttpSession session = request.getSession();
session.setAttribute("user", user);  // 세션에 데이터 저장
session.getAttribute("user");        // 세션에서 데이터 가져오기
session.removeAttribute("user");     // 세션 데이터 제거

profile

0개의 댓글