我试图找到一种方法来更改一个弹簧启动应用程序的默认欢迎页面,该应用程序在生产中被部署为战争,但是如果没有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.
提前致谢!
佩德罗
我正在使用 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
我们使用连接到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秒内,我们不断从流中接收数据.
这是我的问题:
提前致谢!
我正在设计一个对用户管理/权限有很多要求的系统,因此我决定使用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 ×1
apache-spark ×1
bigdata ×1
kubernetes ×1
spring ×1
spring-boot ×1
streaming ×1
tomcat7 ×1