새로운 패키지를 만들어서 interceptor 클래스를 만들어 준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class MyInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String path = request.getServletPath();
System.out.println(path);
String query = request.getQueryString(); //파라미터가 있는지 없는지
System.out.println(query);
HttpSession httpSession = request.getSession();
if(query != null){ //주소가 board?no=34&page=33
httpSession.setAttribute("prev_url", path+"?"+query);
}else{ //board
httpSession.setAttribute("prev_url", path);
}
// TODO Auto-generated method stub
return true; //super.preHandle(request, response, handler);
}
}
| cs |
HandlerInterceptorAdapter를 상속 받고
public class MyInterceptor extends HandlerInterceptorAdapter{
HandlerInterceptorAdapter에 있는 preHandle 을 오버로드 하여 재 정의 한다.
@Override
public boolean preHandle
String path = request.getServletPath();
System.out.println(path);
String query = request.getQueryString(); //파라미터가 있는지 없는지
System.out.println(query);
path과 query 를 찍어 보면 다음과 같은 경로를 가지고 있다.
query가 있을때는 query가 있는 주소로, 없을때는 path 주소를 담은 값을 session에 담아
set 한다.
if(query != null){ //주소가 board?no=34&page=33
httpSession.setAttribute("prev_url", path+"?"+query);
}else{ //board
httpSession.setAttribute("prev_url", path);
}
return 값을 true로 해준다.( 아직 왜 true로 하는지는 잘 이해 못함)
return true;
환경 설정을 해주어야 한다. 굳이 <annotation-driven /> 밑에 안만들어도 될거같지만
찝찝하니까 저 위치 밑에 interceptors 태그를 만들어 준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// Servlet-context.xml
<annotation-driven />
<interceptors>
<interceptor>
<mapping path="/**" />
<exclude-mapping path="/d2_login**" />
<exclude-mapping path="/d2_logout**" />
<exclude-mapping path="/resources**" />
<exclude-mapping path="/resources/**" />
<beans:bean class="com.ds.interceptor.MyInterceptor" />
</interceptor>
</interceptors>
| cs |
모든 주소에 적용 한다.
<mapping path="/**" />
exclude 해당 주소를 제외한다.
<exclude-mapping path="/d2_login**" />
<exclude-mapping path="/d2_logout**" />
<exclude-mapping path="/resources**" />
<exclude-mapping path="/resources/**" />
아까 만들어준MyInterceptor 클래스의 위치를 입력해준다.
interseptor 패키지안에 있는 MyInterceptor 라고 적어 주었다.
<beans:bean class="com.ds.interceptor.MyInterceptor" />
환경설정이 끝났으면 어떻게 쓰는지 확인해 보자
사용방법은 간단하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// Controller
@RequestMapping(value = "d2_login", method = RequestMethod.POST)
public String _login(@ModelAttribute("member")Exam1_member mem,
HttpSession httpSession) {
try {
Exam1_member ret = d2DAO.login(mem);
if(ret != null){
if(!ret.getId().equals("")){
httpSession.setAttribute("id", ret.getId());
httpSession.setAttribute("name", ret.getName());
httpSession.setAttribute("level", ret.getLevel());
String prev_url = (String)httpSession.getAttribute("prev_url");
if(ret.getLevel() == 1){
d2DAO.updatePoint(ret.getId());
return "redirect:"+prev_url;
}
| cs |
String prev_url = (String)httpSession.getAttribute("prev_url");
인터셉션이 exclude 지정한 페이지를 제외한 모든 페이지로 움직일때 마다 그 값을 저장하기 때문에 login에서 return 할때 prev_url 주소값을 입력함으로 그 전페이지로 redirect 하게 된다. 그래서 글쓰기 창 버튼을 클릭했을때 로그인 창이 떴다면 로그인 후 글쓰기창으로 이동 시키게 되는 것이다.
인터셉터의 자세한 설명은 해당 블로그 참조
http://hellogk.tistory.com/90
댓글 없음:
댓글 쓰기