[英]Modify Path Param of an HttpServletRequest
我有一個處理該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方法。
我認為有兩種解決方案:
更新:正如mohit所說,使用了帶有過濾器的HttpRequestWrapper
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
//create the MyCustomWrapperRequest object to wrap the HttpServletRequest
MyCustomWrapperRequest request = new MyCustomWrapperRequest((HttpServletRequest)servletRequest);
//continue on in the filter chain
filterChain.doFilter(request, servletResponse);
}
並在MyCustomWrapperRequest中重寫getParameter()函數
它是一回合,但是如果您還有HttpServletResponse對象,則可以將重定向請求發送到http:// IP:PORT / auth / myapp?Username = username URL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.