我正在编写一个servlet过滤器来根据特定条件转发Jersy请求。但他们似乎没有转发。
public class SampleFilter
extends GenericFilterBean
{
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException
{
String generateRedirectUrl=FormURL((HttpServletRequest)req);
RequestDispatcher dispatcher = req.getRequestDispatcher(generateRedirectUrl);
dispatcher.forward(req, resp);
}
private String FormURL(HttpServletRequest req)
{
// get the request check if it contains the customer
String reqUrl = req.getRequestURI();
log.info("Original Url is"+reqUrl);
if(reqUrl.contains("test"))
{
return "/api/abcd/" +"test";
}
return "Someurl";
}
}
我需要转发网址,如下所示。
Original: http://localhost/api/test/1234/true
New URL:http://localhost/api/abcd/1234/true
我做错了什么。
答案 0 :(得分:1)
"我做错了什么。"
一般来说,我认为这样可行 - 你可以从过滤器转发,但你的逻辑是错误的。
使用以下规则:
Original: http://localhost/api/test/1234/true
New URL:http://localhost/api/abcd/1234/true
代码:
if(reqUrl.contains("test"))
{
return "/api/abcd/" +"test";
}
会产生/api/abcd/test
,这不是您之后的目标。
我会做以下事情:
private String formURL(HttpServletRequest req) {
// get the request check if it contains the customer
String reqUrl = req.getRequestURI();
if (log.isInfoEnabled() {
log.info("Original Url is"+reqUrl);
}
if(reqUrl.contains("test")) {
return reqUrl.replace("test", "abcd");
}
return "Someurl";
此外,代码非常残酷。这也将改变URL
这可能不是你想要的。您可能需要进行更聪明的字符串操作或转换为类似URI
类的内容,以便更准确地定位路径。
希望这有帮助,
威尔