오늘 배운 것
로그인 정보 저장
- 로그인 시 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 주소
}
}