Я написал сервлет, где существует бизнес-логика. Я получу токен из вызывающей программы, которая вызывает мой метод веб-службы RESTful. С помощью этого токена мне нужно проверить, используя бизнес-логику, написанную в сервлете. Я также сопоставил фильтр, который устанавливает некоторые значения заголовка перед ударом сервлета.Как вызвать сервлет из метода веб-сервисов RESTful?
Теперь я хочу попасть в фильтр и сервлет из метода веб-службы RESTful. я могу получить ServletContext ниже.
@Context частный ServletContext servletContext;
Но как получить объекты HttpServletRequest, HttpServletResponse. Потому что, мне нужно setAttribute токен в HttpServletRequest.
Просьба предложить решение.
Заранее спасибо.
EDIT
Мне нужно установить маркер авторизации заголовка. Ниже приведен код. web.xml
<filter>
<filter-name>HeaderFilter</filter-name>
<filter-class>com.controller.HeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>/dummy</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Rest Web Service Class
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
@Path("/service")
public class Service {
@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);
request.getRequestDispatcher("/dummy").include(request, response);
}
return "<token>"+ "<value>"+value+" token value"+"</value>" + "</token>";
}
}
фильтр Класс
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest=(HttpServletRequest)request;
System.out.println("********Filter**********");
HttpServletResponse httpResponse=(HttpServletResponse)response;
if(request.getAttribute("param")!=null){
String token=request.getAttribute("param").toString();
System.out.println("Filter httpRequest: " + token);
Wrapper requestWrapper = new Wrapper(httpRequest);
requestWrapper.addHeader("Authorization", token);
chain.doFilter(requestWrapper, response);
}
}
Класс сервлета
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext ctx=getServletContext();
System.out.println("Inside Dummy Servlet");
System.out.println(request.getAttribute("param").toString());
System.out.println("Request Header: "+response.getHeader("Authorization").toString());
}
Теперь я могу попасть в фильтр, добавив ниже код в web.xml для фильтра.
<filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>/dummy</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
Но Валу, который устанавливается в фильтр для авторизации, равно нулю при вызове в сервлет. Мне нужно установить токен в заголовке авторизации в HeaderFilter
. Я застрял в этом.
Точно так же, как с 'ServletContext'. Используйте '@ Context'. –