Загружаем каталог…
Загружаем каталог…
09 · 필터 💡 한 줄 요약 : Filter는 요청·응답의 공통 처리를 Controller 바깥에서 수행합니다. Filter의 위치와 역할 HTTP 요청은 Servlet 필터들을 거친 뒤 DispatcherServlet으로 들어갑니다. 필터는 로깅·인증 같은 공통 처리를 수행하거나 요청 진행을 중단할 수 있습니다. 작업 활용 예 전처리 요청 URL 기록, 토큰 확인 다음 단계 실행 chain.doFilter(request, response) 후처리 하위 처리 완료 뒤 로그 기록 흐름 중단 인증 실패 응답 반환 LoggingFilter 예제 @Component @Order(1) @Slf4j public class LoggingFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; log.info("요청: {}", httpRequest.getRequestURI()); chain.doFilter(request, response); log.info("하위 요청 처리 완료"); } } Filter Chain에서 실행되는 순서 첫 필터의 전처리를 실행합니다. chain.doFilter() 로 다음 필터를 호출합니다. 마지막 필터 이후 Servlet이 요청을 처리합니다. 처리가 끝나면 호출이 되돌아오면서 후처리를 실행합니다. 📝 흐름 이해 : chain.doFilter() 다음 줄은 하위 처리가 정상 반환한 뒤 실행됩니다. 하위에서 예외가 발생해도 반드시 수행해야 하는 작업은 try/finally 등으로 구성합니다. 직접 만든 인증 필터의 처리 로그인·회원가입·정적 자원처럼 공개할 경로인지 확인합니다. 인증이 필요한 경로라면 JWT를 찾습니다. 토큰을 검증하고 사용자 정보를 조회합니다. 필요한 정보를 요청 객체에 담습니다. 정상 요청만 다음 단계로 넘깁니다. // 개념을 보여주는 발췌 예제 Claims claims = jwtUtil.parseClaims(token); User user = userRepository.findByUsername(claims.getSubject()) .orElseThrow(() -> new IllegalArgumentException("회원이 없습니다.")); request.setAttribute("user", user); chain.doFilter(request, response); 이 방식의 request.setAttribute() 와 Spring Security의 SecurityContext 는 서로 다른 저장 방식입니다. 복습 체크 chain.doFilter() 가 없으면 요청이 계속 진행되지 않는 이유를 설명할 수 있습니다. 요청 전처리와 응답 후처리의 순서를 설명할 수 있습니다. 인증 로직을 여러 Controller에 반복하지 않고 분리할 수 있습니다. 10 · Spring Security 프레임워크 💡 한 줄 요약 : Spring Security는 보안 필터와 인증·인가 기능을 제공해 요청 접근을 제어합니다. 적용 효과 직접 구현할 때 Spring Security를 활용할 때 요청마다 인증 확인 로직 작성 보안 필터 체인으로 공통 처리 URL별 접근 조건을 직접 분기 접근 정책을 설정으로 선언 사용자 정보를 별도 방식으로 전달 Authentication·SecurityContext 활용 로그인 처리 흐름 직접 구성 인증 관리자·Provider 등 활용 주요 구성 요소 요소 역할 SecurityFilterChain 특정 요청에 적용할 보안 필터 체인 HttpSecurity 접근 정책·로그인·필터 등을 설정하는 구성 객체 Authentication 인증 요청 또는 인증 결과를 나타내는 객체 SecurityContext 현재 인증 정보를 담는 컨텍스트 SecurityContextHolder 현재 실행 흐름에서 컨텍스트에 접근 기본 접근 정책 @Configuration @EnableWebSecurity public class WebSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth .requestMatchers("/css/**", "/js/**", "/api/user/**").permitAll() .anyRequest().authenticated() ); http.formLogin(Customizer.withDefaults()); return http.build(); } } permitAll() 은 해당 접근 규칙에서 인증 없이도 접근을 허용합니다. authenticated() 는 인증된 사용자에게 접근을 허용합니다. permitAll() 이 필터 체인을 통째로 건너뛰게 하는 것은 아닙니다. 경로 규칙은 구체적인 조건을 먼저, 나머지 조건을 마지막에 둡니다. CSRF 이해하기 CSRF는 브라우저가 자동으로 전송하는 인증 정보 등을 이용해 사용자가 의도하지 않은 요청을 보내게 하는 공격입니다. 폼 기반 요청에서는 CSRF 토큰을 함께 제출하도록 구성할 수 있습니다. 실습의 JWT 설정에서는 csrf.disable() 을 사용하지만 이를 모든 서비스의 공통 정답으로 적용하지 않습니다. JWT를 쿠키에 넣으면 브라우저가 자동 전송하므로, JWT나 REST라는 이름만으로 CSRF 위험이 없어지지 않습니다. 📝 정리 : 인증 정보를 어디에 저장하고 어떻게 요청에 실어 보내는지에 따라 CSRF 정책을 결정합니다. 복습 체크 공개 경로와 인증 필요 경로를 나누어 설정할 수 있습니다. SecurityFilterChain 과 일반 Controller의 역할을 구분할 수 있습니다. JWT 사용 여부만으로 CSRF 설정을 결정하지 않습니다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
Spring 숙련 Chapter 1 - 요청 공통 처리. 09 · 필터 💡 한 줄 요약 : Filter는 요청·응답의 공통 처리를 Controller 바깥에서 수행합니다. Filter의 위치와 역할 HTTP 요청은 Servlet 필터들을 거친 뒤 DispatcherServlet으로 들어갑니다. 필터는 로깅·인증 같은 공통 처리를 수행하거나 요청 진행을 중단할 수 있습니다. 작업 활용 예 전처리 요청 URL 기록, 토큰 확인 다음 단계 실행 chain.doFilter(request, response) 후처리 하위 처리 완료 뒤 로그 기록 흐름 중단 인증 실패 응답 반환 LoggingFilter 예제 @Component @Order(1) @Slf4j public class LoggingFilter…
Открыть источник