Jakarta 驗證 (以前稱為 JASPIC)
目錄
簡介
Tomcat 實作 Jakarta 驗證 3.0。此實作主要用於讓第三方驗證實作與 Tomcat 整合。
Jakarta 驗證可以透過下列兩種方式之一進行配置
- 透過靜態設定檔
$CATALINA_BASE/conf/jaspic-providers.xml
在容器層級。使用此方法,所有必要的類別都必須對 Tomcat 的共用類別載入器可見,這通常表示將 JAR 放置在$CATALINA_BASE/lib
中。 - 透過使用 Jakarta 驗證 API 的動態配置在 Web 應用程式層級。使用此方法,所有必要的類別都必須對 Web 應用程式類別載入器可見,這通常表示將 JAR 放置在 Web 應用程式的
WEB-INF/lib
目錄中。
使用者應注意,如果靜態 Jakarta 驗證設定檔為特定 Web 應用程式設定 Jakarta 驗證,則 Jakarta 驗證設定將優先於 Web 應用程式 WEB-INF/web.xml
檔案中存在的任何 <login-config>
。
靜態配置
AuthConfigProvider
如果第三方實作包含 AuthConfigProvider
,則 Web 應用程式可以透過在 $CATALINA_BASE/conf/jaspic-providers.xml
中的 <jaspic-providers>
元素內巢狀下列內容來設定使用它。
<provider name="any"
className="fully.qualified.implementation.class.Name"
layer="HttpServlet"
appContext="Catalina/localhost /contextPath"
description="any">
<property name="see-provider-documentation"
value="see-provider-documentation" />
</provider>
Tomcat 不會使用 name
和 description
屬性。
className
屬性必須是 AuthConfigProvider
的完整限定類別名稱。此實作可以與 Web 應用程式或 Tomcat 的 $CATALINA_BASE/lib
目錄一起封裝。
layer
屬性必須是 HttpServlet
。
appContext
屬性必須完全是下列內容的串接
- 引擎名稱
- 正斜線字元
- 主機名稱
- 一個空格
- 內容路徑
如果 AuthConfigProvider
支援透過屬性進行設定,這些屬性可以透過巢狀在 <provide>
元素內的 <property>
元素中指定。
ServerAuthModule
如果第三方實作僅提供 ServerAuthModule
,則有必要提供許多支援類別。這些類別可以是自訂實作,或者,Tomcat 為 ServerAuthModule
提供一個簡單的包裝器實作。
Tomcat 的 ServerAuthModule
包裝器可以透過在 $CATALINA_BASE/conf/jaspic-providers.xml
中的 <jaspic-providers>
元素內巢狀以下內容進行設定。
<provider name="any"
className="org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider"
layer="HttpServlet"
appContext="Catalina/localhost /contextPath"
description="any">
<property name="org.apache.catalina.authenticator.jaspic.ServerAuthModule.1"
value="fully.qualified.implementation.class.Name" />
<property name="see-provider-documentation"
value="see-provider-documentation" />
</provider>
設定與前一節中的 AuthConfigProvider
類似,但有一些主要差異。
className
屬性必須是 org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider
。
ServerAuthModule
(s) 透過屬性指定。屬性名稱必須是 org.apache.catalina.authenticator.jaspic.ServerAuthModule.n
,其中 n
是模組的索引。索引必須從 1 開始,並以 1 為步長遞增,直到定義所有模組。屬性的值必須是模組的完全限定類別名稱。
動態配置
Jakarta 驗證模組和設定可以封裝在 WAR 檔案中,並與 Web 應用程式一起使用。然後,Web 應用程式可以在啟動時使用標準的 Jakarta 驗證 API 註冊所需的 Jakarta 驗證設定。
如果使用平行部署,則不應使用動態設定。Jakarta 驗證 API 假設內容路徑對於任何特定主機都是唯一的,這在使用平行部署時並非如此。使用平行部署時,應使用靜態 Jakarta 驗證設定。這需要所有版本的應用程式使用相同的 Jakarta 驗證設定。
第三方模組
這不是一個詳盡的清單。Tomcat 社群歡迎對此節內容的貢獻。
Philip Green II 的 Google OAuth 2 模組
此模組的原始程式碼以及包含必要的 Google API 設定詳細資訊的 文件 可在 GitHub 上取得。
使用此模組與 Tomcat 的範例設定如下所示
<jaspic-providers xmlns="https://tomcat.dev.org.tw/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://tomcat.dev.org.tw/xml jaspic-providers.xsd"
version="1.0">
<provider name="google-oauth"
className="org.apache.catalina.authenticator.jaspic.SimpleAuthConfigProvider"
layer="HttpServlet"
appContext="Catalina/localhost /contextPath"
description="Google OAuth test">
<property name="org.apache.catalina.authenticator.jaspic.ServerAuthModule.1"
value="com.idmworks.security.google.GoogleOAuthServerAuthModule" />
<property name="oauth.clientid"
value="obtained-from-Google-console" />
<property name="oauth.clientsecret"
value="obtained-from-Google-console" />
<property name="ignore_missing_login_context"
value="true" />
</provider>
</jaspic-providers>