有什么方法可以通过在 WildFly 中配置来限制访问吗?

Is there any way to restrict access by configuring in WildFly?

有没有办法通过在WildFly中配置来限制访问。我想知道是否可以添加一个只能访问服务器的IP列表?有没有办法在服务器级别将 IP 列入黑名单?

我正在检查这样的功能:http://boseca.blogspot.in/2010/12/programmatically-addremove-ip-security.html

如果您使用的是 Wildfly 8.2(其中包含 Undertow 1.1.0),那么您可以通过 undertow-handlers.conf 文件配置 IP 访问控制,该文件放在 war 的 WEB-INF 或 jar 的 META-INF 文件夹。

You can do something like:

ip-access-control[default-allow=false, acl={'10.0.0.1 deny', '10.0.0.0/24 allow'}]

this can also be combined with predicates:

path-prefix[/internal] -> ip-access-control[acl={ '10.0.0.0/24 allow'}]

Source.

或者(或者如果您使用早于 8.2 的 Wildfly 版本)您可以创建一个 ServletExtension。创建一个文件 META-INF\services\io.undertow.servlet.ServletExtension,其中应该有您的扩展名的完全限定名称。扩展必须实现 io.undertow.servlet.ServletExtension 接口。然后,此扩展可能会以编程方式创建 io.undertow.server.handlers.IPAddressAccessControlHandler,对其进行配置,并将其添加到部署的初始处理程序链中。

上面谈到了在部署级别添加处理程序。要在服务器级别添加自定义处理程序,您至少需要 Wildfly 8.2。在 standalone.xml 的 undertow 子系统中(或您使用的任何配置),您可以像这样添加一个处理程序(过滤器)(省略不相关的配置):

<subsystem xmlns="urn:jboss:domain:undertow:1.2">
    <server name="default-server">
        <host name="default-host" alias="localhost">
            <filter-ref name="custom-filter" />
        </host>
    </server>
    <filters>
        <filter name="custom-filter" module="io.undertow.core" />
                class-name="io.undertow.server.handlers.HttpTraceHandler"
    </filters>
</subsystem>

Source。处理程序必须在您的静态服务器模块中,而不是在部署中。继承 IPAddressAccessControlHandler,在您的构造函数中对其进行配置或根据需要覆盖其方法,并将配置指向您的自定义处理程序。

根据 WFLY-4048 服务器级别的基于文本的处理程序配置将在 Wildfly 10 中。

您还可以通过添加 filter-ref 和表达式过滤器在 JBOSS 级别实现 IP 过滤器,如下所示

 <subsystem xmlns="urn:jboss:domain:undertow:3.0" statistics-enabled="true" instance-id="instanceid">
        <buffer-cache name="default"/>
        <server name="default-server">
            <ajp-listener name="ajp" max-connections="1200" write-timeout="600000" read-timeout="30000" allow-equals-in-cookie-value="true" record-request-start-time="true" socket-binding="ajp"/>
            <http-listener name="default" allow-equals-in-cookie-value="true" socket-binding="http"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                  <access-log suffix=".log" prefix="access" pattern="%a %h %{i,sm_user} %u %t %r %s %b %T"/>
                  <filter-ref name="limit-connections"/>
                <filter-ref name="ipaccess"/>
                <single-sign-on/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
        </handlers>
         <filters>
            <request-limit name="limit-connections" queue-size="100" max-concurrent-requests="1200"/>
            <expression-filter  module="io.undertow.core" name="ipaccess" expression="ip-access-control[default-allow=false, acl={'10.0.0.1 deny', '10.0.0.0/24 allow'}]"/>
        </filters>
    </subsystem>