TCP 連線攔截器
您可以設定連線工廠,並參考 TcpConnectionInterceptorFactoryChain
。您可以使用攔截器為連線新增行為,例如協商、安全性和其他選項。框架目前未提供任何攔截器,但請參閱來源儲存庫中的 InterceptedSharedConnectionTests
以取得範例。
測試案例中使用的 HelloWorldInterceptor
運作方式如下:
攔截器首先使用用戶端連線工廠進行設定。當第一個訊息透過攔截連線傳送時,攔截器會透過連線傳送 'Hello',並預期收到 'world!'。當這種情況發生時,協商完成,並傳送原始訊息。此外,使用相同連線的訊息會在沒有任何額外協商的情況下傳送。
當使用伺服器連線工廠設定時,攔截器要求第一個訊息必須是 'Hello',如果是,則傳回 'world!'。否則,它會擲回例外狀況,導致連線關閉。
所有 TcpConnection
方法都會被攔截。攔截器執行個體由攔截器工廠針對每個連線建立。如果攔截器是有狀態的,則工廠應為每個連線建立新的執行個體。如果沒有狀態,則相同的攔截器可以包裝每個連線。攔截器工廠會新增至攔截器工廠鏈的設定中,您可以透過設定 interceptor-factory
屬性將其提供給連線工廠。攔截器必須擴充 TcpConnectionInterceptorSupport
。工廠必須實作 TcpConnectionInterceptorFactory
介面。TcpConnectionInterceptorSupport
具有直通方法。透過擴充此類別,您只需要實作您想要攔截的那些方法。
以下範例顯示如何設定連線攔截器工廠鏈:
<bean id="helloWorldInterceptorFactory"
class="o.s.i.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
<property name="interceptors">
<array>
<bean class="o.s.i.ip.tcp.connection.HelloWorldInterceptorFactory"/>
</array>
</property>
</bean>
<int-ip:tcp-connection-factory id="server"
type="server"
port="12345"
using-nio="true"
single-use="true"
interceptor-factory-chain="helloWorldInterceptorFactory"/>
<int-ip:tcp-connection-factory id="client"
type="client"
host="localhost"
port="12345"
single-use="true"
so-timeout="100000"
using-nio="true"
interceptor-factory-chain="helloWorldInterceptorFactory"/>