1) NeedLoginInterceptor 구현
@Component
public class NeedLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
System.out.println("실행됨?222");
return HandlerInterceptor.super.preHandle(req, resp, handler);
}
2) MyWebMvcConfigurer의 registry 등록
public void addInterceptors(InterceptorRegistry registry) {
~~ 생략 ~~
registry.addInterceptor(needLoginInterceptor).addPathPatterns("/usr/article/write")
.addPathPatterns("/usr/article/doAdd").addPathPatterns("/usr/article/modify")
.addPathPatterns("/usr/article/doModify").addPathPatterns("/usr/article/doDelete");
}
addPathPatterns
의 uri에 해당하는 요청이 올때 NeedLoginInterceptor 인터셉터 실행1) Rq클래스의 메소드(printHistoryBackJs,print)
public void printHistoryBackJs(String msg) {
resp.setContentType("text/html; charset=UTF-8");
print("<script>");
if (msg.length() != 0) {
print("alert('" + msg + "');");
}
print("history.back();");
print("</script>");
}
public void print(String msg) {
try {
resp.getWriter().append(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public void println(String str) {
print(str + "\n");
}
history.back()
를 메소드를 통해 여러곳에서 활용하기 위함2) 각 액션이 실행되기 전 로그인 체크를 앞단에서 실행
if (rq.isLogined() == false) {
return Ut.jsHistoryBack("로그인 후 이용해주세요");
}
컨트롤러 실행 전
수행하기 위해 NeedLoginInterceptor 구현 public class NeedLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
Rq rq = (Rq)req.getAttribute("rq");
if(!rq.isLogined()) {
rq.printHistoryBackJs("로그인 후 이용 가능합니다.");
return false;
}
return HandlerInterceptor.super.preHandle(req, resp, handler);
}
NeedLoginInterceptor
를 통해 로그인 체크NeedLoginInterceptor
실행되기 이전에 BeforeActionInterceptor
에서 req.setAttribute("rq", rq)
했기 때문에 새로 new
하지않아도 됨컨트롤러 실행 전
수행한다. 반환 값이 true
일 경우 컨트롤러로 진입하고 false
일 경우 진입하지 않는다.printHistoryBackJs()
메소드를 통해 요청에대한 응답을 한다.1) 로그인 페이지 이동
@RequestMapping("/usr/member/login")
public String showLogin() {
return "usr/member/login";
}
/usr/member/login
로그인 요청이 오면 로그인 페이지(jsp)로 이동2) login.jsp
<form class="table-box-type-1" method="post" action="doLogin">
<table class="min mx-auto">
<colgroup>
<col width ="80" />
<col width ="100"/>
</colgroup>
<tbody>
<tr>
<td>아이디 </td>
<td><input type="text" name="loginId" autocomplete="off" placeholder="아이디를 입력해주세요." /></td>
</tr>
<tr>
<td>비밀번호 </td>
<td><input type="password" name="loginPw" autocomplete="off" placeholder="비밀번호를 입력해주세요." /></td>
</tr>
</tbody>
</table>
<div class= "btns btns-box-type-1">
<button type="submit" >로그인</button>
<button type="button" onclick="history.back()">뒤로가기</button>
</div>
</form>
</div>
form태그
안에 테이블로 로그인 페이지 구현action="doLogin"
으로 데이터 전송3) 로그인 처리
@RequestMapping("/usr/member/doLogin")
@ResponseBody
public String doLogin(HttpSession httpSession, String loginId, String loginPw) {
~~ 생략 ~~
if (Ut.empty(loginId)) {
return Ut.jsHistoryBack("아이디를 입력 해주세요.");
}
if (Ut.empty(loginPw)) {
return Ut.jsHistoryBack("비밀번호를 입력 해주세요.");
}
return Ut.jsReplace(Ut.f("%s님 환영합니다.", member.getName()), "/");