반응형
Spring Boot 환경에서 Spring security를 사용하고 있습니다.
원래 ...headers().frameOptions().sameOrigin() 을 기본으로 전체 적용해서 사용하고 있었습니다.
그런데 외부에 iframe에 들어가야하는 페이지가 하나 추가적으로 필요하게 되었습니다.
그냥 url 1개만 X-Frame-Options 헤더를 제거하면 되는데 이게 생각처럼 쉽지가 않았습니다.
아무리 구글링해도 명쾌한 해답이 없었습니다.
무수한 삽질 끝에 regexMatcher 를 이용해 URL 기반으로 Spring security 설정을 분리할 수 있었습니다.
/link/iframe 이라는 URL 만 X-Frame-Options 헤더를 제거하는 코드 샘플입니다.
@EnableWebSecurity @Configuration public class DefaultHttpSecurityConfig extends WebSecurityConfigurerAdapter { ... @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/link/iframe")// // --------------- .authorizeRequests()// // .antMatchers("/link/iframe").permitAll()// .and().headers().frameOptions().disable(); http.regexMatcher("^((?!" + "/WEB-INF/jsp/link/iframe.jsp" + ").)*$") // --------------- .authorizeRequests()// // .antMatchers(// ... ).permitAll()// .anyRequest().authenticated()// .and().headers().frameOptions().sameOrigin()// ... // --------------- ; ... } ... } |
특이사항으로 regexMatcher는 url이 아닌 view 실제 경로로 비교를 합니다.
org.springframework.security.web.util.matcher.RegexRequestMatcher 클래서의 matches 메서드에서 확인할 수 있습니다.
당연히 URL 비교로 생각하고 이 부분에서 삽질을 많이 했네요. ( 도대체 왜 view파일로 비교하는거지 ㅡㅡ? )
반응형
'java' 카테고리의 다른 글
java 정규식 한글 검사 (0) | 2019.05.03 |
---|---|
이니시스 이니페이 결제취소 오류. (0) | 2019.05.02 |
spring boot mysql connector java version property (0) | 2019.04.09 |
spring send mail (0) | 2019.03.23 |
spring boot favicon.ico (0) | 2019.03.09 |
java.lang.IllegalStateException: No Java compiler available for configuration options compilerClassName: [null] and compiler: [null] (0) | 2019.03.09 |
springboot mybatis-config.xml to Java Config (0) | 2019.03.08 |
java - HttpServletRequest method 정리 (0) | 2019.02.26 |