2013-11-25 2 views
1

У меня есть фильтр сервлетов.Реакция изменения фильтра сервлета?

public class MyFilter extends BaseServletRequestFilter { 

     @Override 
    protected void afterExecutingFilterChain(final ServletRequest requset, FilterResponseWrapper response) throws ServletException { 

//To do 
    } 

     @Override 
    protected void beforeExecutingFilterChain(final ServletRequest requset, final FilterResponseWrapper response) throws ServletException{ 

    //Here request needs to be intercepted 
    //To do 
} 


} 

У меня есть фильтр фильтрации. Мое требование - мне нужно перехватить запрос. Мне нужно проверить некоторое логическое значение в запросе. Если логическая переменная истинна, обработка запроса должна быть продолжена. Если логический variale является ложным, запрос не должен продолжаться, и мне нужно отправить какой-то пользовательский ответ, как показано ниже.

public enum CustomStatus { 


    OK("Ok"), 

    BAD_REQUEST("BadRequest"); 

    private final String value; 

    CustomStatus(String v) { 
     value = v; 
    } 

    public String value() { 
     return value; 
    } 

    public static CustomStatus fromValue(String v) { 
     for (CustomStatus c: CustomStatus.values()) { 
      if (c.value.equals(v)) { 
       return c; 
      } 
     } 
     throw new IllegalArgumentException(v); 
    } 

} 

Если значение запроса булевой переменной является ложным, то я должен установить над хСтатус в ответ и вернуться без обработки запроса. Как я могу это сделать?

Спасибо!

ответ

0

Используйте интерфейс фильтра:

public final class XssFilter implements Filter { 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws IOException, ServletException 
{ 
    //check request... 
    if (ok) { 
     chain.doFilter(request, response); 
    } else { 
     // do something with the response 
    } 
} 

не может быть более конкретным, что это, потому что вы не скажем точно, где логическое значение, которое вы проверяете, является (параметр, или часть URL-адреса, или файл cookie, или заголовок?), и вы не говорите точно, что вы хотите сделать с ответом.

+0

Спасибо за ваш ответ. Могу ли я отправить свой CustomStatus в качестве ответа? – user755806

+0

Не напрямую. Ответ будет HttpServletResponse, который содержит всю информацию, возвращенную в браузер. Вы можете сериализовать CustomStatus в ответ, используя ObjectOutputStream с HttpServletResponse.getOutputStream(), но это довольно продвинуто. Легче просто установить статус, например. response.setStatus (403). Вы также можете установить некоторый текст в заголовках (response.setHeader (имя, значение)). – NickJ

2

Если вы создаете Filter путем расширения Filter, вы можете сделать:

public void doFilter(ServletRequest request, 
     ServletResponse response, 
     FilterChain chain) 
     if(your status is ok) { 
      chain.doFilter(request, response); 
     } else { 
      ((HttpServletResponse) response).sendError(the error code, 
           "the error message");       
     } 
} 
+0

Спасибо за Ваш ответ. Я не хочу отправлять какие-либо ошибки. могу ли я отправить пользовательский ответ в качестве моего пользовательского статуса? Благодаря! – user755806

+0

Вы можете использовать setStatus (INT) 'метод' 'на HttpServletResponse' –

+0

есть в любом случае, чтобы отправить мой CustomStatus? Благодаря! – user755806

Смежные вопросы