오늘 배운 것
로그인 정보 저장
- 로그인 시 session에 user이름으로 user정보 저장됨
 
- session에 저장된 user정보가 있으면 user의 name정보를 model에 담아서 전송
(모든 페이지에 user의 name정보가 전해진다는 얘기) 
package com.myapp.bbs;
import javax.servlet.http.HttpSession;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import com.myapp.bbs.model.User;
@ControllerAdvice
public class Common {
	@ModelAttribute
	public void sharedData(Model model, HttpSession session) {
		
		User user = (User) session.getAttribute("user");
		
		if (user != null) { 
			model.addAttribute("userName", user.getName());
		}
	}
}
- aside에 user의 name정보의 유무에 따라 출력
 
      <li class="nav-item" th:if="${userName != null}"> 
        <a class="nav-link text-white" th:href="@{/login}">
          <div class="text-white text-center me-2 d-flex align-items-center justify-content-center">
            <i class="material-icons opacity-10">logout</i>
          </div>
          <span class="nav-link-text ms-1">로그아웃</span>
        </a>
      </li>
      <li class="nav-item" th:if="${userName == null}"> 
        <a class="nav-link text-white" th:href="@{/login}">
          <div class="text-white text-center me-2 d-flex align-items-center justify-content-center">
            <i class="material-icons opacity-10">login</i>
          </div>
          <span class="nav-link-text ms-1">로그인</span>
        </a>
      </li>
      <li class="nav-item" th:if="${userName == null}">
        <a class="nav-link text-white" th:href="@{/register}">
          <div class="text-white text-center me-2 d-flex align-items-center justify-content-center">
            <i class="material-icons opacity-10">assignment</i>
          </div>
          <span class="nav-link-text ms-1">가입하기</span>
        </a>
      </li>
- nav에서 user의 name정보의 유무에 따라 출력
 
        <li class="nav-item d-flex align-items-center" th:if="${userName != null}">
          <form th:action="@{/logout}" method="get">
            <span th:text="${'😆 하이, ' +  userName }"></span>
            <button type="submit" class="badge bg-gradient-warning ms-3">로그아웃</button>
          </form>
        </li>
        <li class="nav-item d-flex align-items-center" th:if="${userName == null}">
          <a th:href="@{/login}" class="nav-link text-body font-weight-bold px-0">
            <i class="fa fa-user me-sm-1"></i>
            <span class="d-sm-inline d-none">로그인</span>
          </a>
        </li>
로그인을 하지 않았을 때

로그인을 했을 때

Interceptor
- 클래스를 만든 후 HandlerInterceptor를 구현
 
- return값이 true이면 통과, false면 통과X
 
- Interceptor클래스를 만든 후 등록을 해줘야 Interceptor로써 기능을 함
 
package com.myapp.bbs.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import com.myapp.bbs.model.User;
public class LoginCheckInterceptor implements HandlerInterceptor {
	
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession(); 
		User user = (User) session.getAttribute("user"); 
		
		if(user == null) { 
			String url = session.getServletContext().getContextPath() + "/login";
			response.sendRedirect(url); 
			System.out.println("LoginInterceptor # preHandler() : 실패");
			return false;
		}
		System.out.println("LoginInterceptor # preHandler() : 통과");
		
		return true;
	}
	
}
package com.myapp.bbs;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.myapp.bbs.interceptor.LoginCheckInterceptor;
@Configuration
public class WebConfig implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		
		registry.addInterceptor(new LoginCheckInterceptor()) 
				.addPathPatterns("/board/**")						
				.excludePathPatterns("/board/list", "/board/get");						// Interceptro를 적용하지 않을 Controller 주소
	}
}