출처 : https://devkingdom.tistory.com/m/9
<Session 원리>
간단하게 설명을 해보자면,
① 서버에 연결하고 서비스를 요청한다. 편하게 로그인 서비스라고 생각하자.
② 로그인 기능을 수행하는 메서드가 있으면 메서드 바디에서 setAttribute() 메서드를 호출한다.
③ 그러고 나면 해당 속성값이 Session 안에다가 저장이 된다.
④ 그 후 결과를 응답해준다. 이러면 로그인이 완료된거다.
⑤ 로그인 하고 난 뒤에 유저 수정 화면에 들어간다고 생각해보자. 유저 수정 서비스를 호출한다.
⑥ 수정 기능을 수행하는 메서드가 있으면 메서드 바디에서 getAttribute() 메서드를 호출한다.
⑦ 그러고 나면 해당 속성 값이 반환된다.
⑧ 이 값을 클라이언트에게 응답해주면 유저의 정보가 화면에 보여진다.
어떤 페이지에서든 로그 아웃을 하기 전까지 이런 방식으로 정보를 유지한다고 보면 된다.
좀 더 자세하게 코드를 통해 보자.
1
2
3
4
5
6
7
8
9
|
public String login(User user, HttpServletRequest request) {
User user = service.userSearch(user);
HttpSession session = request.getSession();
session.setAttribute("user", user);
return "userLogin";
}
|
cs |
위의 코드는 로그인을 위한 메서드인데, 해당 코드가 잘 이해가 안된다면 Spring Framework에 대한 기초적인 부분을 공부할 필요가 있다. (시간이 된다면 추후에 기초적인 부분까지 올릴게용) 위와 같은 방법으로 세션에 값을 저장해주면된다.
자 그럼, 세션에 값을 저장했으니 써봐야지~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public ModelAndView userModify(User user, HttpServletRequest request) {
HttpSession session = request.getSession();
User befUser = (User) session.getAttribute("user");
User aftUser = service.userModify(user);
ModelAndView mav = new ModelAndView();
mav.addObject("befUser", befUser);
mav.addObject("aftUser", aftUser);
session.setAttribute("user", aftUser);
mav.setViewName("userModify");
return mav;
}
|
cs |
위의 코드는 "user" 라는 키값을 통해서 저장된 유저 정보를 찾고, 입력된 유저 객체로 값을 변경 한 뒤에 전 후의 유저 정보를 비교해주는 화면을 출력하는 코드이다. 뭐 이런식으로 사용하면 된다. 나중에 프로젝트할 때 응용해서 써보길 바란다.
아 그리고, 또 많이 쓰이는 걸 하나 빼먹을 뻔했다. 로그아웃 하거나 탈퇴할때는 저장된 세션을 삭제해버려야하지 않겠는가? 이때 쓰는게 invalidate() 메서드다. 코드를 한번 보자.
1
2
3
4
5
6
7
8
9
|
public String userRemove(@ModelAttribute("user") User user, HttpServletRequest request) {
service.userRemove(user);
HttpSession session = request.getSession();
session.invalidate();
return "userRemove";
}
|
위와 같이 하면 세션을 제거 할 수 있다.
'웹개발 > jsp' 카테고리의 다른 글
HttpSessionListener 이용 중복 로그인 방지 (0) | 2022.02.17 |
---|---|
스프링 세션 동작 원리 (0) | 2022.02.17 |
페이지 이동시키는 방법(forward, redirect 차이) (0) | 2022.02.17 |
JSP 페이지 이동 4가지 방법 및 특성 (0) | 2022.02.17 |
파일 업로드/다운로드구현 multipart (0) | 2022.02.17 |
댓글