鑑別過濾器
您可以使用鑑別過濾器,來決定特定 HTTP Servlet 要求是否交由特定提供者處理。
Liberty 伺服器的鑑別過濾器使用 server.xml 檔中之 authFilter 元素指定的過濾準則,來決定特定的 HTTP Servlet 要求是否交由特定提供者(例如:OpenID、OpenID Connect 或 SPNEGO)來處理,以進行鑑別。
如果符合 authFilter 元素中的所有條件,參照該 authFilter 元素的特定提供者就會處理 HTTP Servlet 要求。只要不符合 authFilter 元素中的任一條件,該提供者就不會處理 HTTP Servlet 要求。
支援的元素
authFilter 元素支援下列元素:userAgent、host、webApp、remoteAddress 和 requestUrl。
- userAgent 元素會與對應的標頭值相互比較,這個標頭值擷取自送入的 HTTP Servlet 要求。userAgent 元素會與 "User-Agent" HTTP 要求標頭相互比較,這個標頭是識別原始要求所用的用戶端軟體。若為 Web 用戶端瀏覽器,此值會反映用來起始要求的瀏覽器類型(Internet Explorer、Firefox、Safari 等)。
- host 元素的用法與 userAgent 元素類似。host 元素會與 "Host" HTTP 要求標頭相互比較,這個標頭是識別要求的目標主機名稱。
- webApp 元素用來指定 Liberty 伺服器上所管理,並且要用這個鑑別過濾器保護的應用程式或應用程式清單。
- remoteAddress 元素會與傳送該 HTTP 要求之用戶端應用程式的遠端 TCP/IP 位址相互比較。您可以配置萬用字元來指定子網路和範圍,作法是使用 matchType 屬性的 lessThan 或 greaterThan 值,如這個主題後面的範例所示。
- requestUrl 元素會與用戶端應用程式發出要求時所用的 URL 相互比較。可配置單一 URL 型樣或值清單(以垂直線字元分隔),如這個主題後面的範例所示。
「鑑別過濾器」範例
- 要求 URL 包含型樣
- 下列範例顯示鑑別過濾器的一般配置。在這裡,只要送入要求的要求 URL 含有 "/SimpleServlet",就會交由配置成使用這個過濾器的服務處理。
<authFilter id="myAuthFilter"> <requestUrl id="myRequestUrl" urlPattern="/SimpleServlet" matchType="contains"/> </authFilter>
- 要求 URL 包含型樣集中的一個型樣
- 在下列範例中,指定了要求 URL 清單(以垂直線字元分隔)。如果要由配置成使用這個過濾器的服務來處理送入要求,送入要求 URL 必須包含下列任一項:"/SimpleServlet"、"/EmployeeRoleServlet" 或 "/AllRoleServlet"。
<authFilter id="myAuthFilter"> <requestUrl id="myURL" urlPattern="/SimpleServlet|/EmployeeRoleServlet|/AllRoleServlet" matchType="contains" /> </authFilter>
- Web 應用程式名稱包含型樣
- 在下列範例中,鑑別過濾器中指定了 Web 應用程式名稱。送入要求的目標必須是
"myApp" 應用程式,配置成使用這個過濾器的服務才會處理它。
<authFilter id="myAuthFilter"> <webApp id="myWebApp" name="myApp" matchType="contains"/> </authFilter>
- Web 應用程式名稱包含型樣集中的一個型樣
- 在下列範例中,指定了 Web 應用程式清單(以垂直線字元分隔)。如果要由配置成使用這個過濾器的服務來處理送入要求,送入要求的目標必須是下列任一應用程式:"myApp1"、"myApp2" 或 "myApp3"。
<authFilter id="myAuthFilter"> <webApp id="myWebApp" name="myApp1|myApp2|myApp3" matchType="contains"/> </authFilter>
- 要求源自於特定 IP 位址
- 下列範例顯示如何在 remoteAddress 元素中使用萬用字元。當使用這項配置時,只要要求來自 127.0.0.* 範圍中的任一 IP 位址,配置成使用這個過濾器的服務就會處理送入要求。
<authFilter id="myAuthFilter"> <remoteAddress id="myRemoteAddress" ip="127.0.0.*" matchType="equals"/> </authFilter>
- 排除型樣
- 下列範例顯示如何在 requestUrl 元素中使用值清單(以垂直線字元分隔)。只要符合清單中的任何型樣,就足以滿足該特定元素的需求。在本例中,要求 URL 必須包含 "/SimpleServlet"、"/EmployeeRoleServlet" 或 "/AllRoleServlet"。此外,要求 URL 不得包含 "/ManagerRoleServlet",且要求必須來自 Internet Explorer 使用者代理程式。
<authFilter id="myAuthFilter"> <requestUrl id="myURL1" urlPattern="/SimpleServlet|/EmployeeRoleServlet|/AllRoleServlet" matchType="contains" /> <requestUrl id="myURL2" urlPattern="/ManagerRoleServlet" matchType="notContain" /> <userAgent id="myAgent" agent="IE" matchType="contains" /> </authFilter>
- 使用所有子元素的範例
- 如果要由配置成使用這個過濾器的服務來處理送入要求,該要求必須符合下列條件:
- 要求 URL 中包含 "/SimpleServlet" 型樣
- 目標是含有 "host.example.com" 的網域
- 來自 IP 位址 127.0.0.1
- 來自 Firefox 瀏覽器
- The name of the target application is myApp
<authFilter id="myAuthFilter"> <requestUrl id="myRequestUrl" urlPattern="/SimpleServlet" matchType="contains"/> <host id="myHost" name="host.example.com" matchType="contains"/> <remoteAddress id="myAddress" ip="127.0.0.1" matchType="equals" /> <userAgent id="myUserAgent" agent="Firefox" matchType="equals"/> <webApp id="myWebApp" name="myApp" matchType="contains"/> </authFilter>