如何从 Wildfly (v17) 服务器添加和读取列表



我有多个(10+)模块,我想添加对CORS的支持。我想只允许(访问控制-允许-来源)我们的组织生产、测试、开发、127.0.0.1 和本地主机。

我创建了一个jax rs ContainerResponseFilter类,如下所示:

@Provider
public class CorsFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
String origin = requestContext.getHeaderString("Access-Control-Allow-Origin");
if(!getAllowedOriginList().contains(origin))
throw new ForbiddenException("Not allowed.");
responseContext.getHeaders().add("Access-Control-Allow-Origin", origin);
responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
responseContext.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
}
private List<String> getAllowedOriginList() {
return Arrays.asList(
"http://localhost:8080",
"127.0.0.1:8080",
"111.123.123.22:8080",
"222.123.123.22:8080",
"333.123.123.22:8080"
);
}
}

问题是,当你有很多模块带有这段代码并且你需要更新一个IP地址时,你必须进入并更新每个模块中的这个过滤器。这对我来说不是一个好的选择。我想知道如何将此 IP 地址列表添加到 Wildfly 17 服务器并从每个模块中获取它?最简单的方法是什么?

一个非常简单的解决方案是使用 WildFly 的 JNDI。假设独立操作(尽管域类似),编辑独立命名部分.xml以添加简单的绑定:

<subsystem xmlns="urn:jboss:domain:naming:2.0">
<bindings>
<simple name="java:global/corsAllowedOriginList" type="java.lang.String"
value="localhost:8080,127.0.0.1:8080,111.123.123.22:8080,222.123.123.22:8080,333.123.123.22:8080" />
</bindings>
<remote-naming/>
</subsystem>

可以使用以下代码以编程方式读取:

import javax.naming.InitialContext;
InitialContext ic = new InitialContext();
String corsAllowedOriginList = ic.lookup("java:global/corsAllowedOriginList");
// can be converted to array using String.split(",")

将其作为资源注入更简单:

@Resource(lookup = "java:global/corsAllowedOriginList")
private String corsOriginList;

我建议您在每个应用程序的初始化时只读取此值一次并缓存它。

顺便说一下,这在 WildFly 的管理员指南的"命名子系统配置"部分进行了描述,目前在这里。

最新更新