我有一个处理该URL的方法:
http://IP:PORT/auth/myapp?Username=username
并且可以从远程访问。但是我无法更改使用我的应用程序的外部系统,它会在HTTP标头中发送用户名。我的意思是他们访问了该URL:
http://IP:PORT/auth/myapp
我认为我可以获得如下相关的HTTP标头:
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
if (headerName.equals("UNAME")) {
String username = request.getHeader(headerName);
}
}
我无法修改应用程序的整个部分,因此必须将该信息作为路径参数添加到现有请求中。我的意思是将该请求更改为:
http://IP:PORT/auth/myapp?Username=username
我怎样才能做到这一点?
PS:
这段代码可以解决我描述的问题吗?
if (request.getParameter("Username") == null) {
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
if (headerName.equals("UNAME")) {
String username = request.getHeader(headerName);
response.sendRedirect(request.getRequestURI() + "&Username="+username);
}
}
}
最佳答案
如果您正在应用程序其他部分中使用HttpServletRequest.getParameter('username')访问“用户名”查询参数,则可以尝试使用HttpServletRequestWrapper
class MyRequestWrapper extends HttpServletRequestWrapper{
public String getParameter(String name){
// if name equals username, call super.getHeader('username')
//else super.getParameter(name);
}
}
您可以扩展此类并重写getParameter()方法。在您的实现中,如果参数名称为username,则从标头获取值,否则调用super方法。