在过滤器中设置授权标题

问题描述 投票:0回答:3

是RESTful Web服务的新手。我有一个新的要求。就像这样,我需要创建一个新的RESTful Web服务,我的服务将在其中接受来自调用程序的令牌。该令牌需要设置为Authorization Header并点击客户端给定的JAR中的过滤器。我创建了一个RESTFul Web服务,它在其中接受来自调用程序的令牌。现在我如何将此令牌设置为“授权标题”。请帮助我。

java web-services rest servlets servlet-filters
3个回答
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
投票

在纯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
}

0
投票

也许您可以这样做:

request.setAttribute("yourNameToken", yourToken);

然后您可以在此脚本中使用令牌:

String tk = (String) request.getAttribute("yourNameToken");
© www.soinside.com 2019 - 2024. All rights reserved.