当前位置: 首页 > 知识库问答 >
问题:

Appengine-部署隐藏文件夹

蓬宾白
2023-03-14

要验证SSL证书,我需要将包含一些文件的隐藏文件夹(“/. well-known”)上传到我的应用程序。

我正在使用eclipse部署java应用程序,但这些文件不会在appEngine上的应用程序中接收。我想它们被过滤掉了。

我试图将隐藏文件夹作为静态文件添加到appengine web。xml,但它没有帮助。

<!-- Configure serving/caching of GWT files -->
<static-files>
    <include path="**" />
    <include path=".**" />
    <include path="**.*" expiration="0s" />
    <include path="**.well-known" expiration="0s" />
    <include path="**.nocache.*" expiration="0s" />
    <include path="**.cache.*" expiration="365d" />
    <include path="**.css" expiration="30d"/>
    <exclude path="**.gwt.rpc" />
    <exclude path="**.html" />
</static-files>

我能上传这些文件夹和文件吗?

共有3个答案

康泽宇
2023-03-14

我确实找到了更好的方法,问题是代码存储在一个隐藏的目录中,所以我们只需要将正确的url映射到一个可见的目录。

handlers:-url:/。著名静态目录:_著名

宋志学
2023-03-14

我在尝试提供资产链接时遇到了这个问题。json文件。看起来文件夹确实是以。在App Engine的静态上下文中无法访问。João Antunes变通方法的更通用版本如下。

首先,创建不带文件夹的文件夹。开始时,将所有必需的文件放入其中。

然后,我们需要创建一个servlet,当收到对隐藏文件夹的请求时,它将用正确的数据进行响应。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created by Will Calderwood on 17/05/2017.
 * <p>
 * It would appear to not be possible to upload hidden folders to app engine. So when files need
 * to be served from a hidden folder the URL can be bounced through this servlet
 */
public class StaticFileServer extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // We'll remove the dots from the path
        String uri = req.getRequestURI().replace("/.", "/");

        // Do anything else that needs doing here
        if (uri.toLowerCase().contains(".json")) {
            resp.setContentType("application/json");
        }

        // Read and return the resource from the non-hidden folder
        try (InputStream in = getServletContext().getResourceAsStream(uri)) {
            if (in == null){
                resp.sendError(404);
                return;
            }
            byte[] buffer = new byte[8192];
            int count;
            while ((count = in.read(buffer)) > 0) {
                resp.getOutputStream().write(buffer, 0, count);
            }
        }
    }
}

然后将以下内容添加到网站。xml文件将隐藏的文件夹指向我们的servlet

<servlet>
    <servlet-name>StaticFileServer</servlet-name>
    <servlet-class>main.com.you.StaticFileServer</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>StaticFileServer</servlet-name>
    <url-pattern>/.well-known/*</url-pattern>
</servlet-mapping>

司寇祖鹤
2023-03-14

对于像我这样的人来说,在谷歌应用程序引擎中尝试以静态方式为letsencrypt提供挑战但失败后,下面是为我做的:(一个人可能可以静态地做,但我没有尝试,因为我不想花更多的时间尝试东西,伊恩显然尝试了,但无法使其工作(可能谷歌应用程序引擎内部完成的复制命令忽略了以点开头的目录])

摘自http://igorartamonov.com/2015/12/lets-encrypt-ssl-google-appengine/荣誉归于伊戈尔·阿尔塔莫诺夫。

只需构建一个servlet,如下所示:

公共类LetsencryptServlet扩展了HttpServlet{

    public static final Map<String, String> challenges = new HashMap<String, String>();

    static {
        challenges.put("RzrvZ9gd7EH3i_TsJM-B0vdEMslD4oo_lwsagGskp6c",
                "RzrvZ9gd7EH3i_TsJM-B0vdEMslD4oo_lwsagGskp6c.ONrZa3UelibSWEX270nTUiRZKPFXw096nENWbMGw0-E");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        if (!req.getRequestURI().startsWith("/.well-known/acme-challenge/")) {
            resp.sendError(404);
            return;
        }
        String id = req.getRequestURI().substring("/.well-known/acme-challenge/".length());
        if (!challenges.containsKey(id)) {
            resp.sendError(404);
            return;
        }
        resp.setContentType("text/plain");
        resp.getOutputStream().print(challenges.get(id));
    }
}

添加web.xmlsomething thine like:

<servlet>
    <servlet-name>letsencrypt</servlet-name>
    <servlet-class>...LetsencryptServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>letsencrypt</servlet-name>
    <url-pattern>/.well-known/acme-challenge/*</url-pattern>
</servlet-mapping>

当然,请确保servlet类具有您创建的Servlet的完整类路径。

这篇博文还涉及生成和安装证书所需的其他步骤。

伊恩:你确定你很好地部署了servlet吗?检查日志,确保测试的版本正确。。也许你有编译问题。。

干杯

 类似资料:
  • Linux 下,名称中第一个字符为 . 的文件或者文件夹,系统会将它们隐藏起来。传统上,这种文件大多是用户的配置文件。 您可以尝试以下操作: cd ~ #进入您的用户目录 ls #查看当前目录下的文件列表 ls -a #查看所有文件的文件列表(包括隐藏文件)。 如果您只想查看隐藏文件,而不包括这两个特殊目录,您可以使用 ls 命令的选项 -A (ls -A) 每个目录下都包含

  • 但却被忽略了。 是否可以使用maven激活配置文件?

  • 问题内容: 您如何在Tkinter中显示和隐藏小部件?我想有一个输入框,但不要一直显示它。有人可以向我展示在tkinter中显示和隐藏条目小部件和其他小部件的功能吗?我希望能够在没有多个帧的情况下执行此操作。 问题答案: 这已经在stackoverflow上得到了回答。简短的答案是,您可以使用grid_remove,如果先前是通过网格添加的,则将导致该小部件被删除。记住小部件的位置,因此只需简单地

  • 我正在尝试Visual Studio代码。关于VisualStudio代码的一切在我看来都很酷,除了一件事:。git文件夹/文件隐藏在Visual Studio代码中。 我经常通过修改配置文件来更改Git设置。看不到文件真的很烦人。 有没有办法显示文件?

  • 问题内容: 我需要列出文件夹中包含目录路径的所有文件。我尝试使用,这显然是完美的解决方案。 但是,它还会列出隐藏的文件夹和文件。我希望我的应用程序不列出任何隐藏的文件夹或文件。有没有可以用来使其不产生任何隐藏文件的标志? 跨平台对我而言并不是很重要,如果只适用于linux(。*模式)就可以了 问题答案: 不,没有选择会跳过这些。您需要自己这样做(这很容易): 注意切片分配;递归遍历中列出的子目录。

  • 我实现了一个e4 RCP应用程序,我想为特殊用户隐藏部分。 在e3中,我知道我可以通过一个实现iPerspectiveFactory的透视类来做到这一点。 我现在的解决办法是: 我在part类中这样做,当我运行应用程序时,我会得到以下injectionexcetion: !Entry org.eclipse.e4.ui.workbench 4 0 201 7-08-01 09:08:06.139!