250x250
jhs0129
프로그래밍
jhs0129
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자격증
      • SQLD
      • 정보처리기사
    • 프로젝트
      • html csss js - todolist
      • JSP 방명록
      • 졸업작품
    • 공부기록
      • Java
      • Spring
      • Spring Security
      • Algorithm
      • JPA
      • DB
      • Servlet JSP
      • html
      • 기술공유
    • 잡다한 생각

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • oAuth2
  • spring framework
  • AWS
  • 스프링시큐리티
  • 프로젝트
  • JPA
  • cicd
  • rest docs
  • spring
  • github
  • nhn cloud 강의
  • 스프링
  • Spring Security Login
  • spring boot
  • NHN Cloud
  • EC2
  • 스프링 프레임워크
  • Spring Security
  • spring data jpa
  • codedeploy

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
jhs0129

프로그래밍

공부기록/Spring

Spring-filter interceptor

2022. 2. 3. 19:32
320x100
반응형

서블릿 필터

필터내에서 특정 조건을 만족하지 못한다면 해당 필터에서 끝을 내고 컨트롤러를 호출하지 않도록 제어하는 역할이다

체인 형식으로 여러개의 필터를 순차적으로 등록하여 사용할수 있다

로그인관련에서 사용

흐름

Http 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 호출

Interface

Filter인터페이스를 상속받아서 구현을 한다

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //초기화시 호출
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //필터 로직 구현
    }

    @Override
    public void destroy() {
        //필터 종료시 호출
    }
}

등록방법

  • @Component: filter객체를 컴포넌트스캔 대상으로 지정, 적용범위는 전체 URL을 대상으로 하므로 특정 URL에만 적용을 하기 위해서는 Bean으로 등록을 해서 사용을 해야한다
  • @Bean등록
  • @Bean public FilterRegistrationBean filterRegister(){ FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(); filterFilterRegistrationBean.setFilter(new LoginCheckFilter()); filterFilterRegistrationBean.setOrder(1); filterFilterRegistrationBean.addUrlPatterns("/members"); return filterFilterRegistrationBean; }

인터셉터

필터와 같은 역할을 하지만 호출 시점과 호출시점별로 단계적으로 세분화 되어있다

인터페이스에 default메소드로 등록이 되어있기 때문에 filter와 같이 모든 메서드를 재정의 해줄 필요없이 원하는 것만 구현을 해주면 된다

public interface HandlerInterceptor {
    //컨트롤러 객체 호출 전
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        return true;
    }
    //컨트롤러 정상적으로 실행된 이후
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            @Nullable ModelAndView modelAndView) throws Exception {
    }
    //뷰가 렌더링 된 이후
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
            @Nullable Exception ex) throws Exception {
    }
}
  • preHandle(): return값 true - 다음으로진행, false - 끝
  • postHandle(): 컨트롤러에서 예외 발생시 호출x
  • afterCompletion(): 예외 발생해도 항상 호출

흐름

Http 요청 -> WAS -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 호출

등록방법

java기반

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        String[] totalExcludePath = {"/css/**", "/*.ico", "error"};
        String[] loginExcludePath = {"/", "/members/add", "/login", "/logout", "/css/**", "/*.ico", "/error"};

        registry.addInterceptor(new LogInterceptor())
                .order(1)
                .addPathPatterns("/**")
                .excludePathPatterns(totalExcludePath);

        registry.addInterceptor(new LoginCheckInterceptor())
                .order(2)
                .addPathPatterns("/**")
                .excludePathPatterns(loginExcludePath);
    }
}

xml기반

<mvc:interceptors>
    <!-- 요청 경로 패턴 지정 -->
    <mvc:interceptor>
        <mvc:mapping path="/login">
        <mvc:mapping path="/logout">
        ...
        <mvc:mapping path="/">
        <bean class="경로">
    </mvc:interceptor>
    <!-- 전체 경로에 대해서 지정 -->
    <bean class="경로">
</mvc:interceptors>

참고

인프런_스프링 MVC 2편 - 백엔드 웹개발 핵심 기술_김영한 님 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

 

320x100
반응형

'공부기록 > Spring' 카테고리의 다른 글

DTO관련 고민  (0) 2022.07.13
Spring - 예외처리  (0) 2022.02.06
Spring - 로그인 처리 세션쿠키  (0) 2022.01.28
Spring-MVC4 에러검증2  (0) 2022.01.22
Spring MVC3 - Error검증  (0) 2022.01.17
    '공부기록/Spring' 카테고리의 다른 글
    • DTO관련 고민
    • Spring - 예외처리
    • Spring - 로그인 처리 세션쿠키
    • Spring-MVC4 에러검증2
    jhs0129
    jhs0129
    공부기록 남기기

    티스토리툴바