[英]Issue with spring error-page and web.xml
这是我的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
如果请求的URL无效,则会显示错误页面,但旧的url已更改。 我需要修复什么,以使旧的URL保持不变,而仅显示错误页面?
谢谢 :)
在这种情况下,您需要使用forward:
而不是redirect:
通过将Location
标头发送到浏览器, 重定向在客户端上起作用,这就是URL更改的原因。
转发通过选择将作为响应发送到浏览器的文件在服务器端进行。
但是,请务必谨慎处理forward ,因为如果将其与用户控制的输入一起使用,可能会导致安全问题。 在这种情况下,攻击者将能够从WAR下载任何文件 (这取决于您的配置,但在某些极端情况下,他将能够下载甚至编译的Java类)。
删除“重定向:”。 这样可以避免重定向,并且网址不会更改。
@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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.