我已经编写了REST Web服务方法setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token),HeaderFilter并且SampleServlet。以下是Web服务类`@Path(“ / service”)公共类Service {
setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token)
HeaderFilter
SampleServlet
/*@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>"; }
}`
在setTokenWeb服务方法中,正在SampleServlet使用调用request.getRequestDispatcher("/secure").include(request, response);,而正在使用的URL是http:// localhost:8080 / xxxx / xxxx / service / val / zzzz。zzzz是要传递的值。URL模式的HeaderFilter和SampleServlet是/安全。现在,问题HeaderFilter没有被调用,而直接调用了“ SampleServlet”。我做错什么了吗???请帮助我解决这个问题。
setToken
request.getRequestDispatcher("/secure").include(request, response);
HeaderFilter和SampleServlet的URL模式为/ secure。现在的问题是没有调用HeaderFilter,而是直接调用了“ SampleServlet”。
默认情况下,仅针对来自网络的请求调用过滤器。不会为内部“包含”和“转发”调用它们。要更改默认行为并调用过滤器,您必须在web.xml的filter- mapping元素中进行指定
<filter-mapping> <filter-name>myfilter</filter-name> <url-pattern>/secure</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping>