小编pVi*_*aca的帖子

更改部署为战争的spring-boot应用程序的默认欢迎页面

我试图找到一种方法来更改一个弹簧启动应用程序的默认欢迎页面,该应用程序在生产中被部署为战争,但是如果没有web.xml文件,我找不到办法.

根据文档,我们可以使用EmbeddedServletContainerFactory和以下代码来完成它:

@Bean
public EmbeddedServletContainerFactory servletContainer() {

    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    TomcatContextCustomizer contextCustomizer = new TomcatContextCustomizer() {
        @Override
        public void customize(Context context) {
            context.addWelcomeFile("/<new welcome file>");
        }
    };
    factory.addContextCustomizers(contextCustomizer);

    return factory;
}
Run Code Online (Sandbox Code Playgroud)

虽然,因为我们正在创建一个war文件并将其部署到tomcat而不使用Embedded Tomcat,但这并没有做任何事情.

任何的想法?如果我们真的需要添加一个web.xml文件,我们怎么做呢仍然使用spring boot?我们是否应该将Application bean(使用main方法)指定为DispatcherServlet的应用程序上下文?文档不是很清楚.

较旧的Servlet容器不支持Servlet 3.0中使用的ServletContextInitializer引导过程.您仍然可以在这些容器中使用Spring和Spring Boot,但是您需要在应用程序中添加web.xml并将其配置为通过DispatcherServlet加载ApplicationContext.

提前致谢!

佩德罗

spring tomcat7 spring-boot

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

谷歌 Kubernetes 引擎和 VPN

我正在使用 Google Kubernetes Engine 部署一些需要连接到本地数据库的应用程序。为此,我配置了一个 VPN 隧道并创建了一个 VPC。

然后,我创建了一个使用该 VPC 的 GKE 集群(1 个节点),我可以通过连接到该节点并尝试 ping 数据库服务器来确认该数据库可访问

~ $ sudo toolbox ping 10.197.100.201
Spawning container root-gcr.io_google-containers_toolbox-20180309-00 on 
/var/lib/toolbox/root-gcr.io_google-containers_toolbox-20180309-00.
Press ^] three times within 1s to kill container.
PING 10.197.100.201 (10.197.100.201): 56 data bytes 
64 bytes from 10.197.100.201: icmp_seq=0 ttl=62 time=45.967 ms
64 bytes from 10.197.100.201: icmp_seq=1 ttl=62 time=44.186 ms`
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从 Pod 执行相同操作,则无法连接。

root@one-shot-pod:/# traceroute 10.197.100.201
traceroute to 10.197.100.201 (10.197.100.201), 30 hops max, 60 byte 
packets
 1  10.0.0.1 (10.0.0.1)  0.046 ms  0.009 …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform kubernetes google-kubernetes-engine google-cloud-vpn

9
推荐指数
1
解决办法
1452
查看次数

Kinesis点火流接收器的检查点如何工作

我们使用连接到AWS Kinesis流的Spark Streaming,以便聚合(每分钟)我们收到的指标,并将聚合写入Influxdb,以便将它们提供给实时仪表板.

一切都运行良好,但我们现在正在考虑如何管理系统的部署和最终故障的暂停.

文档说Kinesis集成库已经为故障,检查点等做好了准备,但我想澄清检查点是如何在那里工作的.

Kinesis接收器使用Amazon在亚马逊软件许可(ASL)下提供的Kinesis客户端库(KCL)创建输入DStream.KCL构建于Apache 2.0许可的AWS Java SDK之上,并通过Workers,Checkpoints和Shard Leases的概念提供负载平衡,容错,检查点.

我们可以为kinesis定义检查点间隔,但据我所知,它仅用于标记直到我们消耗了指标的流的哪个点.所以,我们仍然需要使用火花流的检查点功能,对吧?

由于我们每分钟聚合数据,我们的批处理间隔为60秒,但在这60秒内,我们不断从流中接收数据.

这是我的问题:

  • 当我执行JavaStreamingContext.stop(...)(为了部署新版本的作业)时,接收器将被停止并且检查点将在最后更新?
  • 火花流检查点什么时候发生?每次执行工作后?之前?
  • 假设我们两个检查点都工作,我们怎样才能保证失败时的一致性?似乎每次流式检查点发生时,它都需要同时检查点到kinesis,否则我们可以再次读取相同的数据.我们怎么办呢?
  • 如果底层服务(在这种情况下为Influxdb)已关闭,我该怎么办?实施重试机制?如果是这样,它需要在一段时间后停止重试,否则我们将耗尽内存.

提前致谢!

streaming bigdata apache-spark amazon-kinesis

7
推荐指数
1
解决办法
894
查看次数

如何获取用户可以使用ACL相关表访问的对象列表

我正在设计一个对用户管理/权限有很多要求的系统,因此我决定使用Spring Security ACL来管理Domain Objects级别的权限.

虽然,使用ACL来维护用户和实体之间的关系迫使我们依赖它来在UI上呈现数据.

Spring Security提供的PostFilter解决方案很好地过滤了用户可以/看不到的对象,但是当我们处理具有数百/数千个条目的实体时,它有很大的性能问题,因为我们需要从数据库加载所有内容,然后丢弃不允许用户"查看"的对象.

这个问题在这里描述 - SEC-2409 - 但是这个功能可用还需要一些时间.所以,我正在尝试找到一种使用Spring Security ACL的解决方法,但避免了性能问题.

我考虑实现一些代码来检索用户可以访问的对象(在身份验证过程之后)并保持该信息可用于每个请求,以允许开发人员使用该信息来执行查询而不依赖于PostFilter .

为了实现这一点,我试图找到一种方法来检索给定主体/授权权限的权限列表,但我无法找到使用可用的AclService实现的方法.

示例:aclService.getObjectIdentityList(<sid>,<acl_class>)

注意:该方法应使用继承结构并包括从父条目继承的所有ObjectIdentities

有任何建议来获取数据或其他方法来解决这个问题吗?


UPDATE

我已经找到了一种方法来检索用户可以访问的对象列表.

List<ObjectIdentity> childObjects = aclService.findChildren(objectIdentity);
Map<ObjectIdentity, Acl> result = aclService.readAclsById(childObjects, sids);
Run Code Online (Sandbox Code Playgroud)

这种方法对我们有用,因为我们只有几个实体,访问权限由ACL控制,因此我们可以构造User具有访问权限的ObjectsIdentities列表.

虽然,正在返回的Map正在返回正在传递的ObjectIdentities的所有ACL,然后我需要检查用户是否有权访问正在返回的每个ObjectIdentity.

你有一个简单的方法来做到这一点或简化所有这些逻辑吗?

acl spring-security spring-security-acl

5
推荐指数
1
解决办法
2247
查看次数