这是我的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
如果请求了无效的网址,则会显示错误页面,但旧网址已更改。我需要修复哪些旧网址不会更改,只显示错误页面?
谢谢:)
答案 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);
}