이번에 sso관련 보안처리에 대해서 수정하다가 파라미터 방식에서 세션으로 값을 저장 해줘야 되는일이 있었습니다.
하지만 session.getId 해보니 sso를 하면서 세션아이디가 변경되는 일이 발생했고 결과적으로 서로 다른세션으로 공유가 안되어서 고민하다가 해결은 다른방법으로 진행했습니다.
그와중에 세션에 대한 내용을 정리할겸 포스팅 해보겠습니다.
세션생성
request.getSession() 매서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 새로운 세션을 생성해서 반환합니다.session처럼 인수 default가 true 입니다.
만약 session2 처럼 인수에 false를 전달한다면, 이미 생성된 세션이 있는경우 그세션을 반환하고 없는 경우 null를 반환하게 됩니다.
새롭게 생성된 세션여부는 isNew() 매서드를 통해서 알 수 있습니다.
@GetMapping("/hello/session")
public String Javasession(Model model, HttpServletRequest request) {
// 세션생성
HttpSession session = request.getSession();
HttpSession session1 = request.getSession(true);
HttpSession session2 = request.getSession(false);
// 새로운세션 생성여부
boolean sNew = session.isNew();
return null;
}
세션 유지시간 설정
기본적으로 세션 유지시간은 30분 입니다.
세션에 유지시간은 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간을 말합니다.
30분이상 서버에 전혀 반응을 보이지 않게 된다면 세션이 자동으로 끊어지게 됩니다.
세션 유지시간 같은경우 프로젝트 내 web.xml 파일에서 설정할 수 있습니다.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
또는 개별적으로 설정할 경우에는 session.setMaxInactiveInterval(시간인수)을 통해서 설정할 수 있습니다.
또는 무한대로 설정을 원한다면 시간인수로 -1을 설정해 주시면 됩니다.
@GetMapping("/hello/session")
public String Javasession(Model model, HttpServletRequest request) {
// 세션생성
HttpSession session = request.getSession();
HttpSession session1 = request.getSession(true);
HttpSession session2 = request.getSession(false);
// 새로운세션 생성여부
boolean sNew = session.isNew();
// 세션 유지시간 설정(초단위로)
// 60*60 = 1시간
int sTime = 60*60;
session.setMaxInactiveInterval(sTime);
// 무한대설정
session.setMaxInactiveInterval(-1);
return null;
}
세션 Id값 가져오기
session.getId()를 통해서 세션에 고유의 Id값을 가져올 수 있습니다.
Id값이 다를경우 다른세션으로 생각하시면 됩니다. 세션을 확인하는경우 id값으로 판별하셔도 됩니다.
@GetMapping("/hello/session")
public String Javasession(Model model, HttpServletRequest request) {
// 세션생성
HttpSession session = request.getSession();
HttpSession session1 = request.getSession(true);
HttpSession session2 = request.getSession(false);
// 새로운세션 생성여부
boolean sNew = session.isNew();
// 세션 유지시간 설정(초단위로)
// 60*60 = 1시간
int sTime = 60*60;
session.setMaxInactiveInterval(sTime);
// 무한대설정
session.setMaxInactiveInterval(-1);
// 세션Id 값 가져오기
String sId = session.getId();
return null;
}
세션값 저장하고 가져오기
세션에 값을 저장하는경우 setAttribute(key, value)를 이용해서 저장하게 됩니다.
key, value 쌍으로 저장하는 매소드 입니다.
세션이 유지되는 동안 저장 됩니다.
세션에서 값을 가져오는경우 session.getAttribute(value) 매소드를 이용해서 가져올 수 있습니다.
리턴타입은 Object 이므로 형변환이 필요 합니다.
@GetMapping("/hello/session")
public String Javasession(Model model, HttpServletRequest request) {
// 세션생성
HttpSession session = request.getSession();
HttpSession session1 = request.getSession(true);
HttpSession session2 = request.getSession(false);
// 새로운세션 생성여부
boolean sNew = session.isNew();
// 세션 유지시간 설정(초단위로)
// 60*60 = 1시간
int sTime = 60*60;
session.setMaxInactiveInterval(sTime);
// 무한대설정
session.setMaxInactiveInterval(-1);
// 세션Id 값 가져오기
String sId = session.getId();
String hello = "Hello session!!";
// 세션에 값 저장하기
session.setAttribute("session_hello", hello);
// 세션에서 값 가져오기
String word = (String) session.getAttribute("session_hello");
return null;
}
세션에서 값 삭제하기
세션에서 일부 값을 삭제하기 위해서는 session.removeAttribute(value)를 통해서 삭제할 수 있습니다.
모든세션정보를 삭제하는 경우에는 session.invalidate(); 를 통해서 삭제할 수 있습니다.
invalidate(); 매소드의 경우 로그아웃로직에서 많이 사용 됩니다.
@GetMapping("/hello/session")
public String Javasession(Model model, HttpServletRequest request) {
// 세션생성
HttpSession session = request.getSession();
HttpSession session1 = request.getSession(true);
HttpSession session2 = request.getSession(false);
// 새로운세션 생성여부
boolean sNew = session.isNew();
// 세션 유지시간 설정(초단위로)
// 60*60 = 1시간
int sTime = 60*60;
session.setMaxInactiveInterval(sTime);
// 무한대설정
session.setMaxInactiveInterval(-1);
// 세션Id 값 가져오기
String sId = session.getId();
String hello = "Hello session!!";
// 세션에 값 저장하기
session.setAttribute("session_hello", hello);
// 세션에서 값 가져오기
String word = (String) session.getAttribute("session_hello");
// 세션에서 일부 값 삭제하기
session.removeAttribute("session_hello");
// 모든세션 정보 삭제하기
session.invalidate();
return null;
}
'프로그래밍 > 자바(Java)' 카테고리의 다른 글
[Java]자바 형변환(명시적 형변환, 암시적 형변환)이란? (0) | 2023.03.11 |
---|---|
[Java] 문자열 자르기 split() 사용방법 (0) | 2022.07.26 |
[Java] 자바 년월일 더하고 빼는 방법 (0) | 2022.02.17 |
[Java] 자바 static 정적 변수와 메소드 (0) | 2021.06.09 |
[Java] 자바 ArrayList 추가 및 삭제 (0) | 2021.05.25 |
댓글