★ PART · BOARD

깔끔한 로그인

Spring 기초
SMHRD

학습 목표

1. 문제

v3 에서 컨트롤러마다 if(session==null) 체크가 반복됨. 그리고 「OO님 환영합니다」 표시하려면 표시용 닉네임이 필요.

2. 새 도구

HandlerInterceptor + JSP include + nick 컬럼: 로그인 가드를 인터셉터로 자동화. 헤더는 공통 JSP 로 분리. Member 에 표시용 nick 추가.

3. 코드

-- 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" %> ... 본문 ...

4. 정리

5. Before / After

전 차시

v3 에서 컨트롤러마다 if(session==null) 체크가 반복됨. 헤더에 로그인 상태도 표시 안 됨.

이번 차시

컨트롤러에서 if(session) 코드가 사라지고, 헤더가 통일된다. v4.

학습 확인 체크리스트