是RESTful Web服务的新手。我有一个新的要求。就像这样,我需要创建一个新的RESTful Web服务,我的服务将在其中接受来自调用程序的令牌。该令牌需要设置为Authorization Header并点击客户端给定的JAR中的过滤器。我创建了一个RESTFul Web服务,它在其中接受来自调用程序的令牌。现在我如何将此令牌设置为“授权标题”。请帮助我。
此问题的上下文与您的帖子中的相同-Calling a Filter before a Servlet from REST Webservice
然后总结一下,您有一个Restful服务,接受令牌作为标头。您从提供某些功能的服务中调用过滤器,是否需要将令牌作为请求标头传递给过滤器?
要实现这一点,您需要创建一个HttpServletRequestWrapper并将其传递给过滤器。您将重写getHeader(String name)方法,然后
public class CustomHttpServletRequestWrapper implements HttpServletRequest{
public CustomHttpServletRequestWrapper(HttpServletRequest request){
super(request);
}
public String getHeader(String name){
if(name.equals("AUTH-HEADER"){
//get the original request
HttpServletRequest request = (HttpServletRequest)getRequest();
//now get it from the original request and return
}else{
return request.getHeader(name);
}
}
// TODO override getHeaderNames()
}
然后在调用过滤器时通过此操作。
CustomHttpServletRequestWrapper requestWrapper = new CustomHttpServletRequestWrapper(request);
request.getRequestDispatcher("/secure").include(requestWrapper, response);
在纯Java中,您可以通过以下方式设置授权标头客户端:
String url = "test.com";
URL urlObj = new URL(url);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
con.setRequestProperty("Authorization", "You Token");
编辑只是为了确保我不会错过op的主题。如果要创建用于授权的令牌,则必须在用户登录到您的站点后将此令牌传递给用户。用户客户端重新获得令牌后,客户端必须在每次请求时都发送此令牌(请确保您使用ssl进行传输)
服务器端代码应该看起来像这样:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException {
String auth = req.getHeader("Authorization");
//validate Token
}
也许您可以这样做:
request.setAttribute("yourNameToken", yourToken);
然后您可以在此脚本中使用令牌:
String tk = (String) request.getAttribute("yourNameToken");