회원과 게시판 — 읽기 자료
① 컨트롤러마다 if(session==null) 가 반복 ② 헤더에 「OO님 환영합니다」 표시하려면 아이디 말고 표시용 닉네임이 필요.
로그인 가드를 인터셉터로 자동화. 헤더는 공통 JSP 로 분리. Member 에 nick 추가.
-- 1) 스키마 마이그레이션 — 표시용 닉네임 추가
ALTER TABLE mymember ADD COLUMN nick VARCHAR(30) AFTER pwd;
// com.smhrd.domain.Member
@Data @AllArgsConstructor @NoArgsConstructor
public class Member {
private String id;
private String pwd;
private String nick; // ← 추가
}
// com.smhrd.interceptor.LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object h)
throws Exception {
HttpSession session = req.getSession();
if (session.getAttribute("loginUser") == null) {
resp.sendRedirect(req.getContextPath() + "/login");
return false; // 컨트롤러 호출 안 함
}
return true;
}
}
<!-- servlet-context.xml -->
<interceptors>
<interceptor>
<mapping path="/board/write"/>
<mapping path="/mypage/**"/>
<beans:bean class="com.smhrd.interceptor.LoginInterceptor"/>
</interceptor>
</interceptors>
<!-- header.jsp (공통) -->
<c:choose>
<c:when test="${not empty sessionScope.loginUser}">
${sessionScope.loginUser.nick}님 |
<a href="/logout">로그아웃</a>
</c:when>
<c:otherwise>
<a href="/login">로그인</a>
</c:otherwise>
</c:choose>
<!-- board/list.jsp -->
<%@ include file="/WEB-INF/views/header.jsp" %>
... 본문 ...
v3 에서 컨트롤러마다 if(session==null) 체크가 반복됨. 헤더에 로그인 상태도 표시 안 됨.
컨트롤러에서 if(session) 코드가 사라지고, 헤더가 통일된다. v4.