체크박스 클릭 후 로그인 시 : on, 체크박스 클릭하지 않고 로그인 시 : null ( required = false 처리를 해줘야 함 ) 처리 후 체크된 상태로 로그인 성공 시 cookie 값을 발급하고 유저의 id 정보를 쿠키 값으로 저장시킨다
alter table membership add
session_id varchar2(100) default 'nan' not null;
테이블 추가
( 값이 존재하지 않는다면 nan 으로 저장된다 )
테이블 추가 완료
DB 에 추가된 컬럼을 관리할 sessionId 변수와 getter / setter 를 DTO 에 추가 >> 이후 Mapper.xml 에도 session_id 컬럼과 sessionId 변수를 mapping 시켜준다
사용자의 쿠키 값과 DB 에 저장된 값이 일치해야 자동 로그인을 처리할 것임
Service 인터페이스에 메소드 추가 >> ServiceImpl 에서는 id 값과 autoLogin 값을 HashMap 에 키와 값으로 저장하여 mapper 에 전달
Mapper 인터페이스에 메소드 추상화, Mapper.xml 에 해당 메소드에 매핑될 sql 문 작성
자동 로그인 체크 후 로그인 성공 시 DB 에 저장되는 것 확인
AutoLogin Interceptor 에서 loginCookie 값이 있는지 확인 후 해당 값이 있으면 DB 안에 설정되어 있는 session_id 의 값이 "on" 인지 체크한 뒤 session 의 LOGIN 키의 값을 id 로 생성해준다 >> servlet-context.xml 에 index 경로로 들어오기 전 실행될 AutoLogin 클래스 Interceptor 선언
servlet-context.xml 파일에서 모든 경로에서 autoLogin 으로 설정한 Interceptor 가 작동하게 설정
Controller 에서 logout 경로로 들어올 시 cookie 값을 만료시키고 DB 안에 on 으로 저장되어 있던 session_id 컬럼의 값을 nan 으로 변경시킨뒤 세션을 모두 삭제하고 login 페이지로 돌려보낸다
Interceptor : 컨트롤러로 가기 전에 무언가 처리할 내용 ( preHandle ) 이나, 컨트롤러 까지 로직 작동 후 클라이언트에게 도착하기 전에 처리할 내용 ( postHandle ) 을 담당 ( 불필요한 리소스를 차단 )
Interceptor 패키지, 클래스 파일 생성
메소드 오버라이딩
servlet-context.xml 파일에 MemberInterceptor 클래스를 /index 경로가 실행될때 사용할 Interceptor 로 설정 ( /index 경로로 접속할때 컨트롤러로 전달되기 전 오버라이딩 한 메소드인 preHandle 이 실행, 컨트롤러로 전달된 후 오버라이딩 한 메소드인 postHandle 이 실행된다 )
MemberInfo 를 로그인한 사용자만 확인할 수 있게 Interceptor 를 사용해서 설정할 것임 >> Controller 에서도 세션을 기준으로 redirect 로 처리할 수 있음 그러나 로직을 세션을 비교하는 부분마다 다 작성해줘야 하기 때문에 비효율적....
servlet-context.xml 에 Interceptor 로 미리 로직을 분류할 경로를 추가 >> session 값을 미리 Controller 에 도착하기 전에 Interceptor 에서 확인하여 Controller 로 이동시킬지 Controller 로 이동시키지 않고 redirect 로 login 페이지로 이동시킨다