小编sme*_*eeb的帖子

在Java 8中合并多个地图

Java 8在这里。我有以下课程:

public interface Animal {
  ...
}

public class Dog implements Animal {
  ...
}

public class Cat implements Animal {
  ...
}

public class Elephant implements Animal {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我必须实现以下方法:

void doSomething(Map<String,Dog> dogs, Map<String,Cat> cats, Map<String,Elephant> elephants) {
  // TODO:
  // * Merge all dogs, cats & elephants together into the same Map<String,Animal>,
  //     but...
  // * Do so generically (without having to create, say, a HashMap instance, etc.)
}
Run Code Online (Sandbox Code Playgroud)

在我的doSomething(...)方法中,我需要将所有地图参数合并到同Map<String,Animal>一张地图中,但是我确实更愿意这样做,而 …

java collections dictionary java-8

3
推荐指数
1
解决办法
4990
查看次数

Spring Boot HealthIndicator 示例

我希望/health在我的 Spring Boot REST 服务上构建一个强大而详细的健康检查端点 ( )。我刚刚阅读了有关该主题的这篇出色的 Baeldung 文章,但仍有一些担忧。

理想情况下,我的/health端点将能够考虑我所有子系统(其中 10 个以上)的个人健康状况,包括主机的健康状况(CPU、磁盘利用率、可用内存等)。

我不知道 Spring Boot 是否希望您构建一个且只有一个HealthIndicatorimpl。或者,如果想法是HealthIndicator为每个主要子系统构建一个实现(每个子系统可以分别独立地“向上”或“向下”。

另外,在那个 Baeldung 示例中,顶级status和它们之间的区别是什么myHealthCheck.status以及它们来自哪里(在代码中)?

{
    "status" : "DOWN",
    "myHealthCheck" : {
        "status" : "DOWN",
        "Error Code" : 1,
        "Description" : "You custom MyHealthCheck endpoint is down"
     },
     "diskSpace" : {
         "status" : "UP",
         "free" : 209047318528,
         "threshold" : 10485760
     }
}
Run Code Online (Sandbox Code Playgroud)

又是diskSpace从哪里来的?!

java spring health-monitoring spring-boot spring-boot-actuator

3
推荐指数
2
解决办法
1万
查看次数

从 UUID 或 HMAC/JWT/hash 生成一次性安全令牌?

我正在为网络应用程序构建后端。当新用户访问该网站并单击“注册”按钮时,他们将填写一个超级简单的表格,要求他们提供用户名+密码,然后提交。这会提示服务器向该电子邮件地址发送一封验证电子邮件。然后,他们将检查电子邮件,单击链接(验证电子邮件),然后被路由到登录页面,以便他们可以选择登录。

为了验证他们的电子邮件,当服务器生成电子邮件时,它需要创建(并存储)一个验证令牌(可能是 UUID)并将其附加到电子邮件中的此链接,以便该链接看起来像这样:

https://api.myapp.example.com/v1/users/verify?vt=12345

vt=12345“验证令牌”在哪里(也可能是 UUID)。因此,用户单击此链接,我的GET v1/users/verify端点查看令牌,以某种方式确认其有效,并进行一些数据库更新以“激活”用户。他们现在可以登录。

当用户想要取消订阅接收电子邮件时,或者当他们忘记密码并需要恢复密码以便可以登录时,也会出现类似的情况。

退订

用户想要停止接收电子邮件,但仍然想要使用该应用程序。他们点击我们发送给他们的每周新闻通讯中的“取消订阅”链接。此链接需要包含某种类似的“取消订阅令牌”,该令牌与上面的验证令牌一样,是在服务器上生成并存储的,用于验证用户取消订阅电子邮件的请求。

恢复密码

在这里,用户忘记了密码,需要恢复它。因此,在登录屏幕上,他们单击“忘记密码”链接,然后会看到一张表格,他们必须在其中填写电子邮件地址。服务器向该地址发送一封电子邮件。他们检查了这封电子邮件,其中包含一个表单链接,他们可以在其中输入新密码。此链接需要包含一个“重置密码令牌”,与上面的验证令牌一样,它是在服务器上生成并存储的,用于验证用户更改密码的请求。

因此,我们需要解决三个非常相似的问题,所有问题都需要使用我所说的“一次性(OTO)安全令牌”。这些 OTO 代币:

  • 必须在服务器端生成并持久化(可能保存到security_tokens表中)
  • 必须是可以附加到我们将从电子邮件内部公开的链接的内容
  • 只能有效一次:一旦他们点击它,令牌就被“使用”并且不能重复使用

我的问题

我想出的解决方案很简单……几乎太简单了。

对于令牌,我只是生成随机 UUID(36 个字符)并将它们存储到security_tokens具有以下字段的表中:

[security_tokens]
---
id (PK)
user_id (FK to [users] table)
token (the token itself)
status (UNCLAIMED or CLAIMED)
generated_on (DATETIME when created)
Run Code Online (Sandbox Code Playgroud)

当服务器创建它们时,它们是“未声明的”。当用户单击表内的链接时,他们将被“声明”。后台工作人员作业将定期运行,以清理任何已声明的令牌或删除任何已“过期”(基于其generated_on字段)的未声明令牌。该应用程序还将忽略之前已声明的任何令牌(并且尚未清理)。

认为这个解决方案可行,但我不是一个超级安全人员,我担心这种方法:

  1. 可能会让我的应用程序容易受到某种类型的攻击/利用;和
  2. 当其他解决方案可能同样有效时,可能会重新发明轮子

就像上面的第二个一样,我想知道是否应该使用哈希/HMAC/JWT 相关机制,而不是一个简单的 UUID。也许有一些聪明的加密/安全人员找到了一种方法,使这些令牌以安全/不可变的方式包含声明状态和到期日期本身。

security authentication hash hmac jwt

3
推荐指数
1
解决办法
4996
查看次数

Spring Boot&Liquibase示例

Spring Boot和MySQL在这里.试图让我的Spring Boot应用程序使用Liquibase进行数据库迁移,并在文档中看到Spring Boot 内置了对Liquibase的支持.

但是在阅读完这些文档之后,我还有几个相关的问题:

  • db/changelog/db.changelog-master.yaml文件的基本目的是什么?是存储Liquibase配置(指示Liquibase的行为),还是我应该将实际的顺序SQL更改(" 迁移 ")本身放在哪里?
    • 理想情况下,我希望有一个src/main/resources/migrations目录并将我的迁移更改存储为单独的SQL文件,如下所示:
    • src/main/resources/migrations/001-schema.sql
    • src/main/resources/migrations/002-init.sql
    • src/main/resources/migrations/003-changing-account-types.sql
    • ...等等.是否可以通过Spring Boot配置Liquibase来实现这一目的?
  • Spring Boot什么时候运行这些Liquibase迁移?在app启动时?如果Spring Boot应用程序实际上在节点集群上运行(比如负载平衡URL后面的5个节点),该怎么办?将Spring Boot运行Liquibase运行5次,每个节点运行一次吗?或者它是否意识到一个节点是" 主迁移者 "等?

database-migration liquibase spring-boot

3
推荐指数
1
解决办法
5114
查看次数

PostMan 测试脚本:检查响应 JSON 的内容

邮递员 6.0.10 在这里。我正在尝试了解如何更好地编写测试脚本,并且在阅读了他们出色的文档之后我仍然对如何查询和检查从请求返回的 JSON 响应有些困惑。

具体来说,给定以下 JavaScript 片段:

pm.test("Verify the contents of the response payload are correct", function () {
    // ???
});
Run Code Online (Sandbox Code Playgroud)

我需要能够查询响应 JSON 并且:

  • 确定响应是单个 JSON 对象还是一组 JSON 对象
  • 如果它是一个数组,确定大小(数组中的元素数量)
  • 否则,如果它是单个对象,我需要能够查询该对象的特定字段(例如,名为“ fizzbuzz”的字段)并获取这些字段的值和 JSON 类型(字符串、数字、布尔值、空值)

场景 #1:JSON 响应是一个数组

例子:

[
    {
        "fizz": "buzz",
        "foo": 53
    },
    {
        "fizz": "bozz",
        "foo": 291
    }
]
Run Code Online (Sandbox Code Playgroud)

场景 #2:JSON 响应是单个对象

例子:

{
    "fizz": "buzz",
    "foo": 293
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何执行响应有效负载的这种 JSON 检查?

javascript json postman postman-collection-runner

3
推荐指数
1
解决办法
2749
查看次数

使用Bootstrap停靠页脚

假设我的页面应该是以下"模板":

在此输入图像描述

我的页面由标题,内容部分(每页不同)和页脚组成.页面高度是标题高度+内容高度+页脚高度.注意页脚的高度; 它很高/很健壮.我很好.

我不想要一个"粘性"页脚,而是我正在寻找以下功能:

  • 如果标题高度+内容高度大于视口/窗口高度,我不希望页脚在用户向下滚动到它之前可见(正常的页脚行为); 但...
  • 如果页眉高度+内容高度+页脚高度小于视口/窗口高度,我希望页脚固定到视口底部.这意味着如果特定页面的内容非常小或者甚至是完全空的,我希望我的标题固定在窗口的顶部,并且页脚固定在底部.

jsFiddle中的示例

我需要做些什么才能改变我的footerdiv以展示所需的行为?

<!-- What needs to change here? -->
<div class="footer ">
    This should always be shown at the bottom if there isn't a lot of content to display below the header.
</div>
Run Code Online (Sandbox Code Playgroud)

html css footer sticky-footer twitter-bootstrap

2
推荐指数
1
解决办法
1917
查看次数

Bootstrap 3导航栏无法响应样式更改

这是我的导航栏:

<body>
    <div class="wrapper">
        <div class="container-fluid">
            <nav class="navbar navbar-inverse">
                <div class="navbar-header">
                    <a class="navbar-brand" href="#">My<b>App</b></a>
                </div>
                <div>
                    <ul class="nav navbar-nav">
                        <li><a href="#">Learn</a></li>
                        <li><a href="#">Contact</a></li>
                        <li class="pull-right"><a href="#">Sign In | Register</a></li>
                    </ul>
                </div>
            </nav>

        <!-- The rest omitted for brevity. -->
Run Code Online (Sandbox Code Playgroud)

我的style.css:

* {
    margin: 0;
}

html, body {
    height: 100%;
}

.navbar-fixed-top {
    min-height: 200px;
}

.navbar-nav > a {
    color: rgb(255,0,0);
}

.wrapper {
    min-height: 100%;
    height: auto !important;
    height: 100%;
    margin: 0 auto -4em;
}

.footer, …
Run Code Online (Sandbox Code Playgroud)

html css twitter-bootstrap twitter-bootstrap-3

2
推荐指数
1
解决办法
95
查看次数

如何用Egit签出特定的标签?

Egit是一个流行的Eclipse插件,它将Eclipse与Git/GitHub集成在一起.

使用Git,如果我想处理项目的特定标记,我克隆该项目然后运行

git checkout tags/<tagName>
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何用Egit做到这一点.有任何想法吗?

eclipse git egit

2
推荐指数
1
解决办法
2741
查看次数

为什么LATEST是一个依赖管理反模式?

我最近在代码审查(对于我的代码),并且架构师在我的build.gradle文件中看到了以下内容:

dependencies {
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'org.apache.httpcomponents:httpclient:4.3.2'
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'

    // The problem:
    compile 'org.ourcompany:widget-client:LATEST'
}
Run Code Online (Sandbox Code Playgroud)

对此他说:" 使用LATEST是依赖管理的反模式,不要这样做. "我很想问" 为什么? ",但我没有.

我之所以这样做是因为widget-clientJAR版本每月更改多次,并且尝试记住使用最新版本号更新我的Gradle版本变成了一场噩梦.更糟糕的是,我已经失去了很多时间调试和解决我们没有最新widget-client版本的问题.所以这是我的修复.

在我推回并游说我们使用之前LATEST,我想了解情况.也许架构师是正确的,在这种情况下,我想知道为什么,更重要的是,解决方案是什么(所以我不必每周两次更新我的Gradle构建).如果他不对,我想了解原因.

我的另一个想法是,也许有可能标记一个特定的版本widget-client,比如说,STABLE然后我们可以随时拉入它的最新STABLE版本,这可能比它更好LATEST,但也许不是......那个方式,至少,我们总是有一个稳定的客户端版本,并被认为是功能和良好的测试,这使我们远离(潜在的错误)前沿,但仍然给我一个STABLE标签,所以我不必须不断更新deps到特定版本.

这真的都归结为为什么LATEST不好.如果它因为它让你把它固定在前沿(以及因此的错误),那么我认为STABLE解决方案是可行的方法,但我不太了解这些东西来完善具体的解决方案.如果LATEST由于其他原因而不好,或者根本没有坏,那么我也不确定该做什么.思考?

versioning anti-patterns dependency-management gradle

2
推荐指数
1
解决办法
174
查看次数

如何在Akka播出所有内容?

Java/Akka(v2.3.9)在这里.我的每个Akka UntypedActor子类都能够响应几条" 通用 "消息,例如ExecuteOrder66:

// Groovy pseudo-code
class StormTrooper extends UntypedActor {
    @Override
    void onReceive(Object message) throws Exception {
        if(message instanceof ExecuteOrder66) {
            // Betray the Jedi, serve only the emperor.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我有100个不同的actor子类,每个子类都支持ExecuteOrder66.我需要一种方法来向我的每一个演员广播这个消息的实例; 就像每个人都得到的公共广播宣布一样.

我认为上面的Akka文档的链接让我很接近,但我没有看到一个发送ExecuteOrder66给我的每一个演员的人.有任何想法吗?

broadcast actor akka

2
推荐指数
1
解决办法
1457
查看次数