从REST Webservice调用Servlet之前的过滤器 [英] Calling a Filter before a Servlet from REST Webservice

查看:88
本文介绍了从REST Webservice调用Servlet之前的过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个REST Web服务方法 setToken(@Context HttpServletRequest请求,@ ContextHttpServletResponse响应,@ PathParam(token)字符串标记) HeaderFilter SampleServlet 。以下是Web服务类
` @ Path(/ service)
公共类服务{

I have written a REST web service method setToken(@Context HttpServletRequest request, @Context HttpServletResponse response, @PathParam("token") String token), HeaderFilter and SampleServlet. Below is the web service class `@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 Web服务方法调用 SampleServlet 使用 request.getRequestDispatcher(/ secure ).include(请求,响应); 和使用的URL是 HTTP://本地主机:8080 / XXXX / XXXX /服务/ VAL / ZZZZ 。 zzzz是要传递的值。 HeaderFilter SampleServlet 的URL模式是/ secure。现在问题是没有调用HeaderFilter 并且直接调用'SampleServlet'。我做错什么????请帮助我解决这个问题。

From the setToken web service method am calling SampleServlet using request.getRequestDispatcher("/secure").include(request, response); and the URL am using is http://localhost:8080/xxxx/xxxx/service/val/zzzz. zzzz is the value to be passed. The URL pattern for HeaderFilter and SampleServlet is /secure. Now the problem is HeaderFilter is not being called and directly 'SampleServlet' is called. Am I doing anything wrong???? Kindly help me get through this.

推荐答案


HeaderFilter和SampleServlet的URL模式是/ secure。现在的问题是没有调用HeaderFilter并直接调用'SampleServlet'。

The URL pattern for HeaderFilter and SampleServlet is /secure. Now the problem is HeaderFilter is not being called and directly 'SampleServlet' is called.

默认情况下,仅对源自Web的请求调用过滤器。内部包含和转发不会调用它们。要更改默认行为并调用过滤器,您必须在web.xml的filter-mapping元素中指定

By default Filters are invoked only for requests originating from the web. They are not invoked for internal 'includes' and 'forwards'. To change the default behaviour and have the filter invoked, you will have to specify that in your filter-mapping element of 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>

这篇关于从REST Webservice调用Servlet之前的过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆