我有一个使用java技术的MVC网站。我有一些.jsp,当通过适当的servlet路由到正常工作,但直接访问似乎不起作用。我想阻止我的用户直接寻址.jsps。
即他们可以使用www.url.com/Website/MyServlet
,然后将其转发至www.url.com/Website/MyServlet.jsp
,但我希望阻止他们直接发送到www.url.com/Website/MyServlet.jsp
,因为HttpServletRequest
将是缺少属性,无法正确显示。当然这必须是常见的做法?我如何帮助这个,我可以编写一个映射,将所有* .jsp重定向到未找到的,除非它是一个转发器吗?
我打赌我可以编写一个过滤器来获取映射到* .jsp的所有非FORWARD指令(INCLUDE REQUEST等)并为它们发送404但是我认为必须有一个更有效的方法吗?有人有什么建议吗?
答案 0 :(得分:6)
将它们放在/WEB-INF
文件夹中,并相应地更改前向路径。
request.getRequestDispatcher("/WEB-INF/MyServlet.jsp").forward(request, response);
/WEB-INF
(和/META-INF
)文件夹中的文件无法公开访问。
答案 1 :(得分:2)
默认情况下,Web容器不允许直接访问WEB-INF
文件夹下的资源。你可以将jsp放在WEB-INF
文件夹中。
然后,您可以将include/forward
的过滤器写入jsp
答案 2 :(得分:0)
将代码放入JSP中,检测是否满足必要条件并采取适当的操作,例如转发到控制器servlet或将用户定向到适当的位置,并且在必要条件下不尝试呈现“正确的”JSP不满足。