【问题标题】:Calling a Filter before a Servlet from REST Webservice在 REST Web 服务的 Servlet 之前调用过滤器
【发布时间】:2015-12-25 07:29:28
【问题描述】:

我写了一个 REST Web 服务方法setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token)HeaderFilterSampleServlet。下面是网络服务类 `@Path("/服务") 公共类服务{

/*@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 Web 服务方法,我使用request.getRequestDispatcher("/secure").include(request, response); 调用SampleServlet,并且我使用的URL 是http://localhost:8080/xxxx/xxxx/service/val/zzzz。 zzzz 是要传递的值。 HeaderFilterSampleServlet 的 URL 模式是 /secure。现在的问题是 HeaderFilter 没有被调用,而是直接调用了“SampleServlet”。我做错什么了吗???请帮我解决这个问题。

【问题讨论】:

  • 你能分享你的web.xml吗

标签: java web-services rest servlets servlet-filters


【解决方案1】:

HeaderFilter 和 SampleServlet 的 URL 模式是 /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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2017-08-28
    • 2015-04-25
    • 2018-08-10
    • 2019-05-09
    相关资源
    最近更新 更多