SpringBoot - ToyProject / Temporage / Login, Session

2020. 2. 15. 22:59학부 프로젝트/Temporage

로그인 할 때 체크해야 하는 것

 

정확하게는 LoginController 로 request가 들어왔을 때 처리해야 하는 일이다. 
먼저 Session 에 Login 데이터가 들어있는지 확인한 후 있으면 remove 하고, 없다면 계속 진행한다.
그리고 로그인이 끝난 후, 로그인 Controller에서 Model 객체에 저장한 데이터를 postHandler에서 확인 한 후
Session을 추가할지 결정한다. 
로그인 세션은 Interceptor에서 관리한다. Controller에서는 관리하지 않는다. 

 

문제점

  1. 이유는 모르겠으나 Controller에서 Interceptor의 postHanler() 로 넘어갈때 Model에 저장한 값을 ModelAndView로 넘기지 않는다. 흐름 파악이 필요.

 

Session 에 무엇을 왜 저장해야 하는가

Temporage 에서는, boards, category 를 볼 수 있는 접근권한이 필요. 로그인을 하지 않았을 떄 볼 수 없어야함.
따라서 특정 권한이 필요한 페이지로 request가 오면 Interceptor를 활용해서 Session이 있는지 없는지 체크하는것.

 

문제점

 

  1. @EnableJdbcHttpSession 을 이용하여 jdbc와 HttpSession 간 연동은 성공하였지만, Session Table이 자동으로 생성이 되지 않는다. 어노테이션 위치를 원래는 Application.java 에서 @Configuration이 속한 class 로 옮겨 보았지만 동작하지 않았다.
  2. 아래의 세가지 방법을 모두 사용해 보았지만 (application.properties 에 추가) 동작하지 않았다. 현재 Spring  Boot 2.2.2 RELEASE 사용중이며 spring-session-jdbc는 2.2.0.RELEASE 사용중이다.
  3. 현재 수동으로 Table을 만들어 사용중. 저장 잘 됨.

 

spring.session.jdbc.initialize-schema=always
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-mysql.sql
spring.session.store-type=jdbc

 


 

 

어떻게 저장해야 하는가

 

HttpSession 객체. Session 별로 관리됨. HttpSession 객체는 JSESSIONID를 알아서 비교해서 객체를 관리.
브라우저가 다르면 (JSESSIONID 가 다르면) 다른 HttpSession 객체로 인식한다.

 

 

@EnableJdbcHttpSession 어노테이션이 HttpSession을 setAttribute() 를 사용해 초기화 시키면 자동으로 SPRING_SESSION 테이블에 INSERT, UPDATE 시킨다. 주기적으로 DELETE도 하는것 같은데 구체적인 주기는 아직 모르겠다. 초기에 SPRING_SESSION 테이블이 생성되지 않아 생기는 오류때문에 몇번 실행되는 로그는 보았는데, 1분도 안되는 주기였다.