로그인에 성공을 했어도 변화가 없는 이유는 로그인햇을때 어떤 증거를 남기지 않았으며,
UI적인 처리를 하지 않았기 때문입니다.
로그인이라는 기능 자체는 권한을 다르게주겠다는 것입니다.
회원과 비회원이라는 두가지 권한의 분리.
다시말해 회원이 할수있는일과 비회원이 할수있는 일을 구분해야합니다
- 회원 : 게시판 목록조회, 상세조회 , 자기글 수정 삭제 , 글쓰기 가능
- 비회원 : 목록조회 , 상세조회
이와같이 권한을 구분을 하려면 로그인한 사람에게 시스템적인 어떠한 증표를 줘야합니다.
Http프로토콜 자체가 한번 응답이 끝나 버리면 데이터를 아무것도 유지하지 않습니다
ConnectionlessProtocol
http라는 프로토콜이 응답을 끝내면 데이터를 유지하지않고 다 날려버리는 프로토콜 이기 때문에
◎웹서비스는HTTP 프로토콜을기반으로하는데, 요청에대한응답 후관계를끊는다. ▶ 데이터 유지를 하지 않는다는것, 로그인을 했는데 로그인에 대한 정보가 남아있지 않다는것
◎즉, 인증되지않은사용자는모든페이지에서인증 과정을거쳐야한다 ▶ 세션이나 쿠키처리를 하지 않는다면 매 페이지마다 재 로그인을 해줘야한다는 불편함이 있으므로 처음 로그인했을당 시에 인증에대한 증표를 서버안에 남겨놓거나(세션) 서버에서 증표를 로컬에 보낸다던가(쿠키)
◎ 이런 불편함 때문에 지속적인 인증 수단으로 세션 과 쿠키를 사용한다 |
Connectless protocal 이라고해서 연결이 끝나면 즉, 요청 응답이 1회가 끝나면
연결을 끊어버리는 특징이 있기 때문에 연결이 끊어져도 서버 내부에서 어떠한 데이터를 관리한다고 한다면
유지를시키기위한 데이터를 서버에 남겨 놓는다면 그 데이터를 계속 불러오면서 데이터를 확인하면서 데이터를 유지시킬 수 있다는것 입니다.
그 방법으로는 크게 두가지방법이 있습니다.
쿠키와 세션 입니다.
쿠키와 세션
- 쿠키
서버에서 생성해 주되 로컬저장소(컴퓨터-하드디스크/모바일-내부저장소)에 저장해두고 지속적으로 확인을 하면서
쿠키에 어떠한 데이터가 있으면 이 사람이 로그인을 했다 라는걸 알아내 줍니다. - 세션
브라우저가 실행될 때 함께 서버내부에 세션객체가 생성이되면서, 특정 session ID를 부여받게되고
브라우저가 종료되기 전까지나, 회선의 유효시간이 만료되기 전까지 세션데이터를 프로토컬 연결이 끊겨도
계속 유지하면서 페이지간 사용할수 있는것이 세션입니다.
스프링 세션
요청 : updatePage()
회원인증 False - redirect:/로그인;
회원인증 True - return "session/updataPage";
회원정보 수정 요청이 왔다면 로그인이 안된사람에게 회원정보를 수정하게 만들면 안되겠죠? 관리자도 아닌데,,
회원인지 인증을 해보고 인증이 되었다면 회원정보 수정페이지로 이동시켜 주고, 만약 로그인이 안되있다면 로그인을 하도록 로그인 페이지로 유도합니다.
이러한 확인을 위해 Session이나 쿠키를 사용하는데, 로그인데이터는 세션으로 처리하나 쿠키는 로컬저장소에 저장되므로 보안에 취약하므로 보통 세션으로 처리합니다.
하지만 자동로그인 오토로그인을 구현할때는 쿠키를 사용해야 합니다.
세션의 단점은 서버당 하나만 유지할 수있고 브라우저가 종료되면 세션데이터가 날아가기 때문에 다시 브라우저를 실행 시켰을때, 로그인을 유지시키기 위해서는 쿠키를 사용해야 합니다.
스프링에서 세션을 사용하는 방법
1. HttpServletRequest를 사용
request.getSession()
2. HttpSession을 사용
session.setAttribute / getAttribute
세션객체는 요청이 실행될때 브라우저 내부에있는 세션객체를 요청정보에 담아서, request객체에 담아서 들어오기 때문에
매개변수를 request객체만 사용할수있으면 request.getSession()으로 세션을 꺼내오는것이고,
세션매개변수를 활용할수 있다면 바로 세션객체인 session.으로 사용할 수 있습니다.
request객체에서 세션을 꺼낸 후 사용하거나, 세션을 바로 받아서 사용하거나
세션의 주요기능
getId() ▶ 세션의 고유아이디 값을 반환 - 고유아이디는 자동로그인에서 고유아이디를 활용함
setAttribute/getAttribute() ▶ session객체에 데이터를 저장 하고 확인할수 있음
removeAttribute() ▶ 특정 세션의 데이터를 삭제, 특정 키이름을가진 객체를 삭제
setMaxInactiveInterval() ▶ 세션의 유효시간을 재설정 - 기본유효시간은 톰캣에서는 30분으로 지정되이씀 톰켓의 xml코드로 변환시킬수있으며 자바코드로 변환할때 이 메서드를 사용합니다. 초단위
getMaxInactiveInterval() ▶ 세션의 유효시간을 확인
invalidate ▶ 세션객체를 통째로 무효화하여 전체적으로 삭제시킴 - 로그아웃처리에 활용
세션을 통한 로그인 인증 진행 방식
서버에 연결해서 로그인요청이 들어갔을때 로그인을 성공하는 시점에서 세션에 회원데이터를 저장해놓고
세션에 데이터가 있다면 로그인 한 사람이다 라는것을 판별
세션에 데이터가 저장되있지 않다면 로그인을 하지 않았다는 것을 판별
'SpringFramework > BASIC' 카테고리의 다른 글
[session] 로그인,비로그인,회원,비회원 에 따른 UI 차이 (0) | 2020.09.09 |
---|---|
미완성 [RestAPI] REST컨트롤러에서 뷰리졸버나 redirect하는방법 (0) | 2020.09.09 |
[ BCrypt ] Spring-security 비밀번호 암호화, 복호화 로직 활용 (0) | 2020.09.09 |
[ SHA-256 해시코드 ] 비밀번호 암호화 로직 (0) | 2020.09.09 |
[ MD5 해시코드 ] 비밀번호 암호화 로직 활용 (0) | 2020.09.09 |