SpringSecurity Session login/logout : POSTMAN으로 테스트하는 방법

young·2024년 12월 9일
0

Spring Security

목록 보기
7/7
post-thumbnail

Postman을 사용하여 Spring Security에서 구현한 세션 기반 로그인 및 로그아웃 기능을 테스트

로그인 테스트

요청 구성

  • URL: http://localhost:{port}/login
    (기본적으로 Spring Security는 /login 엔드포인트를 처리합니다.)
  • Method: POST
  • Headers:Content-Type: application/x-www-form-urlencoded (기본 로그인 폼 방식)
  • Body:
    : x-www-form-urlencoded 옵션으로 아래 값 추가:
    : username: 사용자의 이메일 또는 아이디 (Spring Security 설정에 따라)
    :password: 사용자의 비밀번호

로그인 요청 예시

POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080

응답 결과

  • 성공 시
HTTP 상태 코드: 200 OK
Response Body: 없음 (Spring Security 기본 설정)
Response Headers:
Set-Cookie: JSESSIONID=<세션ID> (Postman에서 자동으로 쿠키를 저장)
  • 실패 시
HTTP 상태 코드: 401 Unauthorized
Response Body: 로그인 실패 메시지

로그아웃 테스트

요청 구성

  • URL: http://localhost:{port}/logout
  • Method: POST
  • Headers:
  • Cookie: JSESSIONID=<로그인 성공 시 받은 세션 ID>
    Postman에서 자동으로 쿠키를 저장했을 경우, 이를 포함해 요청이 이루어짐.

로그아웃 요청 예시

POST /logout HTTP/1.1
Host: localhost:8080
Cookie: JSESSIONID=<로그인 성공  받은 세션 ID>

응답 결과

  • 성공 시
HTTP 상태 코드: 302 Found (기본 설정에 따라 리다이렉션)
Redirect Location: /login (기본 로그아웃 성공 후 리다이렉트 경로)
  • 실패 시
HTTP 상태 코드: 403 Forbidden (로그아웃 시 인증 정보가 없는 경우)

Login 요청 시, header

GET /login HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=D389FD339E34A9DA00174898FF5930C6
Host: localhost:8080
... 
  • Cookie에 JSESSIONID가 포함되어 로그인을 요청하는 것을 볼 수 있다.

Login 응답 시, header

HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/html;charset=UTF-8
Content-Length: 1408
Date: Mon, 09 Dec 2024 15:46:29 GMT
Keep-Alive: timeout=60
Connection: keep-alive
  • http 200인 성공 코드가 반환된 걸 확인할 수 있다.

Logout 요청 헤더

GET /logout HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=F39DF6E54346B57C53EE911B292480FA
Host: localhost:8080
... 
  • JSESSIONID 값과 함께 로그아웃을 요청한 것을 확인할 수 있다.

Login 응답 헤더

HTTP/1.1 302
Set-Cookie: JSESSIONID=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Path=/
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Location: http://localhost:8080/home
Content-Length: 0
Date: Mon, 09 Dec 2024 15:46:29 GMT
Keep-Alive: timeout=60
Connection: keep-alive
  • 로그아웃과 동시에, JSESSIONID가 만료되고, 리다이렉트를 표현하는 302코드를 반환한 것을 확인할 수 있다.
  • SecurityConfig에서 logout.redirectUrl을 지정해둔 url로 리다이렉트되었다.

결론

  1. 로그아웃이 성공적으로 처리되어, 세션이 종료되었다.
  2. JSESSIONID 쿠키가 삭제되었기 때문에, 이후 인증이 필요한 페이지에 접근할 때 로그인 없이 접근할 수 없게 된다.

참고
https://hokyun1.tistory.com/46

profile
ฅʕ•̫͡•ʔฅ

0개의 댓글