【问题标题】:Redirect correctly to a JSP inside WEB-INF正确重定向到 WEB-INF 内的 JSP
【发布时间】:2017-11-20 17:01:24
【问题描述】:

我对此感到困惑和困惑。我在 WEB-INF/pages/ 中有我所有的 .JSP 文件,并且想要访问它们。

我已经像这样在 /forward/* 上完成了 requestDispatcher

    @WebServlet("/forward/*")
public class ForwardController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/WEB-INF" + req.getPathInfo()).forward(req, resp);
    }
}

这很好用,我可以使用 /forward/pages/index.jsp 访问我的 JSP 文件,不过,我读过的内容应该是用户无法访问的,但现在它显然是。这是否以正确的方式完成?

另外,既然我们已经重定向到那个链接,http://localhost/forward/pages/index.jsp 想注销,我使用一个按钮来/注销,但现在之前的链接是这样的,http://localhost/forward/pages/logout

我该如何克服这两件事?

最好的问候

【问题讨论】:

  • WEB-INF 中的文件不可公开访问,但可以在内部访问,这就是 req.getRequestDispatcher("/WEB-INF" + req.getPathInfo()).forward(req, resp); 所做的。简而言之,它不会发送用户请求以访问/WEB-INF/... 下的新资源,但它在内部决定 current 请求的响应应由内部(不可公开访问的)JSP 脚本处理。据我所知,将代表视图层的 JSP 文件放在 WEB-INF 中以确保它们只能通过控制器访问是一种很好的做法。
  • 是的,你是对的,但是现在已经应用了,例如,当我使用表单时,它会自动使用前向链接,如 forward/pages/index.jsp,和当我使用

标签: java jsp tomcat


【解决方案1】:

如前所述,WEB-INF 中的 jsp 页面只能通过控制器访问,所以当您需要从另一个 jsp 访问任何 jsp 时,您需要通过控制器进行路由。如果你想访问jsp到jsp那么那些应该在WEB-INF之外

【讨论】:

  • 好的,我明白了,但是为什么我们要在 WEB-INF 中隐藏文件呢?有哪些信息是易受攻击的,让用户知道?如果我们使用转发,如果用户知道该 url 可以通过任何一种方式访问​​吗?是否也应该通过 url 重写来隐藏它?
  • 一般动态页面放在WEB-INF里面,静态页面可以放在WEB-INF外面。用户始终可以直接访问 WEB-INF 之外的页面
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多