장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[Spring] 스프링 공부 #30
WEB/Spring 인강

[Spring] 스프링 공부 #30

2022. 4. 20. 00:33
반응형

Servlet Filter 사용해서 인증체크

Servlet Filter란? 

공통적인 기능을 서블릿이 호출되기 전 혹은 호출되고 난 뒤에 수행하기 위해서 사용한다.

서블릿 필터 동작 과정

사용자 인증이나, 로깅과 같은 공통 기능들을 처리하기 위해서 사용한다.

 

LoginFilter - 로그인 필터

@Slf4j
public class LoginCheckFilter implements Filter {

    private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"};

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String requestURI = httpRequest.getRequestURI();

        HttpServletResponse httpResponse = (HttpServletResponse) response;

        try {
            log.info("인증 체크 필터 시작{}", requestURI);

            if (isLoginCheckPath(requestURI)) {
                log.info("인증 체크 로직 실행{}", requestURI);
                HttpSession session = httpRequest.getSession();
                if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {

                    log.info("미인증 사용자 요청 {}", requestURI);
                    //로그인으로 redirect
                    httpResponse.sendRedirect("/login?redirectURL=" + requestURI);
                    return;
                }
            }

            chain.doFilter(request, response);
        } catch (Exception e) {
            throw e;
        } finally {
            log.info("인증 체크 필터 종료 {}", requestURI);
        }
    }

    /**
     * 화이트 리스트의 경우 인증 체크 X
     */
    private boolean isLoginCheckPath(String requestURI) {
        return !PatternMatchUtils.simpleMatch(whitelist, requestURI);
    }
}
 

스프링 인터셉터

인터셉터란?

컨트롤러의 핸들러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 일종의 필터

 

LoginCheckInterceptor

@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();
        log.info("인증 체크 인터셉터 실행 {}", requestURI);
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER)
                == null) {
            log.info("미인증 사용자 요청");
            //로그인으로 redirect
            response.sendRedirect("/login?redirectURL=" + requestURI);
            return false;
        }

        return true;
    }
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LogInterceptor())
            .order(1)
            .addPathPatterns("/**")
            .excludePathPatterns("/css/**", "/*.ico", "/error");


    //패턴을 세밀하거 설정이 가능하다.
    registry.addInterceptor(new LoginCheckInterceptor())
            .order(2)
            .addPathPatterns("/**")
            .excludePathPatterns(
                    "/", "/members/add", "/login", "/logout",
                    "/css/**", "/*.ico", "/error"
            );
}

@preHandle 메서드를 사용해서 컨트롤러가 호출되기 전에 로그인 여부를 확인할 수 있다.

 

 

출처

[인프런] 스프링 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

Servlet Filter

https://docs.oracle.com/cd/B14098_01/web.1012/b14017/filters.htm

 

Servlet Filters and Event Listeners

Servlet filters are used for preprocessing Web application requests and postprocessing responses, as described in the following sections: Overview of Servlet Filters When the servlet container calls a method in a servlet on behalf of the client, the HTTP r

docs.oracle.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'WEB > Spring 인강' 카테고리의 다른 글

[Spring] 스프링 공부 #32  (0) 2022.04.21
[Spring] 스프링 공부 #31  (0) 2022.04.20
[Spring] 스프링 공부 #29  (0) 2022.04.17
[Spring] 스프링 공부 #28  (0) 2022.04.15
[Spring] 스프링 공부 #27  (0) 2022.04.14
    'WEB/Spring 인강' 카테고리의 다른 글
    • [Spring] 스프링 공부 #32
    • [Spring] 스프링 공부 #31
    • [Spring] 스프링 공부 #29
    • [Spring] 스프링 공부 #28
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바