뽀미의 개발노트

로그인 체크할때 loginedMemberId와 loginedMember 차이 - 해결 본문

Trouble_Shooting

로그인 체크할때 loginedMemberId와 loginedMember 차이 - 해결

산타는 뽀미 2023. 5. 16. 22:18

로그인 체크할 때 

rq에서 oginedMemberId 사용 안 하고 loginedMember 만 사용하고 싶어서

@Getter
private Member loginedMember;

private HttpServletRequest req;
private HttpServletResponse resp;
private HttpSession httpSession;
public Rq(HttpServletRequest req, 
        HttpServletResponse resp, HttpSession httpSession, 
        MemberService memberService) {
    this.req = req;
    this.resp = resp;
    this.httpSession = req.getSession();

    Member loginedMember = null;

    if(httpSession.getAttribute("loginedMember") != null) {
        loginedMember = (Member)httpSession.getAttribute("loginedMember");
    }

    this.loginedMember = loginedMember;

    this.req.setAttribute("rq", this);
}

public void login(Member member) {
    httpSession.setAttribute("loginedMember", member);
}

public void logout() {
    httpSession.removeAttribute("loginedMember");
}

Rq에 이렇게 설정한 다음

<c:if test="${rq.getLoginedMember() == null }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${rq.getLoginedMember() != null }">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>
<c:if test="${Util.empty(rq.getLoginedMember()) }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${Util.empty(rq.getLoginedMember()) == false}">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>
<c:if test="${rq.loginedMember == null }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${rq.loginedMember != null }">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>
<c:if test="${rq.getLoginedMember().equals(null) }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${rq.getLoginedMember().equals(null) == false}">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>

이렇게 다양한 방법으로 써봤는데 로그아웃은 한번도 안 나왔다...

그래서 어쩔수 없이 loginedMemberId 써서 rq 이렇게 바꿔주고 했더니

@Getter
private int loginedMemberId;
@Getter
private Member loginedMember;

private HttpServletRequest req;
private HttpServletResponse resp;
private HttpSession httpSession;
public Rq(HttpServletRequest req, 
        HttpServletResponse resp, HttpSession httpSession, 
        MemberService memberService) {
    this.req = req;
    this.resp = resp;
    this.httpSession = req.getSession();

    int loginedMemberId = 0;
    Member loginedMember = null;

    if(httpSession.getAttribute("loginedMemberId") != null) {
        loginedMemberId = (int)httpSession.getAttribute("loginedMemberId");
        loginedMember = (Member)httpSession.getAttribute("loginedMember");
    }

    this.loginedMemberId = loginedMemberId;
    this.loginedMember = loginedMember;

    this.req.setAttribute("rq", this);
}

public void login(Member member) {
    httpSession.setAttribute("loginedMemberId", member.getId());
}

public void logout() {
    httpSession.removeAttribute("loginedMemberId");
}
<c:if test="${rq.getLoginedMemberId() == 0 }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${rq.getLoginedMemberId() != 0 }">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>

로그인/ 로그아웃 체크 잘 됨!!! 왜일까? 계속 씨름하느니 일단 loginedMemberId 살려서 해두겠음....

 


다시 해보니까 됐음!! 그냥 interceptor랑 webmvcconfigurer 안 해줘서 안 됐던거였음...

그런데

<c:if test="${Util.empty(rq.getLoginedMember()) }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${Util.empty(rq.getLoginedMember()) == false}">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>

 

얘는 여전히 안됨. 아예 오류나서 화면이 안 나와버림

<c:if test="${rq.getLoginedMember().equals(null) }">
    <div><a href="../member/memberlogin">로그인</a></div>
    <div><a href="../member/memberjoin">회원가입</a></div>
</c:if>

<c:if test="${rq.getLoginedMember().equals(null) == false}">
    <div><a href="../member/doMemberLogout">로그아웃</a></div>
</c:if>

이것도 안 됨. 왜냐면 equals는 string을 비교할때 쓰는 거기 때문임.

일줄 알았는데.. 다시 검색해보니 equals는 string말고 object도 비교할 수 있다는데.. 그럼 저건 왜 안돼지?ㅠㅠ

일단 넘어가자~!!!