认证过滤器
可使用认证过滤器确定特定 HTTP servlet 请求是否由特定提供程序处理。
Liberty 服务器认证过滤器使用 server.xml 文件的 authFilter 元素中指定的过滤条件来确定特定 HTTP Servlet 请求是否由特定提供者(例如,OpenID、OpenID Connect 或 SPNEGO)处理以获取认证。
如果满足 authFilter 元素中的所有条件,那么该 HTTP servlet 请求由 authFilter 元素引用的特定提供程序处理。如果没有满足 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 包含模式
- 以下示例显示认证过滤器的典型配置。此处,带有包含 "/SimpleServlet" 的请求 URL 的任何传入请求由配置为使用此过滤器的服务处理。
<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 应用程序的管道列表。要使用配置为使用此过滤器的服务处理传入请求,传入请求 URL 必须以
"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 浏览器
- 目标应用程序的名称为 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>