'spring boot filter'에 해당되는 글 1건

  1. 2021.11.16 spring boot lucy filter 추가 + filter 추가

spring boot lucy filter 추가 + filter 추가 spring boot 기반으로 작업 시 lucy filter를 추가 하는 경우 아래와 같이 작업 할 수 있습니다. xml기반의 경우 web.xml에

<filter>
   <filter-name>xssEscapeServletFilter</filter-name>
   <filter-class>com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>xssEscapeServletFilter</filter-name>
   <url-pattern>*.do</url-pattern>
</filter-mapping>

와 같이 추가 해주면 되는데 spring boot의 경우 filterRegistrationBean 메소드를 이용해서 추가 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
<code class="hljs typescript"><span class="hljs-meta">@Bean</span>
<span class="hljs-keyword">public</span> FilterRegistrationBean <span class="hljs-function"><span class="hljs-title">filterRegistrationBean</span>(<span class="hljs-params"></span>)</span> {
    FilterRegistrationBean filterRegistration = <span class="hljs-keyword">new</span> FilterRegistrationBean<>();
    filterRegistration.setFilter(<span class="hljs-keyword">new</span> XssEscapeServletFilter());
    filterRegistration.setOrder(<span class="hljs-number">1</span>);
    filterRegistration.addUrlPatterns(<span class="hljs-string">"/*"</span>);
    <span class="hljs-comment">//filterRegistration.setUrlPatterns(Arrays.asList("/*"));</span>
    <span class="hljs-keyword">return</span> filterRegistration;
}
</code>

해당 메소드의 위치는 @SpringBootApplication 클래스 하위에 위치해도 되고

1
2
3
4
5
6
7
8
9
10
11
12
13
<code class="hljs java"><span class="hljs-meta">@Configuration</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">XssConfig</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">WebMvcConfigurer</span> </span>{
    <span class="hljs-meta">@Bean</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> FilterRegistrationBean <span class="hljs-title">filterRegistrationBean</span><span class="hljs-params">()</span> </span>{
        FilterRegistrationBean filterRegistration = <span class="hljs-keyword">new</span> FilterRegistrationBean<>();
        filterRegistration.setFilter(<span class="hljs-keyword">new</span> XssEscapeServletFilter());
        filterRegistration.setOrder(<span class="hljs-number">1</span>);
        filterRegistration.addUrlPatterns(<span class="hljs-string">"/*"</span>);
        <span class="hljs-comment">//filterRegistration.setUrlPatterns(Arrays.asList("/board/*"));</span>
        <span class="hljs-keyword">return</span> filterRegistration;
    }
}
</code>

와 같이 추가 @Configuration 를 정의해서 추가 할 수 있습니다.

-- 설정 메소드 간단 설명

setOrder = 여러개의 필터가 사용되는 경우 필터 적용 순서를 정의 합니다.

addUrlPatterns = 필터가 적용될 url패턴을 하나식 추가 합니다.

setUrlPatterns = 필터가 적용될 url패턴을 여러건 한꺼번에 추가 합니다.

또한 자신이 만든 filter를 추가 하려는 경우 아래의 2가지 방법으로 추가 할 수 있습니다.

1) extends GenericFilterBean 후

@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {

를 오버라이드 해서 구현 할 수 있습니다.

(

해당 필터 클래스 상단에 @WebFilter(urlPatterns = "/*") 를 추가 해주고 @ServletComponentScan을 이용해서 filterRegistrationBean에서 선언하지 않고 필터 설정까지 한번에 추가 가능 합니다. @WebFilter 를 사용하는 경우 실행순서를 지정 하려면

1
2
3
4
5
<code class="hljs"><span class="hljs-variable">@WebFilter</span>(filterName=<span class="hljs-string">"filter1"</span>)
public class Filter1 implements Filter {}
<span class="hljs-variable">@WebFilter</span>(filterName=<span class="hljs-string">"filter2"</span>)
public class Filter2 implements Filter {}
</code>

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/url2/*</url-pattern>
</filter-mapping>

와 같이 web.xml 을 이용해줘야 합니다.

)

2) implements Filter 후

1
2
3
<code class="hljs java"><span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">doFilter</span><span class="hljs-params">(ServletRequest request, ServletResponse response, FilterChain chain)</span> <span class="hljs-keyword">throws</span> IOException, ServletException </span>{
</code>

를 오버라이드 해서 구현 할 수 있습니다.

반응형
Posted by 질주하는구
,