2012-10-15 3 views
2

특정 매개 변수로 요청을 필터링하려면 어떻게합니까? "csrf-token"매개 변수 이름과 함께 필터 전용 요청. 필터는 요청에 필수 매개 변수 이름이 있는지 먼저 확인하고 을 필수 매개 변수없이 무시합니다. pb2q에 의해 주어진특정 매개 변수 이름을 사용하여 후속 메소드 요청 만 필터링하십시오.

<filter> 
    <filter-name>CSRFTest</filter-name> 
    <filter-class>org.example.CSRFFilter</filter-class> 
    <init-param> 
     <param-name>csrf_token</param-name> 
     <param-value>csrf</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CSRFTest</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>CrossSiteScriptStripper</filter-name> 
    <filter-class>CrossSiteScriptStripperFilter</filter-class> 
</filter> 

<!-- Apply the CrossSiteScriptStripper filter to all servlets and JSP pages. --> 
<filter-mapping> 
    <filter-name>CrossSiteScriptStripper</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

대답은하지만 난 내 테스트 프로젝트에 노력하고 있습니다 : I 설정 내 의 web.xml 파일하지만 문제는 모든 요청 필터링되어 얼마나 아래

입니다 내 실제 프로젝트에 삽입 할 때 오류가 발생합니다. 2 필터를 사용할 수 있는지 묻고 싶습니다. (HTTPServlet을 위해, 또는 doGet, doPost)이 정규 서블릿의 service 방법과 유사하다 :

+0

한 가지 방법이 내부에있을 수 있습니다. 필터 클래스는 if/else를 수행하여 필터 체인의 모든 요청을 생략합니다. – kosa

+0

@Jhays 필요한만큼 많은 필터를 연결할 수 있지만 실제 프로젝트에서 어떤 오류가 발생합니까? – pb2q

답변

3

귀하의 Filter 클래스는 doFilter 방법에 ServletRequest을 받게됩니다. 당신의 doFilter 방법에서

ServletRequest.getParameter을 사용하여 필요한 매개 변수에 대한 요청을 확인 : 매개 변수 가 존재하지 않는 경우, 방법은 null를 반환합니다.

매개 변수가 존재하지 않으면 요청을 차단하십시오. FilterChain.doFilter을 사용하여 필터 체인으로 다시 전달하지 마십시오.

의사 코드 : 나는 당신이 당신의 config 파일에서 PARAMS로 할 것으로 예상하는지 모르겠지만,

public void doFilter(ServletRequest req, ServletResponse resp, 
        FilterChain chain) 
{ 
    // ... 

    if (req.getParameter(MY_PARAMNAME) != null) 
     chain.doFilter(req, resp); 
    // otherwise don't call doFilter 

    // ... 
} 

당신은 지정하려면 HTTP 쿼리 매개 변수는 요청이 필요합니다 당신의 init 방법 그리고

<param-name>required_parameter_name</param-name> 
<param-value>csrf-token</param-value> 

: :이 설정/코드 콤보를 사용할 수 있습니다

public void init(FilterConfig filterConfig) 
{ 
    // ... 

    // use this value in your doFilter method, in place of MY_PARAMNAME, above 
    this.requiredParameterName = 
     filterConfig.getInitParameter("required_parameter_name"); 
} 
+0

고마워요. pb2q. 이제 정상적으로 작동합니다. 성공적으로 필터링 된 방문 페이지와 잘못된 요청에 대한 경고를 추가해야합니다. – Jhays