목록전체 글 (181)
개발자의 오르막
# Security Custom Filter 만들기 public class LoggingFilter extends GenericFilter { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { StopWatch stopWatch = new StopWatch(); stopWatch.start(); chain.doFilter(request, response); stopWatch.stop(); lo..
# UsernamePasswordAuthenticationFilter : 폼 로그인을 처리하는 인증 필터 - 사용자가 폼에 입력한 username 과 password로 Authentication을 만들고 AuthenticationManager를 사용하여 인증을 시도한다. - AuthenticationManager (ProviderManager) 는 여러 AuthenticationProvider 를 사용하여 인증을 시도하는데, 그 중에 DaoAuthenticationProvider 는 UserDetailsService를 사용하여 UserDetails 정보를 가져와 사용자가 입력한 password 와 비교한다. # DefaultLoginPageGeneratingFilter - 기본 로그인 폼 페이지를 생성해..
# 응답 헤더에 시큐리티 관련 헤더를 추가해주는 필터 - XContentTypeOptionsHeaderWriter : 마임 타입 스니핑 방어 ( 실행할 수 없는 마임 타입을 실행하려는 요청을 방어해줌 ) - XXssProtectionHeaderWriter : 브라우저에 내장된 XSS필터 적용 - CacheControlHeaderWriter : 캐시 히스토리 취약점 방어 - HstsHeaderWriter : HTTPS로만 소통하도록 강제 - XFrameOptionsHeaderWriter : clickjacking 방어 - Cache-Control : no-cache, no-store, max-age=0, must-revalidate ( 캐쉬를 쓰지 않도록 설정 ) - Content-Language : en..
# 스프링 시큐리티 적용 여부 설정 - WebSecurity 의 ignoring()을 사용해서 시큐리티 필터 적용을 제외할 요청을 설정할 수 있다. @Override public void configure(WebSecurity web) throws Exception { web.ignoring().mvcMatchers("/favicon.ico"); } 스프링 부트가 제공하는 PathRequest 를 사용해서 정적 자원 요청을 스프링 시큐리티 필터를 적용하지 않도록 설정. # WebAsyncManagerIntegrationFilter - 스프링 MVC의 Async 기능 (핸들러에서 Callable을 리턴할 수 있는 기능)을 사용할 때에도 SecurityContext를 공유하도록 도와주는 필터 1. PrePr..
# 스프링 시큐리티 아키텍처 1. 웹으로부터 요청이 들어오면 서블릿 필터 중 DeligatingFilterProxy 를 통해 들어온다. (DeligatingFilterProxy 는 스프링부트를 사용할 때 자동적으로 등록된다) 2. 1번에서 특정한 Bean (SpringSecurityFilterChain) 에 필터 기능을 위임하여 스프링 시큐리티에 내장된 15가지 필터들을 사용하게 된다. (FilterChainProxy 를 통해) 3. 2번의 체인의 필터들은 WebScurity, HttpSecurity 를 사용하면서 만들어진다. WebSecurityConfigurerAdater 를 상속하는 SecurityConfig 파일에서 우리 프로젝트에 맞는 security 설정을 해주면 내장된 필터들에 설정들이 자동..
# Access Control 결정을 내리는 인터페이스로, 구현체 3가지를 기본으로 제공한다. - AffirmativeBased : 여러 Voter 중에 한명이라도 허용하면 허용, 기본전략 - ConsensusBased : 다수결 - UnanimousBased : 만장일치 - AffirmativeBased public void decide(Authentication authentication, Object object, Collection configAttributes) throws AccessDeniedException { int deny = 0; for (AccessDecisionVoter voter : getDecisionVoters()) { int result = voter.vote(authent..