在过滤器中设置授权标头

时间:2015-09-28 09:28:22

标签: java web-services rest servlets servlet-filters

RESTful Web服务的新手。我有了新的要求。就像,我需要创建一个新的RESTful Web服务,我的服务将接受来自调用程序的令牌。此令牌需要设置为Authorization Header并命中客户端给出的JAR中的过滤器。我创建了一个RESTFul Web服务,它接受来自调用程序的令牌。现在我该如何将此令牌设置为Authorization Header。请帮助我。

3 个答案:

答案 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");