RESTful Web服务的新手。我有了新的要求。就像,我需要创建一个新的RESTful Web服务,我的服务将接受来自调用程序的令牌。此令牌需要设置为Authorization Header并命中客户端给出的JAR中的过滤器。我创建了一个RESTFul Web服务,它接受来自调用程序的令牌。现在我该如何将此令牌设置为Authorization Header。请帮助我。
答案 0 :(得分:2)
在普通Java中,您可以这样设置授权标题客户端:
String url = "test.com";
URL urlObj = new URL(url);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
con.setRequestProperty("Authorization", "You Token");
修改强> 只是为了确保我不会错过op的主题。 如果要为授权创建令牌,则必须在用户登录到您的站点后将此令牌传递给用户。在用户客户端发现令牌之后,客户端必须在每次请求时发送此令牌(请确保您使用ssl进行传输)
Serverside代码应如下所示:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException {
String auth = req.getHeader("Authorization");
//validate Token
}
答案 1 :(得分:1)
此问题的背景是否与您的这篇文章相同 - 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);
答案 2 :(得分:0)
也许您可以这样:
request.setAttribute("yourNameToken", yourToken);
然后您可以在此脚本中使用令牌:
String tk = (String) request.getAttribute("yourNameToken");