interceptor
package com.demo.interceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import com.demo.domain.LoginUser;
import com.demo.service.MenuService;
public class MenuInterceptor implements HandlerInterceptor{
//@AutoWired 는 필드 주입방법임
private MenuService menuService;
@Resource(name = "sessionUser")
private LoginUser sessionUser;
// 좀 더 권장하는 방법이긴함
//생성자 주입 () 아무것도 안적어도 스프링 프레임 워크에서 자동으로 입력됨
public MenuInterceptor(MenuService menuService) {
this.menuService = menuService;
}
//prehandle override
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 인터셉터는 요청에 먼저 실행되어 작업을 하고 만약 리턴이 false가 되면 요청을 취소한다.
request.setAttribute("topMenuList", menuService.getMenuList());//메뉴리스트를 topmenulist에 담아줌
request.setAttribute("sessionUser", sessionUser);
return true;
}
}
menu.jsp
<ul class="navbar-nav ml-auto">
<c:choose>
<c:when test="${sessionUser.userlogin ==true}">
<li class="nav-item"><a href="${root}/user/modify"
class="nav-link">정보수정</a></li>
<li class="nav-item"><a href="${root}/user/logout"
class="nav-link">로그아웃</a></li>
</c:when>
<c:otherwise>
<li class="nav-item"><a href="${root}/user/login"
class="nav-link">로그인</a></li>
<li class="nav-item"><a href="${root}/user/join"
class="nav-link">회원가입</a></li>
</c:otherwise>
</c:choose>
</ul>
테스트
로그인 하면 정보수정, 로그아웃만 보임
로그아웃
@GetMapping("/logout")
public String logout() {
sessionUser.setUserlogin(false);
return "user/logout";
}
세션에 로그인이 되어있으면 true인데,
로그아웃 시 false로 변경
'BACKEND > Spring' 카테고리의 다른 글
게시판 만들기 2 - 정보 수정 페이지에서 정보 불러오기 (0) | 2023.10.30 |
---|---|
게시판 만들기 2 - 정보 수정 페이지와 글쓰기,글상세보기 페이지는 로그인 시 이용가능함 (1) | 2023.10.30 |
게시판 만들기 2 - 로그인 처리 (0) | 2023.10.30 |
게시판 만들기 2 - 아이디 중복 검사 (0) | 2023.10.27 |
게시판 만들기 2 - 유효성 검사 (0) | 2023.10.27 |