有没有办法在不重建的情况下在过滤器中获取带有参数的原始请求 URL
Is there a way to get the original request URL with params in a Filter without Rebuilding
我在 Java EE 项目中有一个 servlet 过滤器,需要获取原始请求 url 和 URL 参数。我目前正在使用以下代码重建原始 URL,但这感觉完全错误:
StringBuilder urlBuilder = new StringBuilder(req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath());
if(req.getParameterMap() != null && req.getParameterMap().size() > 0) urlBuilder.append("?"+getParameterString(req.getParameterMap()));
private StringBuilder getParameterString(Map<String, String[]> params){
StringBuilder sb = new StringBuilder("");
for(String key : params.keySet()){
for(String param : params.get(key)){
sb.append(String.format("%s=%s&", key, param));
}
}
return sb;
}
我真正想做的是更像下面这样的事情:
req.getUrlWithParams()
这似乎更好,因为我有效地撤销了 servlet 容器解析参数的操作,而我真正想要做的就是接收未解析的原始 URL。
如果你的请求对象是HttpServletRequest的一个实例,你可以这样做。
if (req instanceof HttpServletRequest) {
HttpServletRequest httpReq = (HttpServletRequest) req;
StringBuffer url = httpReq.getRequestURL();
if (httpReq.getQueryString() != null) {
url.append("?");
url.append(httpReq.getQueryString());
}
String urlString = url.toString();
}
我在 Java EE 项目中有一个 servlet 过滤器,需要获取原始请求 url 和 URL 参数。我目前正在使用以下代码重建原始 URL,但这感觉完全错误:
StringBuilder urlBuilder = new StringBuilder(req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath());
if(req.getParameterMap() != null && req.getParameterMap().size() > 0) urlBuilder.append("?"+getParameterString(req.getParameterMap()));
private StringBuilder getParameterString(Map<String, String[]> params){
StringBuilder sb = new StringBuilder("");
for(String key : params.keySet()){
for(String param : params.get(key)){
sb.append(String.format("%s=%s&", key, param));
}
}
return sb;
}
我真正想做的是更像下面这样的事情:
req.getUrlWithParams()
这似乎更好,因为我有效地撤销了 servlet 容器解析参数的操作,而我真正想要做的就是接收未解析的原始 URL。
如果你的请求对象是HttpServletRequest的一个实例,你可以这样做。
if (req instanceof HttpServletRequest) {
HttpServletRequest httpReq = (HttpServletRequest) req;
StringBuffer url = httpReq.getRequestURL();
if (httpReq.getQueryString() != null) {
url.append("?");
url.append(httpReq.getQueryString());
}
String urlString = url.toString();
}