- JAVA 프로젝트
메뉴 부분은 여러 화면에서 쓰이기 때문에 Interceptor로 처리 했었다.
(TopMenuInterceptor에서 topMenuService를 가져와 메서드 호출해서 구성했다.)
때문에 로그인 전 후 처리도 이곳에서 해주면 된다.
JAVA 프로젝트의 경우 Interceptor에서는 Bean을 주입 받을 수 없다.
그렇기 때문에 Interceptor를 정의한 ServletAppContext에서 Bean을 주입 받아서 Interceptor로 전달을 해주면 된다.
1. ServletAppContext에서 loginUserBean을 주입 받아 Interceptor에 전달
package com.example.config;
...
@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
@ComponentScan("com.exmaple.dao")
@ComponentScan("com.example.service")
@PropertySource("/WEB-INF/properties/db.properties")
public class ServletAppContext implements WebMvcConfigurer{
...
@Autowired
private TopMenuService topMenuService;
// Session영역에 저장해 놓은 loginUserBean을 주입 받는다.
@Resource(name = "loginUserBean")
private UserBean loginUserBean;
...
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
WebMvcConfigurer.super.addInterceptors(registry);
// TopmenuInterceptor에 위에서 주입 받은 loginUserBean을 넘겨준다.
TopMenuInterceptor topMenuInterceptor = new TopMenuInterceptor(topMenuService, loginUserBean);
InterceptorRegistration reg1 = registry.addInterceptor(topMenuInterceptor);
reg1.addPathPatterns("/**");
}
2. TopmenuInterceptor에서 위에서 지정한 loginUserBean을 전달 받는다.
package com.example.interceptor;
...
public class TopMenuInterceptor implements HandlerInterceptor{
private TopMenuService topMenuService;
private UserBean loginUserBean;
public TopMenuInterceptor(TopMenuService topMenuService, UserBean loginUserBean) {
this.topMenuService = topMenuService;
this.loginUserBean = loginUserBean;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
List<BoardInfoBean> topMenuList = topMenuService.getTopMenuList();
request.setAttribute("topMenuList", topMenuList);
request.setAttribute("loginUserBean", loginUserBean);
return true;
}
}
3. WEB-INF/views/include/top_menu.jsp로 이동해서 메뉴 로그인 전 후 처리
<ul class="navbar-nav ml-auto">
<c:choose>
<c:when test="${loginUserBean.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>
4. 로그아웃 처리하기
UserController로 이동해서 loginUserBean 값에 false 처리
(UserBean.java에서 생성자를 통해 기본 값도 false로 줬다.)
public class UserBean {
...
private boolean userIdExist;
private boolean userLogin;
public UserBean() {
this.userIdExist = false;
this.userLogin = false;
}
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/logout")
public String logout() {
loginUserBean.setUserLogin(false);
return "/user/logout";
}
- XML 프로젝트
XML 프로젝트의 경우 JAVA 프로젝트와 다르게 Interceptor에서 Bean을 주입 받을 수 있다.
1. Interceptor에서 loginUserBean을 전달 받는다.
package com.example.interceptor;
...
public class TopMenuInterceptor implements HandlerInterceptor{
@Autowired
private TopMenuService topMenuService;
@Resource(name = "loginUserBean")
@Lazy
private UserBean loginUserBean;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
List<BoardInfoBean> topMenuList = topMenuService.getTopMenuList();
request.setAttribute("topMenuList", topMenuList);
request.setAttribute("loginUserBean", loginUserBean);
return true;
}
}
나머지 설정은 JAVA프로젝트로 할 때와 동일하다.
'프로젝트 > [SPRING MVC] 회원 관리' 카테고리의 다른 글
[SPRING MVC] 정보 수정 처리 (0) | 2022.05.22 |
---|---|
[SPRING MVC] 로그인 확인 처리(URL 직접 입력 접속 방지) (0) | 2022.05.21 |
[SPRING MVC] 로그인 처리 (0) | 2022.05.20 |
[SPRING MVC] 회원가입 저장 처리 (0) | 2022.05.19 |
[SPRING MVC] 회원가입 아이디 중복 확인 처리 구현 (0) | 2022.05.19 |