java - Appengine - 隐藏文件夹的部署

标签 java validation google-app-engine hidden hidden-files

要验证 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>

有什么办法可以上传这些文件夹和文件吗?

最佳答案

对于像我一样在 Google App Engine 中尝试以静态方式应对 letsencrypt 挑战并失败后来到这里的其他人,以下为我做了:(有人可能实际上能够静态地做到这一点,但我没有不要尝试它,因为我不想花更多时间尝试一些东西,而 Ian 显然已经尝试过但无法使其工作[也许在 Google App Engine 内部完成的复制命令忽略了以点开头的目录] )

取自http://igorartamonov.com/2015/12/lets-encrypt-ssl-google-appengine/归功于 Igor Artamonov。

只需像这样构建一个 servlet:

公共(public)类 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.xml 中,例如:

<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 的完整类路径。

该博文还介绍了生成和安装证书所需的其他步骤。

Ian:你确定你部署的 servlet 很好吗?检查日志,确保您正在测试正确的版本..也许您遇到了编译问题..

干杯

关于java - Appengine - 隐藏文件夹的部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281654/

相关文章:

java - 对 Domino 对象使用回收会导致 Bean 不返回数据

api - 使用 "List from a range"对范围进行谷歌表格 API V4 数据验证

php - Google App Engine 上的 WordPress 设置过程中出现错误

java - 部署后的 Google App Engine 和 Cloud SQL

java - 在Google App Engine上配置Quercus

java - 在java中设置JTable中行的高度

包含点的Java/排序数组

java - 在没有临时文件的情况下将文件上传到 Java 中的 HTTP 服务器内存?

c# - 如何将字符串传入存储过程中的动态sql

javascript - 只允许输入数字,包括负数和小数