728x90
반응형
컨트롤러와 관계 없이 jpa의 entity @PrePersist, @PreUpdate에서 바로 세션 정보를 꺼내고 싶었다.
그러나 지식이 짧은 관계로 방법을 몰랐는데 찾아서 간단히 기록을 남긴다.
1. 로그인 세션 기록
1
2
3
4
5
6
7
8
9
10
11
|
@PostMapping(value = "/login")
public RestResponse<Member> loginProcess(@RequestBody LoginReqDTO reqDTO, HttpServletRequest request) throws Exception {
// 로그인 계정의 정보 조회
Member memberinfo = serviceClass.checkLogin(reqDTO);
if (memberinfo != null && memberinfo.getMemSeq() != null && memberinfo.getMemSeq() > 0) {
// 세션에 로그인 계정정보 기록
request.getSession().setAttribute("memberinfo", memberinfo);
}
return new RestResponse<>(memberinfo);
}
|
cs |
8번 라인의 "memberinfo"으로 세션에 로그인 계정정보 기록!
2. 세션 정보를 얻기 위한 유틸
1
2
3
4
5
6
|
public class SessionUtil {
public static HttpSession getSession() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession();
}
}
|
cs |
3. entity의 @PrePersist, @PreUpdate에서 세션에 기록된 접속자의 정보 습득
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@PrePersist
public void prePersist() {
this.crtDt = new Date();
this.updDt = this.crtDt;
// created/updated by 업데이트
Member user = (Member) SessionUtil.getSession().getAttribute("memberinfo");
if (user != null) {
this.crtBy = user.getMemSeq();
this.updBy = this.crtBy;
} else {
this.crtBy = 0;
this.updBy = 0;
}
}
@PreUpdate
public void preUpdate() {
this.updDt = new Date();
// updated by 업데이트
Member user = (Member) SessionUtil.getSession().getAttribute("memberinfo");
if (user != null) {
this.updBy = user.getMemSeq();
} else {
this.updBy = 0;
}
}
|
cs |
7, 23번 라인에서 1번 코드에서 작성한 "memberinfo"를 이용해서 정보 로그인 계정 정보를 얻기
해당 방법을 이용하면 원하는 어떤 곳에서도 세션 정보를 얻을 수 있다.
728x90
반응형