Vaadin : 在 Vaadin V14 webapp 中禁用图像文件夹列表

如何解决Vaadin : 在 Vaadin V14 webapp 中禁用图像文件夹列表

我重建了 vaadin webapp 并删除了所有 Spring 功能。 我的 web 应用现在是非 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

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

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

tomcat 上部署的 webapp 文件夹如下所示。

webapp as it is deployed

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

Working Application

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

directory listing of images folder

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

然后我尝试引入以下带有@WebInitParam 的@WebServlet 注释,以将这个webappp 的列表设置为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 文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res