Вызов фильтра перед сервлетом из веб-службы REST

Я написал метод веб-службы REST setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token), HeaderFilter и SampleServlet. Ниже приведен класс веб-службы `@Path("/service") public class Service {

/*@Context 
private ServletContext servletContext; 

@Context
private HttpServletRequest request;

@Context
private HttpServletResponse response;*/


@Path("/val/{token}")   
@GET
@Produces("application/xml")
public String setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token) throws ServletException, IOException {
    String value=token;
    if(request==null){
        System.out.println("Request null");
    }
    System.out.println("Token: " + value);
    if(request!=null){
        request.setAttribute("param", value);
        Wrapper requestWrapper = new Wrapper(request);
        requestWrapper.addHeader("Authorization", token);
        request.getRequestDispatcher("/secure").include(requestWrapper, response);
    }
    return "<token>"+ "<value>"+value+" token value"+"</value>" + "</token>";
}

}`

Из метода веб-службы setToken я вызываю SampleServlet, используя request.getRequestDispatcher("/secure").include(request, response);, и URL-адрес, который я использую: http://localhost:8080/xxxx/xxxx/service/val/zzzz. zzzz — значение, которое необходимо передать. Шаблон URL для HeaderFilter и SampleServlet — /secure. Теперь проблема в том, что HeaderFilter не вызывается, а вызывается непосредственно «SampleServlet». Я что-то не так делаю???? Пожалуйста, помогите мне пройти через это.


person Kaushi    schedule 28.09.2015    source источник
comment
Вы можете поделиться своим web.xml   -  person Saurabh Jhunjhunwala    schedule 28.09.2015


Ответы (1)


Шаблон URL для HeaderFilter и SampleServlet — /secure. Теперь проблема в том, что HeaderFilter не вызывается, а вызывается напрямую «SampleServlet».

По умолчанию фильтры вызываются только для запросов, исходящих из Интернета. Они не вызываются для внутренних «включений» и «пересылок». Чтобы изменить поведение по умолчанию и вызвать фильтр, вам нужно будет указать это в элементе отображения фильтра в web.xml.

<filter-mapping>
   <filter-name>myfilter</filter-name>
   <url-pattern>/secure</url-pattern>
   <dispatcher>FORWARD</dispatcher>
   <dispatcher>INCLUDE</dispatcher>
   <dispatcher>REQUEST</dispatcher>
</filter-mapping>
person ramp    schedule 28.09.2015