Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- int와 integer
- push함수
- git
- dart
- 다형성
- 추상클래스
- 오류
- java
- 리액트
- Middleware
- 콘솔게임
- js
- mybatis
- 코딩테스트
- DB
- Oracle
- Node.js
- Pug
- 자바
- qqOperater
- Spring
- 네임드생성자
- 깃허브
- React
- 생성자
- 배열
- 삼항연산자
- app.use
- Sort()
- 자바스크립트
Archives
- Today
- Total
평행코드
<Spring> 인터셉터(Interceptor) 본문
인터셉터
→ 공통의 서비스를 구현할 때 사용 (ex 권한체킹할때)
controller의 매핑메소드가 실행되기 전, 후, 응답처리 후 기능을 구현
인터셉터 구현하기
→ Spring이 제공하는 HandlerInterCeptor인터페이스를 구현한 클래스를 선언
인터페이스에 정의된 필요한 추상메소드를 재정의
preHandler()
postHandle()
afterComplition()
LogerInterceptor.java 파일
public class LoggerInterceptor implements HandlerInterceptor {
// private Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
// 매핑된 매핑메소드를 실행하기 전에 실행할 로직을 설정
// true : 매핑메소드 정상실행
// false : 매핑메소드 실행하지 않음
log.debug("------ 인터셉터 prehandle 실행 ------");
log.debug(request.getRequestURI());
log.debug("----------------------------------");
// Object handle : 실행될 메소드에 대한 정보를 저장한 객체
// 클래스, 메소드의 정보를 가져올 수 있음
HandlerMethod hm = (HandlerMethod)handler;
// 실행 클래스 가져오기
Object controller = hm.getBean();
log.debug("클래스 : {}",controller);
Method m = hm.getMethod();
log.debug("메소드명 : " + m.getName());
return true;
//return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
log.debug("----- 인터셉터 postHandle 실행 -----");
log.debug("응답화면 : " + modelAndView.getViewName());
Map modelData = modelAndView.getModel();
log.debug("model : {}", modelData);
log.debug("---------------------------------");
}
}
LoginCheckInterceptor.java 파일
public class LoginCheckInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 로그인정보확인
HttpSession session = request.getSession();
Member loginMember = (Member)session.getAttribute("loginMember");
if(loginMember == null) {
// 로그인 안하고 접근함!
request.setAttribute("msg", "로그인 후 이용할 수 있는 서비스입니다 :( ");
request.setAttribute("loc", "/");
request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp")
.forward(request, response);
return false;
}
return true;
}
}
bean으로 등록하기
<!-- 인터셉터 적용설정하기 -->
<beans:bean id="loginCheckInterceptor"
class="com.bs.spring.common.interceptor.LoginCheckInterceptor"/>
<interceptors>
<interceptor>
<mapping path="/member/*"/>
<beans:bean class="com.bs.spring.common.interceptor.LoggerInterceptor"/>
<!-- 일회용으로는 이렇게! -->
</interceptor>
<interceptor>
<mapping path="/demo/*"/>
<!-- 제외할 서블릿 설정 -->
<exclude-mapping path="/demo/demoList.do"/>
<!-- 계속쓸거라면 ref로 참조해서쓰는것이 나을듯! -->
<beans:ref bean="loginCheckInterceptor"/>
</interceptor>
</interceptors>
적용대상설정하기
- url 패턴으로 설정
- xml의 <interceptors>태그 <interceptor url=””,[옵션]> 자식태그를 선언
비교!
- filter : request →(사이에 필터) tomcat → springweb → tomcat → response
- interceptor : request → tomcat → springweb →
(사이에 필터링 할 수 있는 것 : 인터셉터 (3가지상황에 대해서 로직처리) : 전 후 응답후)
controller method() → tomcat → response
'Spring' 카테고리의 다른 글
<Spring> AOP (Aspect Orientied Programing) (0) | 2023.12.13 |
---|---|
<Spring> 트랜잭션처리하기 (0) | 2023.12.13 |
<Spring> bean validator 구현하는 방법 (1) | 2023.12.11 |
<Spring> 로그 남기기 (2) | 2023.12.11 |
<Spring legacy> Mybatis DB연결하기 (0) | 2023.12.10 |