2015-09-25 1 views
-1

Я написал сервлет, где существует бизнес-логика. Я получу токен из вызывающей программы, которая вызывает мой метод веб-службы 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. Я застрял в этом.

+0

Точно так же, как с 'ServletContext'. Используйте '@ Context'. –

ответ

1

Вы используете JAX-RS и нужно сделать Controler с @Context аннотацию:

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.Context; 


@Path("helloword") 
public class SampleControler { 

    @GET 
    public String doGetAsHtml(@Context HttpServletRequest req, @Context HttpServletResponse response) { 
     req.setAttribute("my attr", "my object"); 
     ..... 
     return ...; 
    } 
} 

Это должно работать.

+0

спасибо за ответ. Я действительно новичок в RESTful Web Services. Как использовать этот класс 'SampleControler' в моем методе веб-службы. Можете ли вы показать мне пример? – Kaushi

+0

Взгляните на эту страницу, ее хорошая стартовая точка: mkyong.com/webservices/jax-rs/jax-rs-path-uri-matching-example На самом деле спецификация JAX_RS определяет, что путь отображения uri является URL-адресом вашего server (hhtp: IIhost: port/contextApp) + путь, заданный аннотацией пути. В пример я даю вам можно локально называть localhost: 8080/appContext/helloword –

+0

@Sotirios Спасибо за правильный мой пост. –

Смежные вопросы