Java 将Http基本身份验证添加到servletRequest

Java 将Http基本身份验证添加到servletRequest,java,http,servlets,basic-authentication,request-headers,Java,Http,Servlets,Basic Authentication,Request Headers,我有一个ProxyServlet来处理从我的应用程序发送到另一台服务器(使用HTTP基本身份验证)的请求,我想在Servlet触发实际请求之前手动添加头,这样用户就不必输入任何凭据 我使用HttpServletRequestWrapper public class DataServlet extends ProxyServlet { @Override protected void service(HttpServletRequest servletRequest, HttpServle

我有一个
ProxyServlet
来处理从我的应用程序发送到另一台服务器(使用HTTP基本身份验证)的请求,我想在Servlet触发实际请求之前手动添加头,这样用户就不必输入任何凭据

我使用
HttpServletRequestWrapper

public class DataServlet extends ProxyServlet {
  @Override
  protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
        throws ServletException, IOException {

    final SystemCredentials credentials = new SystemCredentials("username", "password");

    HttpServletRequestWrapper wrap = new HttpServletRequestWrapper(servletRequest){

        @Override
        public String getHeader(String name) {              
            if (name.equals("Authorization")){
                String encoding = Base64.getEncoder().encodeToString((credentials.getUser().concat(":").concat(credentials.getPassword()).getBytes()));
                return "Basic " + encoding;
            } else
                return super.getHeader(name);
        }

    };

    super.service(wrap, servletResponse);

  }
}
它似乎不起作用,当我尝试访问它时,会显示一个弹出窗口并要求提供远程服务器的凭据

My web.xml包含

<servlet>
  <servlet-name>data</servlet-name>
  <servlet-class>foo.package.servlet.DataServlet</servlet-class>
  <init-param>
    <param-name>targetUri</param-name>
    <param-value>http://fooServer/DataServer</param-value>
  </init-param>
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>data</servlet-name>
  <url-pattern>/DataServer/*</url-pattern>
</servlet-mapping>

数据
foo.package.servlet.DataServlet
塔格图里
http://fooServer/DataServer
真的
数据
/数据服务器/*
有没有其他方法可以让这一切顺利进行


谢谢

解决方案是覆盖方法
getHeader(字符串名称)
getHeaders(字符串名称)
getHeaderNames()
,如下所示。这还取决于实现如何查找头。在本例中,
ProxyServlet
正在通过
枚举getHeaders(字符串名称)
进行查找

HttpServletRequestWrapper-wrap=新的HttpServletRequestWrapper(servletRequest){
@凌驾
公共字符串getHeader(字符串名称){
if(name.equals(HttpHeaders.AUTHORIZATION)){
字符串编码=Base64.getEncoder().encodeToString((credentials.getUser().concat(“:”).concat(credentials.getPassword()).getBytes());
返回“基本”+编码;
}
返回super.getHeader(name);
}
@凌驾
公共枚举getHeaders(字符串名称){
if(name.equals(HttpHeaders.AUTHORIZATION)){
List temp=new ArrayList();
字符串编码=Base64.getEncoder().encodeToString((credentials.getUser().concat(“:”).concat(credentials.getPassword()).getBytes());
临时添加(“基本”+编码);
返回集合。枚举(临时);
}
返回super.getHeaders(名称);
}
@凌驾
公共枚举getHeaderNames(){
//TODO自动生成的方法存根
List temp=Collections.List(super.getHeaderNames());
临时添加(HttpHeaders.AUTHORIZATION);
返回集合。枚举(临时);
}
};
HttpServletRequestWrapper wrap = new HttpServletRequestWrapper(servletRequest){


        @Override
        public String getHeader(String name) {

            if (name.equals(HttpHeaders.AUTHORIZATION)){
                String encoding = Base64.getEncoder().encodeToString((credentials.getUser().concat(":").concat(credentials.getPassword()).getBytes()));
                return "Basic " + encoding;
            }
            return super.getHeader(name);
        }

        @Override
        public Enumeration<String> getHeaders(String name) {
            if (name.equals(HttpHeaders.AUTHORIZATION)){
                List<String> temp = new ArrayList<>();
                String encoding = Base64.getEncoder().encodeToString((credentials.getUser().concat(":").concat(credentials.getPassword()).getBytes()));
                temp.add("Basic " + encoding);
                return Collections.enumeration(temp);
            }
            return super.getHeaders(name);
        }

        @Override
        public Enumeration<String> getHeaderNames() {
            // TODO Auto-generated method stub
            List<String> temp = Collections.list(super.getHeaderNames());
            temp.add(HttpHeaders.AUTHORIZATION);
            return Collections.enumeration(temp);

        }

    };