gpt4 book ai didi

web-applications - 瓦丁 : Disable listing of images folder in Vaadin V14 webapp

转载 作者:行者123 更新时间:2023-12-04 14:58:25 24 4
gpt4 key购买 nike

我已经重建了 vaadin webapp 并删除了所有 Spring 功能。我的 webapp 现在是非基于 spring 的应用程序的 GreetService 入门下载。

该应用程序在 tomcat 9.0 应用程序服务器上运行,在 TOMCAT_HOME/conf/web.xml 中为目录列表配置以下内容。

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

应用程序中没有其他 web.xml。

我在我的 maven 项目的 src/main/webapp 文件夹中创建了一个图像、图标和测试文件夹。应用程序目录布局如下。 Project Folder layout

我按照 Alejandro 的建议在其中两个文件夹中包含了一个空的 index.html,并在另一个文件夹中放入了一个简单的文本文件。

我使用生产配置文件将应用程序构建到 WAR 文件中。

tomcat 上部署的 webapp 文件夹如下所示。 webapp as it is deployed

所有这些看起来都很好,我的应用程序与以下 URL 完美配合。

Working Application

但是,如果我浏览到图像文件夹或图标文件夹,我会得到一个内容列表。

directory listing of images folder

我想停止在该级别列出任何文件夹。我构建了默认的应用程序启动器并部署了它,我得到了上述行为。

然后我尝试引入以下带有@WebInitParam 的@WebServlet 注释,以将此webapp 的列表设置为false。这也没有效果。

这是我在 AgentServlet 类的服务方法中记录的输出。

18-12:32:33.620 [https-jsse-nio-8443-exec-10] INFO o.v.e.AgentServlet.service - Request:  Context Path = /myapp-nospring-1.0
, Request URI = /myapp-nospring-1.0/sw.js
, Request URL = https://wfd.sybernet.com:8443/myapp-nospring-1.0/sw.js
, Servlet Context Path = /myapp-nospring-1.0
, Servlet Context Name = null
, Servlet Mapping = /*
, Servlet Mapping Match Value = sw.js
, Servlet Mapping Match Name = PATH
18-12:32:33.623 [https-jsse-nio-8443-exec-10] INFO o.v.e.AgentServlet.service - In AgentServlet ... service().. Listings
Setting = false
18-12:32:33.625 [https-jsse-nio-8443-exec-10] INFO o.v.e.AgentServlet.lambda$service$0 -
org.vaadin.example.AgentServlet:org.vaadin.example.AgentServlet
18-12:32:33.626 [https-jsse-nio-8443-exec-10] INFO o.v.e.AgentServlet.lambda$service$0 - default:org.apache.catalina.servlets.DefaultServlet
18-12:32:33.629 [https-jsse-nio-8443-exec-10] INFO o.v.e.AgentServlet.lambda$service$0 jsp:org.apache.jasper.servlet.JspServlet
18-12:32:33.684 [https-jsse-nio-8443-exec-10] DEBUG c.v.f.s.c.UidlWriter.createUidl - * Creating response to client
18-12:32:33.688 [https-jsse-nio-8443-exec-10] DEBUG c.v.f.s.BootstrapHandler.getInitialUidl - Initial UIDL: [object
Object]

注册了三个 servlet——默认一个、jsp 一个和我的,这是我的带注释的 AgentServlet 类。

我的问题是:-

  1. Vaadin servlet 是否默认允许列出这些文件夹,即默认情况下列表设置为“true”。使用 web init 参数将其设置为 false 似乎没有任何效果。

  2. 将文件夹放入 Vaadin 应用程序的 webapp 上下文文件夹(即 http://appserver:port/vaadin-web-app/images.如果我对 JSP 应用程序执行此操作,应用程序的行为与我预期的一样,并且未列出文件夹内容。你得到一个 404,或者如果 index.html 在那里,它将被呈现。如有任何意见或建议,我将不胜感激。

     @WebServlet(value = { "/*"}, initParams= 
    {@WebInitParam(name="listings", value="false")}, asyncSupported =true)
    public class AgentServlet extends VaadinServlet {
    /** the logger. */
    private static final Logger MLOGGER = LogManager.getLogger(AgentServlet.class);

    @Override
    protected void servletInitialized() throws ServletException {
    super.servletInitialized();
    MLOGGER.info("In AgentServlet ... servletInitialized()");
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    MLOGGER.info("In AgentServlet ... service()");
    MLOGGER.info("Request: Context Path = " + request.getContextPath()
    + "\n, Request URI = " + request.getRequestURI()
    + "\n, Request URL = " + request.getRequestURL()
    + "\n, Servlet Context Path = " + request.getServletContext().getContextPath()
    + "\n, Servlet Context Name = " + request.getServletContext().getServletContextName()
    + "\n, Servlet Mapping = " + request.getHttpServletMapping().getPattern()
    + "\n, Servlet Mapping Match Value = " + request.getHttpServletMapping().getMatchValue()
    + "\n, Servlet Mapping Match Name = " + request.getHttpServletMapping().getMappingMatch().name()
    );

    String ListingsSetting = getServletConfig().getInitParameter("listings");
    MLOGGER.info("In AgentServlet ... service().. Listings Setting = " + ListingsSetting);


    request.getServletContext().getServletRegistrations().forEach((key, value) -> MLOGGER.info(key + ":" + value.getClassName()));

    try {
    super.service(request, response);
    } catch (ServletException se) {
    MLOGGER.error("In AgentServlet ... service() caught Servlet Exception " + se.getMessage());
    } catch (IOException ie) {
    MLOGGER.error("In AgentServlet ... service() caught IO Exception " + ie.getMessage());
    }

    }

最佳答案

您可以通过在 TOMCAT_HOME\conf\web.xml 文件中将以下值更改为 false 来禁用服务器的目录列表:

<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>

也许您也可以尝试在目录中添加一个空的index.html 文件。

关于web-applications - 瓦丁 : Disable listing of images folder in Vaadin V14 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67432588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com