小编典典

从REST Web服务的Servlet之前调用过滤器

java

我已经编写了REST Web服务方法setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token)HeaderFilter并且SampleServlet。以下是Web服务类`@Path(“ /
service”)公共类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>";
}

}`

setTokenWeb服务方法中,正在SampleServlet使用调用request.getRequestDispatcher("/secure").include(request, response);,而正在使用的URL是http:// localhost:8080 / xxxx / xxxx / service / val /
zzzz
。zzzz是要传递的值。URL模式的HeaderFilterSampleServlet是/安全。现在,问题HeaderFilter没有被调用,而直接调用了“
SampleServlet”。我做错什么了吗???请帮助我解决这个问题。


阅读 199

收藏
2020-11-23

共1个答案

小编典典

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>
2020-11-23