gpt4 book ai didi

java - 修改 HttpServletRequest 的路径参数

转载 作者:行者123 更新时间:2023-12-01 11:02:19 32 4
gpt4 key购买 nike

我有一个处理该 URL 的方法:

http://IP:PORT/auth/myapp?Username=username

并且可以远程访问。但是,我无法更改使用我的应用程序的外部系统,并且它在 HTTP header 中发送用户名。我的意思是他们访问该 URL:

http://IP:PORT/auth/myapp

我认为我可以按如下方式获取相关的HTTP header :

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') 访问“username”查询参数,则可以尝试使用 HttpServletRequestWrapper

class MyRequestWrapper extends HttpServletRequestWrapper{

public String getParameter(String name){
// if name equals username, call super.getHeader('username')
//else super.getParameter(name);
}
}

您可以扩展此类并重写 getParameter() 方法。在您的实现中,如果参数名称是用户名,则从 header 获取值,否则调用 super 方法。

关于java - 修改 HttpServletRequest 的路径参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239225/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com