Notice
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- springboot
- jquery
- java
- 셋업
- 자바스크립트
- 필터체인
- MySQL
- 깃허브
- 면접
- 오라클
- 설정
- 이클립스
- 자바
- 알고리즘
- 설치
- html
- 제이쿼리
- jsp
- 마이바티스
- SESSION
- Oracle
- 스프링
- EL태그
- 버튼
- Spring
- 깃허브 간단요약
- jsp 내부객체
- 폼태그
- Eclipse
- jstl
Archives
- Today
- Total
은은하게 코드 뿌시기
[Spring] Interceptor/ 인터셉터와 필터의 차이 본문
728x90
인터셉터 (Interceptor)
: 컨트롤러에 드러오는 요청 HttpRequest와 컨트롤라가 응답하는 HttpResponse를 가로채는 역할
EX) 관리자 페이지 접근전 관리자 인증으로 활용 ,AuthenticationInterceptor
인터셉터와 필터의 차이?
Filter | Interceptor | |
호출시점 | Dispatcer Servlet 이 실행 되기전 | DispatcherServlet 이 실행 된후 |
설정위치 | web.xml | spring/servlet-context.xml |
구현방식 | web.xml에서 설정으로만 구현가능 | servlet-context.xml 설정 및 구현 필요 |
인터셉터 메소드
- preHandle 메소드 : 컨트롤러가 요청을 처리하기전에 호출하는 메소드
- postHandle 메소드 : 컨트롤러가 요청을 처리한 후에 예외가 발생하지 않은 경우에 호출하는메소드
- afterCompletion 메소드 : 컨트롤러가 요청을 처리한후에 예외 발생 여부 상관없이 호출되는 메소드
Filter와 인터셉터의 차이와
적용 예를 예제로 알아보쟈!
Filter 적용 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!-- 필터 정의 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 필터 맵핑 /* 는 모든 경로의 파일을 말한다. -->
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
cs |
Interceptor 적용예제
servlet-context.xml
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 인터셉터 설정 -->
<beans:bean class="kr.co.dong.commom.AuthenticationInterceptor" id="auth"/>
<!-- 인터셉터를 위한 맵핑경로 -->
<interceptors>
<interceptor>
<mapping path="/board/register"/>
<mapping path="/board/detail"/>
<mapping path="/board/update"/>
<mapping path="/board/delete"/>
<beans:ref bean="auth"/>
</interceptor>
</interceptors>
|
cs |
class AuthenticationInterceptor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package kr.co.dong.commom;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class AuthenticationInterceptor implements HandlerInterceptor {
//Controller 가 요청을 처리하기전에 호출하는 메소드
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 클라이언트에 부여한 세션을 가져온다
HttpSession session = request.getSession();
if (session.getAttribute("user")==null) {
// 로그인이 아니라면 로그인 페이지로 이동시킴
response.sendRedirect(request.getContextPath()+"/board/login");
return false;
}
return true; // 로그인 되어있으면 통과 pass~
}
//Controller 가 요청한 처리한 후에 호출하는 메소드
// 예외가 발생되지 않은 경우에만 Controller 작업 후에 호출되는 메소드
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
//Controller 가 요청한 처리한 후에 호출하는 메소드
// 예외 발생 여부에 상관없이 Controller 작업 후에 호출되는 메소드
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
|
cs |
로그인 인터셉터에서 알람 띄우기.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//지정한 컨트롤러에 들어가기전에 세션이 없으면 로그인화면으로
HttpSession session = request.getSession();
response.setCharacterEncoding("UTF-8");
if (session.getAttribute("user_id")==null) {
PrintWriter prtw = response.getWriter();
response.setContentType("text/html; charset=UTF-8");
prtw.print("<script>alert('로그인해주세요.');"
+ " location.href='"
+ request.getContextPath() + "/login"
+ "'; </script>");
prtw.flush();
prtw.close();
return false;
}
return true;
}
|
cs |
728x90
'웹 > spring' 카테고리의 다른 글
커넥션풀 (Connection Pool, DBCP) / Datasource (0) | 2022.08.25 |
---|---|
[spring] AOP (Aspect Oriented Programming) (0) | 2022.08.25 |
log4j - DB로그 설정하기 dataSourceSpied (0) | 2022.08.24 |
뷰 리졸버/ViewResolver (0) | 2022.08.24 |
[spring] - 스프링 경로, 스프링 파일 /경로/설정/키워드 요약 (0) | 2022.08.24 |
Comments