2015-09-28 4 views
0

Я написал метод веб-службы REST setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token), HeaderFilter и SampleServlet. Ниже класс веб-службы `@Path ("/ сервис") Класс обслуживания общественного {Вызов фильтра перед сервлетом из REST Webservice

/*@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». Я что-то делаю неправильно? Пожалуйста, помогите мне пройти через это.

+1

вы можете поделиться своим web.xml –

ответ

6

Шаблон URL для HeaderFilter и SampleServlet является/безопасным. Теперь проблема заключается в том, что 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>