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
반응형

+ Recent posts