JBoss web 如何實現安全訪問

2021-09-01 17:04:13 字數 1198 閱讀 1177

servlet 容器啟動的時候, 會針對 http 協議啟動一系列的 acceptor 執行緒,當乙個 http 的請求傳送到 servet 容器的時候, 其中乙個 acceptor 執行緒會再次啟動乙個新的執行緒處理該請求。 在對該請求做了一些列的 pre/post 處理後, tomcat 會呼叫:

connector.getcontainer().getpipeline().getfirst().invoke(request, response);
方法。

該方法會呼叫容器的 pipeline 的第乙個 valve 的 invoke() 方法, 基本上每個 valve 的實現都會考慮呼叫:

getnext().invoke(request, response);
這點和 httpfilter 類似。

而 org.apache.catalina.authenticator.authenticatorbase 就是其中乙個 valve,我們先看下這個 valve 都作了什麼,然後看看它是如何加進當前的 pipeline 的。

首先它會檢查當前請求裡是否有 principal, 並且該 principal 是否有許可權訪問當前正在訪問的資源, 如果沒有, 那麼會呼叫 authenticate 方法進行登入, 如果登入成功,呼叫 next valve 的 invoke 方法。

那這個 valve 是怎麼加到當前的 pipeline 的呢? 當乙個 war 部署的時候, 容器會分析 web.xml, 如果web.xml 裡有 security-constraint 定義, 那麼它會根據當前 login-config 裡定義的 auth-method 為其分配乙個 authenticator。 它同時也是乙個 valve,其中 auth-method 一般取值為: 

除此以外, 使用者可以自定義 authenticator 的 valve,從而實現更多的 auth-method。以 jboss  下配置 spnego authenticator 為例, 在 jboss-web.xml 裡加上如下定義:

org.jboss.security.negotiation.negotiationauthenticator

該 authenticator 會忽略 auth-method 的定義。  jboss web 就會在該 war 部署的時候,由容器直接把這個 authenticator 加入到 pipeline。

如何實現執行緒安全?

對於執行緒不安全的物件我們可以通過如下方法來實現執行緒安全 1 加鎖 利用synchronized或者reentrantlock來對不安全物件進行加鎖,來實現執行緒執行的序列化,從而保證多執行緒同時操作物件的安全性,乙個是語法層面的互斥鎖,乙個是api層面的互斥鎖.2 非阻塞同步來實現執行緒安全。原...

ArrayList如何實現執行緒安全

一 使用synchronized關鍵字,這個大家應該都很熟悉了,不解釋了 二 使用collections.synchronizedlist 使用方法如下 假如你建立的 如下 list data new arraylist 那麼為了解決這個執行緒安全問題你可以這麼使用collections.synch...

企業如何實現資料安全儲存

企業如何實現資料安全儲存 資源來自問道網www.askform.cn askform問道網採用阿里雲提供基礎服務,因此充分利用阿里雲提供的服務來制定策略,從而達到資料安全,可靠,穩定。1.資料可靠性 資料可靠性是第一位,askform問道網的首要職責是保證使用者所有資料不丟失,達到銀行級別的可靠性。...