将请求转发到非@RequestMapping的方法

4

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

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

例如,如果用户请求/image.jpg,我将其重定向到控制器,该控制器将回答图像,映射到/img/image.jpg。重点是不能通过浏览器直接访问/img/image.jpg

有可能吗?我该如何实现这个必要性?


这是Spring MVC视图解析器的基本思想。 - Dhruvenkumar Shah
谢谢。但我不想将其重定向到文件本身。我需要将请求重定向到另一个控制器方法,该方法具有业务逻辑并解析视图。我有没有理解错您的意思? - Caio Cunha
1个回答

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在您的情况下也非常有用。


谢谢。这确实会成为一个安全层。但是出于架构原因,我不想防止直接访问,而不是出于安全原因。我仍在寻找一种方法来对非公共控制器进行内部重定向。 - Caio Cunha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接