转发请求到非@RequestMapping

时间:2012-08-30 13:11:42

标签: java spring spring-mvc forwarding

是否可以使用forward:/语法将请求重定向到非@RequestMapping带注释的方法。

我想要实现的是一种将请求内部重定向到无法直接从浏览器访问的路径的方法。

例如,如果用户请求/image.jpg,我想将其重定向到将回答图像的控制器,映射到/img/image.jpg。关键是无法通过浏览器直接访问/img/image.jpg

有可能吗?我怎么能达到这个必要性呢?

1 个答案:

答案 0 :(得分:1)

我认为如果要使用forward:/来调用资源,则需要创建请求映射路径。但是你可以通过以下方式实现这一目标:

创建最终用户直接浏览器调用无法访问的请求映射路径。在转发路径请求之前,先添加一些额外的请求参数,然后按请求映射器进行检查。

示例:

@RequestMapping(value = "/direct/browser/call")
public String connections(WebRequest request) throws SQLException {
    //validate request
    request.setAttribute("formButton", isPost, WebRequest.SCOPE_REQUEST);
    return "redirect:/some/value";
}

@RequestMapping(value = "/some/value")
public String connections(WebRequest request) throws SQLException {
    //validate request
    if(request.getParameter("formButton")!=null) { return "/homepage"; }
    // else : do processing
}

您还可以在请求映射中限制浏览器HTTP GET调用。例如:

@RequestMapping(value = "/some/value", method = RequestMethod.POST)

HTTP方法:HEAD,PUT,DELETE,TRACE和OPTIONS在您的情况下也很有用。