例如:我的网络应用程序中有两个文件:1] index.html 2] some.html(或jsp)
从浏览器中只能访问index.html,
所以如果我调用localhost:8080 / index.html,它应该返回实际页面,并且在加载时如果我指向(重定向)到some.html那么some.html页面应该显示,
如果我直接调用localhost:8080 / some.html,它应该抛出一个页面无法直接访问的错误,如果我在tomcat服务器中托管webapp,有没有办法实现这个目的?
答案 0 :(得分:3)
一个常见的解决方案是将它们移到WEB-INF目录下。从这里开始,它们不可公开访问,但您可以将Servlet或其他控制器转发给他们
https://docs.oracle.com/cd/E21764_01/web.1111/e13712/configurewebapp.htm#WBAPP158
WEB-INF目录不是公共文档树的一部分 应用。不能提供WEB-INF目录中包含的文件 由容器直接发送给客户端。 然而,内容 WEB-INF目录使用getResource对servlet代码可见 和ServletContext上的getResourceAsStream()方法调用 包含/转发使用RequestDispatcher 。
另一种方法是将它们放在WEB-INF之外,并在web.xml中配置安全约束。对于eaxmple,如果你在{webapp-root} / pages:
中有它们<security-constraint>
<web-resource-collection>
<web-resource-name>JSP Files</web-resource-name>
<description>No direct access to JSP files</description>
<url-pattern>/pages/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description>No direct browser access to JSP files</description>
<role-name>NobodyHasThisRole</role-name>
</auth-constraint>
</security-constraint>
答案 1 :(得分:1)
使用Filters
并拒绝访问jsp's
。
public class FilterMyJsp implements Filter{
public void doFilter(ServletRequest request, ServletReponse response,
FilterChain chain) {
HttpServletRequest req= (HttpServletRequest) request;
req.getRequestDispather("HandleError.jsp").forward(request,response);
}
}
的Web.xml
<filter>
<filter-name>FilterMyJsp</filter-name>
<filter-class>my.FilterMyJsp</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterMyJsp</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
网址格式 *
会将此过滤器应用于每个jsp&#39。您可以使用相应的错误消息设计HandleError.jsp
,当用户尝试访问其他页面时,将显示该错误消息。