我寫了一個業務邏輯存在的servlet。我將從調用我的RESTful Web服務方法的調用程序中獲取一個令牌。有了這個令牌,我需要使用serlvet中編寫的業務邏輯進行驗證。我還映射了一個Filter,它在點擊servlet之前設置了一些頭值。如何從REST風格的Web服務方法調用servlet?
現在我想從REST風格的Web服務方法中選擇過濾器和servlet。我能夠以下面的方式獲得ServletContext。
@Context private ServletContext servletContext;
但是如何獲取HttpServletRequest,HttpServletResponse對象。因爲,我需要在HttpServletRequest中設置屬性標記。
請提出解決方案。
在此先感謝。
編輯
我需要設置令牌認證頭。以下是代碼。 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服務類
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);
}
}
Servlet類
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>
但它在過濾器設置授權VALU中的servlet調用時爲空。我需要在授權標題中設置令牌HeaderFilter
。我堅持這樣做。
與'ServletContext'一樣。使用'@ Context'。 –