spring error-page和web.xml的问题

时间:2017-04-07 09:19:08

标签: java xml spring

这是我的web.xml:

<error-page>
    <error-code>404</error-code>
    <location>/error/404</location>
</error-page>

以下是我的Controller类:

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;


@RequestMapping(value = "/error")
@Controller
public class ErrorController {

@RequestMapping(value = {"/307", "/400", "/401", "/403", "/404", "/405", "500", "503"})
public ModelAndView error(HttpServletRequest request) throws Exception {
    String path = request.getServletPath().replace("/error/", "");
    return new ModelAndView("redirect:/error/view/"+path);
}

如果我这样请求错误网址

http://localhost:8080/erro/

它显示404错误页面,但它更改了网址

http://localhost:8080/error/view/404

如果请求了无效的网址,则会显示错误页面,但旧网址已更改。我需要修复哪些旧网址不会更改,只显示错误页面?

谢谢:)

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用forward:代替redirect:

Redirect正在通过向浏览器发送Location标头来处理客户端,这就是网址发生变化的原因。

Forward正在服务器端,选择将作为对浏览器的响应发送的文件。

要非常小心前进,因为如果您将其与用户控制的输入一起使用,可能会导致安全问题。在这种情况下,攻击者将能够to download any file from your WAR(这取决于您的配置,但在某些极端情况下,他甚至可以下载已编译的java类)。

答案 1 :(得分:1)

删除“重定向:”。这将避免重定向,并且网址不会更改。

@RequestMapping(value = {"/307", "/400", "/401", "/403", "/404", "/405", "500", "503"})
public ModelAndView error(HttpServletRequest request) throws Exception {
   String path = request.getServletPath().replace("/error/", "");
   return new ModelAndView("/error/view/"+path);

}