从REST Webservice调用Servlet之前的过滤器 [英] Calling a Filter before a Servlet from REST Webservice
问题描述
我编写了一个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屋!