WebLogic 安全性编程

     上一页  下一页    在新窗口中打开目录     
在此处开始内容

确保 Web 应用程序安全

WebLogic Server 支持用于确保 Web 应用程序安全的 J2EE 架构安全模型,其中包括支持声明性授权(在本文档中,也称为声明性安全)和编程授权(在本文档中,也称为编程安全)。

本部分包含下列主题:

注意: 可以使用部署描述符文件和管理控制台确保 Web 应用程序安全。本文档描述了如何使用部署描述符文件。有关使用管理控制台确保 Web 应用程序安全的信息,请参阅使用角色和策略确保 WebLogic 资源安全

WebLogic Server 支持使用 HttpServletRequest.isUserInRoleHttpServletRequest.getUserPrincipal 方法,并支持在部署描述符中使用 security-role-ref 元素,以在 Web 应用程序中实现编程授权。

 


使用 Web 浏览器时执行身份验证

Web 浏览器可以通过超文本传输协议(HyperText Transfer Protocol,简称 HTTP)端口或具有 SSL 的 HTTP (HTTPS) 端口连接到 WebLogic Server。与使用 HTTP 端口相比,使用 HTTPS 端口的优点是具有双重保护。使用 HTTPS 连接时:

如果将服务器配置为使用双向 SSL 身份验证,则服务器和客户端需要互相提供数字证书以证明它们的身份。

用户名和密码身份验证

当用户使用 Web 浏览器通过 HTTP 端口连接到服务器时,WebLogic Server 会执行用户名和密码身份验证。在这种场景下,浏览器和 WebLogic Server 实例通过以下方式进行交互以对用户进行身份验证(请参阅图 3-1):

  1. 用户可通过在 Web 浏览器中输入 WebLogic Server 中的 WebLogic 资源的 URL 来调用该资源。http URL 包含 HTTP 监听端口,例如,http://myserver:7001
  2. WebLogic Server 中的 Web 服务器接收请求。
  3. 注意: WebLogic Server 提供它自己的 Web 服务器,但也支持使用 Apache Server、Microsoft Internet Information Server 和 Netscape Enterprise Server 作为 Web 服务器。
  4. Web 服务器确定 WebLogic 资源是否受安全策略的保护。如果 WebLogic 资源受保护,Web 服务器会使用已建立的 HTTP 连接向用户请求用户名和密码。
  5. 当用户的 Web 浏览器收到 Web 服务器的请求时,它会提示用户输入用户名和密码。
  6. Web 浏览器会将该请求连同用户名和密码一起再次发送给 Web 服务器。
  7. Web 服务器会将该请求转发给 Web 服务器插件。WebLogic Server 为 Web 服务器提供下列插件:
    • Apache-WebLogic Server 插件
    • Netscape 服务器应用程序编程接口(Netscape Server Application Programming Interface,简称 NSAPI)
    • Internet 信息服务器应用程序编程接口(Internet Information Server Application Programming Interface,简称 ISAPI)
    • Web 服务器插件会通过 HTTP 协议将请求连同用户提供的身份验证数据(用户名和密码)一起发送给 WebLogic Server,从而执行身份验证。

  8. 如果身份验证成功,WebLogic Server 会继续确定是否已授权用户访问 WebLogic 资源。
  9. 在针对 WebLogic 资源调用某个方法之前,WebLogic Server 实例会执行安全授权检查。在执行该检查期间,服务器安全机制会从安全上下文中提取用户的凭据,确定用户的安全角色,将用户的安全角色与所请求的 WebLogic 资源的安全策略进行比较,以此验证是否已授权用户针对 WebLogic 资源调用该方法。
  10. 如果授权成功,则服务器会实现请求。
  11. 图 3-1 确保 Web 浏览器登录安全


    确保 Web 浏览器登录安全

数字证书身份验证

当 Web 浏览器用户通过 HTTPS 端口连接到服务器时,WebLogic Server 使用加密和数字证书身份验证。在这种场景下,浏览器和 WebLogic Server 实例通过以下方式进行交互以对用户进行身份验证并向用户授权(请参阅图 3-1):

  1. 用户可通过在 Web 浏览器中输入 WebLogic Server 中的 WebLogic 资源的 URL 来调用该资源。https URL 包含 SSL 监听端口,例如,https://myserver:7002
  2. WebLogic Server 中的 Web 服务器接收请求。
  3. 注意: WebLogic Server 提供它自己的 Web 服务器,但也支持使用 Apache Server、Microsoft Internet Information Server 和 Netscape Enterprise Server 作为 Web 服务器。
  4. Web 服务器检查 WebLogic 资源是否受安全策略的保护。如果 WebLogic 资源受保护,Web 服务器会使用已建立的 HTTPS 连接向用户请求用户名和密码。
  5. 当用户的 Web 浏览器收到 WebLogic Server 发送的请求时,它会提示用户输入用户名和密码。(这一步是可选的。)
  6. Web 浏览器会将该请求连同用户名和密码一起再次发送。(仅在服务器请求时提供。)
  7. WebLogic Server 将它的数字证书提供给 Web 浏览器。
  8. Web 浏览器检查在 URL 中使用的服务器名称(例如,myserver)是否与数字证书中的名称匹配以及数字证书是否由可信的第三方(即可信 CA)颁发。
  9. 如果服务器上执行的是双向 SSL 身份验证,则服务器会向客户端请求数字证书。
  10. 注意: 即使无法将 WebLogic Server 配置为强制与 Web 服务器代理插件进行完全双向 SSL 握手,也可以将代理插件配置为在需要时向服务器提供客户端证书。要达到此目的,请对代理插件进行配置以导出 WebLogic Server 的 HTTP 头中的客户端证书。有关如何配置代理插件以将客户端证书导出到 WebLogic Server 的说明,请参阅使用 WebLogic Server 的 Web 服务器插件中的特定插件配置信息。
  11. Web 服务器将请求转发给 Web 服务器插件。如果设置了安全代理(如果正在使用 HTTPS 协议,则属于这种情况),Web 服务器插件还会通过 HTTPS 协议将请求连同用户提供的身份验证数据(用户名和密码)一起发送给 WebLogic Server 中的 WebLogic 资源,从而执行身份验证。
  12. 注意: 使用双向 SSL 身份验证时,还可以将服务器配置为基于客户端的证书执行标识声明,在这种情况下,不必提供用户名和密码,服务器会从客户端的证书中提取用户名和密码。
  13. 如果身份验证成功,WebLogic Server 会继续确定是否已授权用户访问 WebLogic 资源。
  14. 在针对 WebLogic 资源调用某个方法之前,服务器会执行安全授权检查。在执行该检查期间,服务器会从安全上下文中提取用户的凭据,确定用户的安全角色,将用户的安全角色与所请求的 WebLogic 资源的安全策略进行比较,以此验证是否已授权用户针对 WebLogic 资源调用该方法。
  15. 如果授权成功,则服务器会实现请求。

有关详细信息,请参阅下列文档:

 


个 Web 应用程序、Cookie 和身份验证

默认情况下,WebLogic Server 会向所有 Web 应用程序分配同一 cookie 名称 (JSESSIONID)。使用任何类型的身份验证时,所有使用同一 cookie 名称的 Web 应用程序都使用单一登录进行身份验证。一旦某用户通过身份验证,那么对于向任何使用同一 cookie 名称的 Web 应用程序发出的请求,该身份验证都有效。系统不会再次提示该用户进行身份验证。

如果需要为某 Web 应用程序单独进行身份验证,可为该 Web 应用程序指定唯一的 cookie 名称或 cookie 路径。使用 CookieName 参数指定 cookie 名称并使用 CookiePath 参数指定 cookie 路径,这些参数在 WebLogic 的特定部署描述符 weblogic.xml<session-descriptor> 元素中定义。有关详细信息,请参阅“开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP”中的 session-descriptor

如果要保留该 cookie 名称,并且仍旧需要为每个 Web 应用程序单独进行身份验证,可对每个 Web 应用程序的 cookie 路径参数 (CookiePath) 进行不同的设置。

使用 WebLogic Server,用户可以在使用 HTTP 启动的会话中安全地访问 HTTPS 资源,而不用担心丢失会话数据。有了此功能,网站设计人员可以防止会话被盗用。有关此功能的详细信息,请参阅使用安全 Cookie 防止会话盗用

使用安全 Cookie 防止会话盗用

会话盗用是一个常见的 Web 安全问题。当攻击者设法获取会话 cookie 的副本时(一般是在通过网络传输 cookie 时),会发生会话盗用。只有当数据以明文形式(即,不加密)发送时,才会发生会话盗用。

BEA Systems 为 WebLogic Server 增加了一项功能,使用该功能,用户可以在使用 HTTP 启动的会话中安全地访问 HTTPS 资源,而不用担心丢失会话数据要启用该功能,请在 config.xml 中将 AuthCookieEnabled="true" 添加到 WebServer 元素:

<WebServer Name="myserver" AuthCookieEnabled="true"/>

如果将 AuthCookieEnabled 设置为 true(这是默认设置),会导致WebLogic Server 实例在通过 HTTPS 连接进行身份验证时将一个新的安全 cookie (_wl_authcookie_) 发送到浏览器。一旦设置了该安全 cookie,则只有当从浏览器发送该 cookie 时,会话才可以访问其他受安全约束的 HTTPS。

注意: 即使禁用 cookie,该功能也会有效,原因是:WebLogic Server 将通过安全连接使用 URL 重写功能重写安全的 URL,这样可以将 URL 中的 authCookieID 与 JSESSIONID 一起进行编码。

因此,WebLogic Server 现在使用两个 cookie:JSESSIONID cookie 和 _wl_authcookie_ cookie。默认情况下,JSESSIONID cookie 始终都不安全,但 _wl_authcookie_ cookie 始终都安全。只有在使用加密通信通道时,才会发送安全的 cookie。如果是标准的 HTTPS 登录(HTTPS 是加密的 HTTP 连接),浏览器会同时获得这两个 cookie。对于后续 HTTP 访问,如果您具有有效的 JSESSIONID cookie,则认为您已通过身份验证,但对于 HTTPS 访问,您必须同时具有这两个 cookie 才会认为您已通过身份验证。如果您只具有 JSESSIONID cookie,您必须重新进行身份验证。

启用该功能后,一旦您通过 HTTPS 登录,便只会以加密形式通过网络发送安全的 cookie,因此该 cookie 在传输过程中永远不会被盗用。JSESSIONID cookie 在传输中仍旧容易遭到盗用。因此,网站设计人员可以要求所有敏感数据都使用 HTTPS,从而确保会话不被盗用。虽然 HTTP 会话 cookie 仍旧容易被盗用,但敏感操作需要 _wl_authcookie_ cookie,而该 cookie 无法被盗取,因此,这些操作是受保护的。

 


开发安全的 Web 应用程序

WebLogic Server 针对 Web 浏览器支持三种类型的身份验证:

以下各部分涵盖了使用这些类型的身份验证的不同方式:

开发 BASIC 身份验证 Web 应用程序

使用基本身份验证时,Web 浏览器会弹出一个登录屏幕来响应 WebLogic 资源请求。该登录屏幕会提示用户输入用户名和密码。图 3-2 所示为典型的登录屏幕。

图 3-2 身份验证登录屏幕

身份验证登录屏幕

要开发提供基本身份验证的 Web 应用程序,请执行下列步骤:

  1. 创建 web.xml 部署描述符。请在该文件中包括以下信息(请参阅清单 3-1):
    1. 定义欢迎文件。欢迎文件的名称为 welcome.jsp
    2. 为计划要保护的每组 Web 应用程序资源(即 URL 资源)定义安全约束。每组资源共享一个通用的 URL。通常,HTML 页、JSP 和 Servlet 等 URL 资源受最大的保护,但其他类型的 URL 资源也受支持。在清单 3-1 中,URL 模式指向位于 Web 应用程序的顶级目录中的 welcome.jsp 文件;可以访问 URL 资源的 HTTP 方法(POST 和 GET);以及安全角色名 webuser
    3. 注意: 指定安全角色名称时,请遵循以下约定和限制:
      • 安全角色名称的正确语法与可扩展标记语言(Extensible Markup Language,简称 XML)建议中对 Nmtoken 定义的语法(可从 Web 上获取,网址为 http://www.w3.org/TR/REC-xml#NT-Nmtoken)相同。
      • 不要使用空格、逗号、连字符或以下逗号分隔列表中的任何字符:\t、< >、#、|、&、~、?、( )、{ }。
      • 安全角色名区分大小写。
      • BEA 建议对安全角色名使用以下约定:它们应该独一无二。
    4. 使用 <login-config> 标记定义要使用的身份验证类型以及将应用安全约束的安全领域。在清单 3-1 中指定了 BASIC 类型,并且领域是默认领域,这意味着,当 WebLogic Server 实例启动时,安全约束将应用到活动安全领域。
    5. 定义一个或多个安全角色并将它们映射到安全约束。在我们的示例中,只在安全约束中定义了一个安全角色 webuser,因此,因此在此处只定义一个安全角色名称(请参阅清单 3-1 中的 <security-role> 标记)。但是,实际上可以定义任意数量的安全角色。
    6. 清单 3-1 基本身份验证 web.xml 文件
      <?xml version='1.0' encoding='UTF-8'?>
      <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <web-app>
      <welcome-file-list>
      <welcome-file>welcome.jsp</welcome-file>
      </welcome-file-list>
                <security-constraint>
      <web-resource-collection>
      <web-resource-name>Success</web-resource-name>
      <url-pattern>/welcome.jsp</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      </web-resource-collection>
      <auth-constraint>
      <role-name>webuser</role-name>
      </auth-constraint>
      </security-constraint>
                <login-config>
      <auth-method>BASIC</auth-method>
      <realm-name>default</realm-name>
      </login-config>
                 <security-role>
      <role-name>webuser</role-name>
      </security-role>
      </web-app>
  2. 创建 weblogic.xml 部署描述符。在此文件中,将安全角色名称映射到用户和组。清单 3-2 显示了一个示例文件 weblogic.xml,该文件将在 web.xml 文件中的 <security-role> 标记中定义的安全角色 webuser 映射到名为 myGroup 的组。请注意,委托人可以是用户,也可以是组,因此 <principal-tag> 可用于用户,也可以用于组。使用此配置时,WebLogic Server 只允许 myGroup 中的用户访问受保护的 URL 资源 welcome.jsp
  3. 注意: 从 9.0 版开始,默认角色映射行为是指在未在 weblogic.xml 中指定角色映射时创建空角色映射。在 8.x 版中,如果未包括 weblogic.xml 文件,或包括了该文件但未包括所有安全角色的映射,则没有映射的安全角色默认为其名称与角色名匹配的任何用户或组。有关角色映射行为和向后兼容性设置的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”手册中的了解“已启用组合角色映射”设置部分
    清单 3-2 BASIC 身份验证 weblogic.xml 文件
    <?xml version='1.0' encoding='UTF-8'?>
    <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <weblogic-web-app>
         <security-role-assignment>
    <role-name>webuser</role-name>
    <principal-name>myGroup</principal-name>
    </security-role-assignment>
    </weblogic-web-app>
  4. 创建一个文件,使其生成在用户输入用户名和密码并被授予访问权时显示的欢迎屏幕。清单 3-3 所示为示例 welcome.jsp 文件。图 3-3 所示为欢迎屏幕。
  5. 清单 3-3 BASIC 身份验证 welcome.jsp 文件
    <html>
    <head>
    <title>Browser Based Authentication Example Welcome Page</title>
    </head>
    <h1> Browser Based Authentication Example Welcome Page </h1>
      <p> Welcome <%= request.getRemoteUser() %>!
      </blockquote>
    </body>
    </html>
注意: 清单 3-3 中,请注意,JSP 将调用一个 API (request.getRemoteUser()) 以获取登录用户的名称。可改为使用不同的 API weblogic.security.Security.getCurrentSubject()。要使用该 API 获取用户的名称,请将它与 SubjectUtils API 结合使用,如下所示:
String username = weblogic.security.SubjectUtils.getUsername(
weblogic.security.Security.getCurrentSubject());
图 3-3 欢迎屏幕


欢迎屏幕

  1. 启动 WebLogic Server,然后定义有权访问 URL 资源的用户和组。在 weblogic.xml 文件(请参阅清单 3-2)中,<principal-name> 标记将 myGroup 定义为有权访问 welcome.jsp 的组。因此,请使用管理控制台定义 myGroup 组,再定义一名用户,然后将该用户添加到 myGroup 组中。有关添加用户和组的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”中的用户、组和安全角色
  2. 部署 Web 应用程序并使用在上一步中定义的用户访问受保护的 URL 资源。
    1. 有关部署说明,请参阅部署 Web 应用程序
    2. 打开 Web 浏览器并输入以下 URL:
    3. http://localhost:7001/basicauth/welcome.jsp

    4. 输入用户名和密码。即显示欢迎屏幕。

使用 HttpSessionListener 补偿“浏览器缓存凭据”

浏览器会缓存用户凭据并经常自动将它们重新发送到服务器。这样,即使退出或超时,WebLogic Server 会话也不会受到破坏。可以只缓存当前浏览器会话的凭据,也可以缓存多个浏览器会话的凭据,具体取决于浏览器。

可以通过创建实现 javax.servlet.http.HttpSessionListener 接口的类来验证 WebLogic Server 的会话是否受到了破坏。如果 Web 应用程序中的活动会话列表发生改变,则会通知该接口的实现。要接收通知事件,必须在 web.xml 中的 Web 应用程序部署描述符中配置实现类。

要配置会话监听器类,请执行下列操作:

  1. 打开 Web 应用程序的 web.xml 部署描述符,您将在文本编辑器中为该描述符创建会话监听器类。web.xml 文件位于 Web 应用程序的 WEB-INF 目录中。
  2. 添加使用 web.xml 部署描述符的监听器元素的事件声明。事件声明定义当事件发生时要调用的事件监听器类。例如:

    <listener>
    <listener-class>myApp.MySessionListener</listener-class>
    </listener>

    有关其他信息和依次准则,请参阅 配置事件监听器类

编写并部署会话监听器类。清单 3-4 中显示的示例使用简单计数器跟踪会话计数。

清单 3-4 跟踪会话计数
package myApp;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
public class MySessionListener implements HttpSessionListener {
       private static int sessionCount = 0;

public void sessionCreated(HttpSessionEvent se) {
sessionCount++;
//写入日志或执行其他处理。
}
       public void sessionDestroyed(HttpSessionEvent se) {
if(sessionCount > 0)
sessionCount--;
//写入日志或执行其他处理。
}
}

开发 FORM 身份验证 Web 应用程序

将 FORM 身份验证用于 Web 应用程序时,将提供一个自定义登录屏幕(Web 浏览器在响应 Web 应用程序资源请求时显示)和一个错误屏幕(在登录失败时显示)。可以使用 HTML 页、JSP 或 Servlet 生成登录屏幕。基于表单登录的优点是:可以完全控制这些屏幕,因此可以将它们设计得满足应用程序或企业策略/准则的要求。

登录屏幕会提示用户输入用户名和密码。图 3-4 所示为使用 JSP 生成的典型登录屏幕,而 清单 3-5 所示则为源代码。

图 3-4 基于表单的登录屏幕 (login.jsp)

基于表单的登录屏幕 (login.jsp)

清单 3-5 基于表单的登录屏幕源代码 (login.jsp)
<html>
<head>)
<title>Security WebApp login page</title>
</head>
<body bgcolor="#cccccc">
<blockquote>
<img src=BEA_Button_Final_web.gif align=right>
<h2>Please enter your user name and password:</h2>
<p>
<form method="POST" action="j_security_check">
<table border=1>
<tr>
<td>Username:</td>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="j_password"></td>
</tr>
<tr>
<td colspan=2 align=right><input type=submit
value="Submit"></td>
</tr>
</table>
</form>
</blockquote>
</body>
</html>

图 3-5 所示为使用 HTML 生成的典型登录错误屏幕,而清单 3-6 所示则为源代码。

图 3-5 登录错误屏幕

登录错误屏幕

清单 3-6 登录错误屏幕源代码
<html>
<head>
<title>Login failed</title>
</head>
<body bgcolor=#ffffff>
<blockquote>
<img src=/security/BEA_Button_Final_web.gif align=right>
<h2>Sorry, your user name and password were not recognized.</h2>
<p><b>
<a href="/security/welcome.jsp">Return to welcome page</a> or
<a href="/security/logout.jsp">logout</a>
</b>
</blockquote>
</body>
</html>

要开发提供 FORM 身份验证的 Web 应用程序,请执行下列步骤:

  1. 创建 web.xml 部署描述符。请在该文件中包括以下信息(请参阅清单 3-7):
    1. 定义欢迎文件。欢迎文件的名称为 welcome.jsp
    2. 为计划要保护的每组 URL 资源定义安全约束。每组 URL 资源共享一个通用的 URL。通常,HTML 页、JSP 和 Servlet 等 URL 资源受最大的保护,但其他类型的 URL 资源也受支持。在清单 3-7 中,URL 模式指向 /admin/edit.jsp,从而保护位于 Web 应用程序的 admin 子目录中的 edit.jsp 文件;定义可以访问 URL 资源的 HTTP 方法 (GET);并定义安全角色名 admin
    3. 注意: 安全角色名称中不能包含连字符。在管理控制台中,无法修改含连字符的安全角色名称。另外,BEA 建议对安全角色名使用以下约定:它们应该独一无二。
    4. 定义要使用的身份验证类型以及将应用安全约束的安全领域。在本例中,指定了 FORM 类型,但未指定领域,因此,领域是默认领域,这意味着安全约束将应用到 WebLogic Server 实例启动时激活的安全领域。
    5. 定义一个或多个安全角色并将它们映射到安全约束。在我们的示例中,只在安全约束中定义了一个安全角色 admin,因此在此处只定义一个安全角色名称。但是,实际上可以定义任意数量的安全角色。
    6. 清单 3-7 FORM 身份验证 web.xml 文件
      <?xml version='1.0' encoding='UTF-8'?>
      <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <web-app>
          <welcome-file-list>
      <welcome-file>welcome.jsp</welcome-file>
      </welcome-file-list>
          <security-constraint>
      <web-resource-collection>
      <web-resource-name>AdminPages</web-resource-name>
      <description>
      These pages are only accessible by authorized
      administrators.
      </description>
      <url-pattern>/admin/edit.jsp</url-pattern>
      <http-method>GET</http-method>
      </web-resource-collection>
      <auth-constraint>
      <description>
      These are the roles who have access.
      </description>
      <role-name>
      admin
      </role-name>
      </auth-constraint>
      <user-data-constraint>
      <description>
      This is how the user data must be transmitted.
      </description>
      <transport-guarantee>NONE</transport-guarantee>
      </user-data-constraint>
      </security-constraint>
          <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/fail_login.html</form-error-page>
      </form-login-config>
      </login-config>
          <security-role>
      <description>
      An administrator
      </description>
      <role-name>
      admin
      </role-name>
      </security-role>
      </web-app>
  2. 创建 weblogic.xml 部署描述符。在此文件中,将安全角色名映射到用户和组。清单 3-8 显示了一个示例文件 weblogic.xml,该文件将在文件 web.xml 的 <security-role> 标记中定义的安全角色 admin 映射到名为 supportGroup 的组。使用此配置时,WebLogic Server 将只允许 supportGroup 组中的用户访问受保护的 WebLogic 资源。但是,可以使用管理控制台来修改 Web 应用程序的安全角色,以便其他组可以访问受保护的 WebLogic 资源。
  3. 清单 3-8 FORM 身份验证 weblogic.xml 文件
    <?xml version='1.0' encoding='UTF-8'?>
    <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <weblogic-web-app>
         <security-role-assignment>
    <role-name>admin</role-name>
    <principal-name>supportGroup</principal-name>
    </security-role-assignment>
    </weblogic-web-app>
  4. 创建一个 Web 应用程序文件,使其在用户通过输入 URL 来请求受保护的 Web 应用程序资源时生成欢迎屏幕。清单 3-9 所示为示例 welcome.jsp 文件。图 3-3 所示为欢迎屏幕。
  5. 清单 3-9 表单身份验证 welcome.jsp 文件
    <html>
    <head>
    <title>Security login example</title>
    </head>
      <%
    String bgcolor;
    if ((bgcolor=(String)application.getAttribute("Background")) ==
    null)
    {
    bgcolor="#cccccc";
    }
    %>
      <body bgcolor=<%="\""+bgcolor+"\""%>>
      <blockquote>
    <img src=BEA_Button_Final_web.gif align=right>
    <h1> Security Login Example </h1>
      <p> Welcome <%= request.getRemoteUser() %>!
      <p> If you are an administrator, you can configure the background 
    color of the Web Application.
    <br> <b><a href="admin/edit.jsp">Configure background</a></b>.
      <% if (request.getRemoteUser() != null) { %>
    <p> Click here to <a href="logout.jsp">logout</a>.
    <% } %>
      </blockquote>
    </body>
    </html>
注意: 清单 3-3 中,请注意,JSP 将调用一个 API (request.getRemoteUser()) 以获取登录用户的名称。可改为使用不同的 API weblogic.security.Security.getCurrentSubject()。要使用该 API 获取用户的名称,请将它与 SubjectUtils API 结合使用,如下所示:
String username = weblogic.security.SubjectUtils.getUsername(
weblogic.security.Security.getCurrentSubject());
  1. 启动 WebLogic Server,然后定义有权访问 URL 资源的用户和组。在 weblogic.xml 文件(请参阅清单 3-8)中,<role-name> 标记将 admin 定义为有权访问 edit.jsp 文件的组,并将用户 joe 定义为该组的成员。因此,请使用管理控制台定义 admin 组,定义用户 joe,并将 joe 添加到 admin 组中。也可以定义其他用户并将其添加到组中,这些用户也将有权访问受保护的 WebLogic 资源。有关添加用户和组的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”中的用户、组和安全角色
  2. 部署 Web 应用程序并使用在上一步中定义的用户访问受保护的 Web 应用程序资源。
    1. 有关部署说明,请参阅部署 Web 应用程序
    2. 打开 Web 浏览器并输入以下 URL:
    3. http://hostname:7001/security/welcome.jsp

    4. 输入用户名和密码。即显示欢迎屏幕。

将标识声明用于 Web 应用程序身份验证

在 Web 应用程序中使用标识声明来验证客户端标识以进行身份验证。使用标识声明时,必须满足下列要求:

  1. 身份验证类型必须设置为 CLIENT-CERT。
  2. 必须在服务器中配置标识声明提供程序。如果 Web 浏览器或 Java 客户端请求安全策略保护的 WebLogic Server 资源,WebLogic Server 会要求 Web 浏览器或 Java 客户端具有某种标识。WebLogic 标识声明提供程序将 Web 浏览器或 Java 客户端中的标记映射到 WebLogic Server 安全领域中的某个用户。有关如何配置标识声明提供程序的信息,请参阅“确保 WebLogic Server 安全”中的配置标识声明提供程序
  3. 必须在服务器的安全领域中定义与标记值相对应的用户;否则,客户端将无法访问受保护的 WebLogic 资源。有关在服务器上配置用户的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”中的用户、组和安全角色

将双向 SSL 用于 Web 应用程序身份验证

在 Web 应用程序中使用双向 SSL 来验证客户端是否与声明一致。使用双向 SSL 时,必须满足下列要求:

  1. 身份验证类型必须设置为 CLIENT-CERT。
  2. 必须将服务器配置为使用双向 SSL。有关使用 SSL 和数字证书的信息,请参阅Java 客户端中使用 SSL 身份验证。有关在服务器上配置 SSL 的信息,请参阅“确保 WebLogic Server 安全”中的配置 SSL
  3. 客户端必须使用 HTTPS 访问服务器上的 Web 应用程序。
  4. 必须在服务器中配置标识声明提供程序。如果 Web 浏览器或 Java 客户端请求安全策略保护的 WebLogic Server 资源,WebLogic Server 会要求 Web 浏览器或 Java 客户端具有某种标识。使用 WebLogic 标识声明提供程序,可以启用服务器中的用户名称映射器,该映射器可将 Web 浏览器或 Java 客户端的数字证书映射到 WebLogic Server 安全领域中的用户。有关如何配置安全提供程序的信息,请参阅“确保 WebLogic Server 安全”中的配置 WebLogic 安全提供程序
  5. 必须在服务器的安全领域中定义与客户端的数字证书中的主题识别名 (SubjectDN) 特性相对应的用户,否则客户端将无法访问受保护的 WebLogic 资源。有关在服务器上配置用户的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”中的用户、组和安全角色
注意: 使用 SSL 身份验证时,因为使用管理控制台指定了服务器的 SSL 配置,所以不必使用 web.xmlweblogic.xml 文件来指定服务器配置。

为身份验证方法提供应变机制

Servlet 2.4 specification 允许您定义要在 Web 应用程序中使用的身份验证方法(BASIC、FORM 等)。WebLogic Server 9.2 提供了一个 auth-method 安全模块,该模块允许您定义多种身份验证方法(以逗号分隔列表的形式),因此,该容器可以提供应变机制。将按照在 auth-method 列表中定义值的顺序尝试进行身份验证。

例如,可以在 web.xml 文件的 login-config 元素中定义以下 auth-method 列表:

  <login-config>
<auth-method>CLIENT-CERT,BASIC</auth-method>
</login-config>

这样,容器将会首先尝试通过查看 CLIENT-CERT 值进行身份验证。如果失败,容器将要求用户代理执行 BASIC 身份验证。

如果配置了 FORM 身份验证或 BASIC 身份验证,它们必须位于列表的一端(因为它们需要与用户进行往返通信)。但是,FORM 和 BASIC 不能同时出现在auth-method 值的列表中。

配置

可通过两种方式配置 auth-method 身份验证安全:

使用 WebLogic Java 管理扩展(Java Management Extension,简称 JMX),可以访问 RealmMBean,以创建并管理安全资源。有关详细信息,请参阅“使用 JMX 开发自定义管理实用工具”中的 WebLogic Server 子系统 MBean 概述

开发基于 Swing 的身份验证 Web 应用程序

也可以使用 Web 浏览器来运行使用 Java 基础类(Java 基础类,简称 JFC) Swing 组件开发的图形用户界面(graphical user interface,简称 GUI);Swing 组件工具包集成在 Java 2 平台标准版(Java 2 platform, Standard Edition,简称 J2SE)中。

有关如何使用 Swing 组件为应用程序和 Applet 创建图形用户界面 (GUI) 的信息,请参阅由 Sun Microsystems, Inc. 编写的“Creating a GUI with JFC/Swing”教程(也称为“Swing 教程”)。您可以在 Web 上访问该教程,网址为:http://java.sun.com/docs/books/tutorial/uiswing/

开发了基于 Swing 的 GUI 后,请参阅开发 FORM 身份验证 Web 应用程序,使用基于 Swing 的屏幕执行所需的步骤,以开发提供 FORM 身份验证的 Web 应用程序。

注意: 开发基于 Swing 的 GUI 时,不要依赖于 Java 虚拟机范围的用户来获取 Swing 事件线程的子线程。这既不符合 J2EE 标准,通常在瘦客户端或 IIOP 中也不起作用。请改用以下任一个方法:

部署 Web 应用程序

要在正在“开发”模式下运行的服务器上部署 Web 应用程序,请执行下列步骤:

注意: 有关在任一生产开发模式下部署 Web 应用程序的详细信息,请参阅“将应用程序部署到 WebLogic Server”中的部署应用程序和模块
  1. 设置 Web 应用程序的文件目录结构。图 3-6 所示为名为 basicauth 的 Web 应用程序的目录结构。必须向顶级目录分配该 Web 应用程序的名称,并且必须将子目录命名为 WEB-INF
  2. 图 3-6 Basicauth Web 应用程序目录结构


    Basicauth Web 应用程序目录结构

  3. 要以展开的目录格式而不是 Java 归档 (jar) 格式部署 Web 应用程序,只需将目录移至服务器的 applications 目录中。例如,可以在以下位置部署 basicauth Web 应用程序:
  4. WL_HOME\user_projects\domains\mydomain\applications\basicauth

    如果正在运行 WebLogic Server 实例,则该应用程序应该会自动部署。使用管理控制台验证应用程序是否已部署。

    如果没有 WebLogic Server 实例,则启动服务器时,Web 应用程序应该会自动部署。

  5. 如果尚未执行此操作,请使用管理控制配置将有权访问该 Web 应用程序的用户和组。要确定可以访问受保护的 WebLogic 资源的用户和组,请检查 weblogic.xml 文件。例如,basicauth 示例的 weblogic.xml 文件(请参阅清单 3-2)将 myGroup 定义为唯一有权访问 welcome.jsp 文件的组。

有关部署安全的 Web 应用程序的详细信息,请参阅“将应用程序部署到 WebLogic Server”中的部署应用程序和模块

 


将声明性安全用于 Web 应用程序

实现声明性安全的方式有三种:

  1. 通过管理控制台使用的安全提供程序,如使用角色和策略确保 WebLogic 资源安全中所述。
  2. 通过 Java 容器授权合同 (JACC),如使用 Java 容器授权合同中所述。
  3. 通过部署描述符,将在本部分中讨论。

JACC 标志和安全模型定义了使用这三个方法中的哪一种方法。(有关安全模型的描述,请参阅“使用角色和策略确保 WebLogic 资源安全”可确保 EJB 和 Web 应用程序资源安全的选项。)

要在 Web 应用程序中实现声明性安全,可以使用部署描述符(web.xmlweblogic.xml)定义安全要求。这些部署描述符将该应用程序的逻辑安全性要求映射到该应用程序的运行时定义。在运行时,Servlet 容器使用安全定义强制执行这些要求。有关使用部署描述符的讨论,请参阅开发安全的 Web 应用程序

有关如何使用部署描述符和 externally-defined 元素在 Web 应用程序中以声明方式配置安全的信息,请参阅 externally-defined

有关如何使用管理控制台在 Web 应用程序中配置安全的信息,请参阅使用角色和策略确保 WebLogic 资源安全

 


与 Web 应用程序安全相关的部署描述符

下列主题描述了在 web.xmlweblogic.xml 文件中用于定义 Web 应用程序的安全要求的部署描述符元素:

web.xml 部署描述符

WebLogic Server 支持以下与 web.xml 安全相关的部署描述符元素:

auth-constraint

可选 auth-constraint 元素定义哪些组或委托人有权访问在此安全约束中定义的 Web 资源集合。

下表描述了可以在 auth-constraint 元素中定义的元素。

表 3-1 auth-constraint 元素
元素
必需/
可选
描述
<description>
可选
此安全约束的文字描述。
<role-name>
可选
定义哪些安全角色可以访问在此 <security-constraint> 中定义的资源。使用 <security-role-ref> 元素将安全角色名称映射到委托人请参阅 security-role-ref

使用位置

security-constraint 元素中使用 auth-constraint 元素。

示例

有关如何在 web.xml 文件中使用 auth-constraint 元素的示例,请参阅清单 3-10

security-constraint

security-constraint 元素在 web.xml 文件中用于定义对 web-resource-collection 元素定义的资源集合的访问权限。

下表描述了可以在 security-constraint 元素中定义的元素。

表 3-2 security-constraint 元素
元素
必需/
可选
描述
<web-resource-
collection>
必需
定义应用此安全约束的 Web 应用程序的组件。有关详细信息,请参阅 web-resource-collection
<auth-constraint>
可选
定义哪些组或委托人有权访问在此安全约束中定义的 Web 资源的集合。有关详细信息,请参阅 auth-constraint
<user-data-
constraint>
可选
定义应如何保护客户端和服务器之间的通信数据。有关详细信息,请参阅 user-data-constraint

示例

清单 3-10 说明如何使用 security-constraint 元素定义 web.xml 文件中的 SecureOrdersEast 资源安全。

清单 3-10 安全约束示例
web.xml entries:
<security-constraint>
     <web-resource-collection>
          <web-resource-name>SecureOrdersEast</web-resource-name>
          <description>
             Security constraint for
             resources in the orders/east directory
          </description>
          <url-pattern>/orders/east/*</url-pattern>
          <http-method>POST</http-method>
          <http-method>GET</http-method>
     </web-resource-collection>
     <auth-constraint>
          <description>
           constraint for east coast sales
          </description>
          <role-name>east</role-name>
          <role-name>manager</role-name>
     </auth-constraint>
 <user-data-constraint>
          <description>SSL not required</description>
          <transport-guarantee>NONE</transport-guarantee>
     </user-data-constraint>
</security-constraint>
...

security-role

security-role 元素包含安全角色的定义。该定义包含安全角色的可选描述和安全角色名称。

下表描述了可以在 security-role 元素中定义的元素。

表 3-3 security-role 元素
元素
必需/
可选
描述
<description>
可选
此安全角色的文字描述。
<role-name>
必需
角色名。此处使用的名称在 WebLogic 的特定部署描述符 weblogic.xml 中必须有相对应的条目,该部署描述符将角色映射到安全领域中的委托人。有关详细信息,请参阅 security-role-assignment

示例

有关如何在 web.xml 文件中使用 security-role 元素的示例,请参阅清单 3-13

security-role-ref

security-role-ref 元素将 <security-role> 定义的安全角色名链接到使用 Servlet 逻辑进行硬编码的备用角色名。使用此附加提取层,可以在部署时配置 Servlet,且不必更改 Servlet 代码。

下表描述了可以在 security-role-ref 元素中定义的元素。

表 3-4 security-role-ref 元素
元素
必需/
可选
描述
<description>
可选
角色的文字描述。
<role-name>
必需
定义在 Servlet 代码中使用的安全角色或委托人的名称。
<role-link>
必需
定义稍后将在部署描述符中的 <security-role> 元素中定义的安全角色的名称。

示例

有关如何在 web.xml 文件中使用 security-role-ref 元素的示例,请参阅清单 3-16

user-data-constraint

user-data-constraint 元素定义应如何保护客户端和服务器之间的通信数据。

下表描述了可以在 user-data-constraint 元素中定义的元素。

表 3-5 user-data-constraint 元素
元素
必需/
可选
描述
<description>
可选
文字描述。
<transport-
guarantee>
必需
指定客户端和服务器之间的通信的数据安全要求。
值范围:
NONE - 应用程序不需要任何传输保证。
INTEGRAL - 应用程序要求数据在客户端和服务器之间传输的过程中不会被更改。
CONFIDENTIAL - 应用程序要求传输数据以防止其他实体观察到传输的内容。
当使用 INTEGRALCONFIDENTIAL 传输保证对用户进行身份验证时,WebLogic Server 会建立安全套接口层 (SSL) 连接。

使用位置

security-constraint 元素中使用 user-data-constraint 元素。

示例

有关如何在 web.xml 文件中使用 user-data-constraint 元素的示例,请参阅清单 3-10

web-resource-collection

web-resource-collection 元素标识了一个资源子集,以及在 Web 应用程序中针对这些资源且将应用安全约束的 HTTP 方法。如果未指定 HTTP 方法,则该安全约束应用于所有 HTTP 方法。

下表描述了可以在 web-resource-collection 元素中定义的元素。

表 3-6 web-resource-collection 元素
元素
必需/
可选
描述
<web-resource-name>
必需
此 Web 资源集合的名称。
<description>
可选
Web 资源的文字描述。
<url-pattern>
必需
Web 资源集合的映射或位置。
URL 模式必须使用在 JSR-000154 Java Servlet Specification Version 2.4的 11.2 节中定义的语法。
模式 <url-pattern>/</url-pattern> 将安全约束应用于整个 Web 应用程序。
<http-method>
可选
当客户端尝试访问 Web 资源集合时应用安全约束的 HTTP 方法。如果未指定 HTTP 方法,则安全约束应用于所有 HTTP 方法。

使用位置

security-constraint 元素中使用 web-resource-collection 元素。

示例

有关如何在 web.xml 文件中使用 web-resource-collection 元素的示例,请参阅清单 3-10

weblogic.xml 部署描述符

WebLogic Server 支持以下与 weblogic.xml 安全相关的部署描述符元素:

有关 weblogic.xml 部署描述符的其他信息,请参阅使用 WebLogic Server 开发应用程序 中的 XML 部署描述符 部分。

有关 weblogic.xml 元素的其他信息,请参阅开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP中的 weblogic.xml 部署描述符元素

externally-defined

externally-defined 元素使您可以明确指出,希望由 web.xml 部署描述符的 role-name 元素定义的安全角色使用在管理控制台指定的映射。通过该元素,您可以不必为在特定 Web 应用程序的部署描述符中定义的每个安全角色指定特定的安全角色映射。所以,在同一安全领域中,部署描述符可用于指定和修改某些应用程序的安全性,而管理控制台可用于指定和修改其他应用程序的安全性。

服务器的角色映射行为取决于在管理控制台上选择哪个安全部署模型。有关安全部署模型的信息,请参阅“使用角色和策略确保 WebLogic 资源安全”中的用于确保 Web 应用程序和 EJB 资源安全的选项

注意: 指定安全角色名称时,请遵循以下约定和限制:
使用位置

security-role-assignment 元素中使用 externally-defined 元素。

示例

清单 3-11清单 3-12 以比较的形式说明如何在 weblogic.xml 文件中使用 externally-defined 元素。在 清单 3-12 中,指定 weblogic.xml 中的“webuser” externally-defined 元素的规范意味着,要针对 getReceipts 方法正确配置安全,必须在管理控制台中为 webuser 创建委托人。

注意: 如果需要列出较多数量的委托人,则考虑指定组,而不是指定用户。如果您指定的用户过多,则会引起性能问题。
清单 3-11 使用 web.xml 和 weblogic.xml 文件将安全角色和委托人映射到安全领域
web.xml entries:
<web-app>
...
<security-role>
<role-name>webuser</role-name>
</security-role>
...
</web-app>
<weblogic.xml entries:
<weblogic-web-app>
     <security-role-assignment>
<role-name>webuser</role-name>
<principal-name>myGroup</principal-name>
<principal-name>Bill</principal-name>
<principal-name>Mary</principal-name>
</security-role-assignment>
</weblogic-web-app>
清单 3-12 在 Web 应用程序部署描述符中使用 externally-defined 标记
web.xml entries:
<web-app>
...
<security-role>
<role-name>webuser</role-name>
</security-role>
...
</web-app>
<weblogic.xml entries:
<weblogic-web-app>
     <security-role-assignment>
<role-name>webuser</role-name>
<externally-defined/>
</security-role-assignment>

有关如何使用管理控制台配置 Web 应用程序安全的信息,请参阅使用角色和策略确保 WebLogic 资源安全

run-as-principal-name

run-as-principal-name 元素指定委托人的名称,以用于由配套文件 web.xml 中的 run-as 元素定义的安全角色。

使用位置

run-as-role-assignment 元素中使用 run-as-principal-name 元素。

示例

有关如何使用 run-as-principal-name 元素的示例,请参阅清单 3-13

run-as-role-assignment

run-as-role-assignment 元素将配套文件 web.xml 中的 role-name 元素定义的给定角色名映射到系统中的有效用户名。对于给定 Servlet,此值可由 Servlet 描述符中的 run-as-principal-name 元素替代。如果给定角色名缺少 run-as-role-assignment 元素,则 Web 应用程序容器会选择在 security-role-assignment 元素中定义的第一个委托人名称。

下表描述了可以在 run-as-role-assignment 元素中定义的元素。

表 3-7 run-as-role-assignment 元素
元素
必需
可选
描述
<role-name>
必需
指定在配套文件 web.xml 中的 run-as 元素中定义的安全角色名。
<run-as-principal-name>
必需
指定在配套文件 web.xml 中的 run-as 元素中定义的安全角色名称的委托人。

示例:

清单 3-13 说明如何使用 run-as-role-assignment 元素让 SnoopServlet 始终作为用户 joe 执行。

清单 3-13 run-as-role-assignment 元素示例
web.xml:
  <servlet>
<servlet-name>SnoopServlet</servlet-name>
<servlet-class>extra.SnoopServlet</servlet-class>
<run-as>
<role-name>runasrole</role-name>
</run-as>
</servlet>
<security-role>
<role-name>runasrole</role-name>
</security-role>
weblogic.xml:
  <weblogic-web-app>
<run-as-role-assignment>
<role-name>runasrole</role-name>
<run-as-principal-name>joe</run-as-principal-name>
</run-as-role-assignment>
</weblogic-web-app>

security-permission

security-permission 元素指定与 J2EE 沙盒相关联的安全权限。

示例

有关如何使用 security-permission 元素的示例,请参阅清单 3-14

security-permission-spec

security-permission-spec 元素根据安全策略文件语法指定单个安全权限。有关 Sun 的安全权限规范的实现,请参阅以下 URL:

http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html#FileSyntax

注意: 放弃可选的 codebase 和 signedBy 子句。
使用位置

security-permission 元素中使用 security-permission-spec 元素。

示例

清单 3-14 说明如何使用 security-permission-spec 元素将权限授予 java.net.SocketPermission 类。

清单 3-14 security-permission-spec 元素示例
<weblogic-web-app>
<security-permission>
<description>Optional explanation goes here</description>
<security-permission-spec>
<!—
A single grant statement following the syntax of http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html#FileSyntax, without the "codebase" and "signedBy" clauses, goes here.For example:
-->
grant {
permission java.net.SocketPermission "*", "resolve";
};
</security-permission-spec>
</security-permission>
</weblogic-web-app>

清单 3-14 中,权限 java.net.SocketPermission 是权限类名,“*”表示目标名称,resolve 表示操作(解析主机/IP 名称服务查找)。

security-role-assignment

security-role-assignment 元素声明一个安全角色和 WebLogic Server 安全领域中的一个或多个委托人 s 之间的映射。

注意: 有关将 weblogic-application.xml 部署描述符中的 security-role-assignment 元素用于企业应用程序的信息,请参阅“使用 WebLogic Server 开发应用程序”中的企业应用程序部署描述符元素
示例

清单 3-15 说明如何使用 security-role-assignment 元素为委托人分配 PayrollAdmin 角色。

注意: 如果需要列出较多数量的委托人,则考虑指定组,而不是指定用户。如果您指定的用户过多,则会引起性能问题。
清单 3-15 security-role-assignment 元素示例
<weblogic-web-app>
<security-role-assignment>
<role-name>PayrollAdmin</role-name>
<principal-name>Tanya</principal-name>
<principal-name>Fred</principal-name>
<principal-name>system</principal-name>
</security-role-assignment>
</weblogic-web-app>

 


将编程安全用于 Web 应用程序

您可以在 Servlet 代码中编写 Servlet 以访问用户和安全角色。要执行此操作,请在 servlet 代码中使用下列方法:javax.servlet.http.HttpServletRequest.getUserPrincipaljavax.servlet.http.HttpServletRequest.isUserInRole(String role) 方法。

getUserPrincipal

使用 getUserPrincipal() 方法确定 Web 应用程序的当前用户。如果当前用户中存在一个 WLSUser Principal,此方法会将其返回。如果有多个 WLSUser Principals,则此方法返回由 Subject.getPrincipals().iterator()方法定义的排序中的第一个。如果没有WLSUser Principals,则 getUserPrincipal()方法返回第一个非 WLSGroup Principals。如果没有Principals,或者所有Principals的类型都是 WLSGroup,则此方法返回 null。此行为与 weblogic.security.SubjectUtils.getUserPrincipal() 方法的语义相同。

有关如何使用 getUserPrincipal() 方法的详细信息,请参阅 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Security4.html

isUserInRole

The javax.servlet.http.HttpServletRequest.isUserInRole(String role) 方法返回一个布尔值,该值指出是否已将指定的逻辑安全“角色”授予已通过身份验证的用户。如果未对用户进行身份验证,此方法返回 false。

isUserInRole() 方法将安全角色映射到安全领域中的组名。清单 3-16 显示在 web.xml 文件中与 <servlet> 元素共同用于定义安全角色的元素。

清单 3-16 IsUserInRole web.xml and weblogic.xml 元素
Begin web.xml entries:
...
<servlet>
<security-role-ref>
<role-name>user-rolename</role-name>
<role-link>rolename-link</role-link>
</security-role-ref>
</servlet>
<security-role>
<role-name>rolename-link</role-name>
</security-role>
...
Begin weblogic.xml entries:
...
<security-role-assignment>
<role-name>rolename-link</role-name>
<principal-name>groupname</principal>
<principal-name>username</principal>
</security-role-assignment>
...

字符串 role 映射到在 <role-name> 元素中提供的名称,该元素嵌套在 web.xml 部署描述符中 <servlet>声明的 <security-role-ref> 元素内。<role-name> 元素用于在 Servlet 代码中定义安全角色或委托人(用户或组)的名称。<role-link> 元素映射到在 weblogic.xml 部署描述符中的 <security-role-assignment> 元素中定义的 <role-name>

注意: 指定安全角色名称时,请遵循以下约定和限制:

例如,如果客户端已作为安全角色为 manager 的用户 Bill 成功登录,则以下方法将返回 true:

request.isUserInRole("manager")

清单 3-17 提供了一个示例。

清单 3-17 安全角色映射示例
Servlet code: 
out.println("Is the user a Manager?" +
                 request.isUserInRole("manager"));
web.xml entries:
<servlet>
.. .
   <role-name>manager</role-name>
   <role-link>mgr</role-link>
.. .
</servlet>
<security-role>
   <role-name>mgr</role-name>
</security-role>
weblogic.xml entries:
<security-role-assignment>
<role-name>mgr</role-name>
<principal-name>bostonManagers</principal-name>
<principal-name>Bill</principal-name>
<principal-name>Ralph</principal-name>
</security-role-ref>

 


使用编程身份验证 API

有一些应用程序适合使用编程身份验证。

WebLogic Server 提供服务器端 API。该 API 支持从 Servlet 应用程序中进行编程身份验证:

weblogic.servlet.security.ServletAuthentication

通过使用该 API,可以编写 Servlet 代码来对用户执行身份验证、让用户登录,以及将用户与当前会话相关联,以便在默认(活动)安全领域中注册该用户。完成登录后,看上去就会像是用户使用标准机制登录一样。

您可以选择将 WebLogic 提供的两个类中的任意一个与 ServletAuthentication API 配合使用:weblogic.security.SimpleCallbackHandler 类或 weblogic.security.URLCallbackHandler 类。有关这些类的详细信息,请参阅 Javadocs for WebLogic Classes

清单 3-18 所示为使用 SimpleCallbackHandler 的示例。清单 3-19 所示为使用 URLCallbackHandler 的示例。

清单 3-18 使用 SimpleCallbackHandler 类的编程身份验证代码段
CallbackHandler handler = new SimpleCallbackHandler(username,
                                                               password);
Subject mySubject =
weblogic.security.services.Authentication.login(handler);
weblogic.servlet.security.ServletAuthentication.runAs(mySubject, request);
// 该处请求为 httpservletrequest 对象。
清单 3-19 使用 URLCallbackHandler 类的编程身份验证代码段
CallbackHandler handler = new URLCallbackHandler(username,
                                                           password);
Subject mySubject =
weblogic.security.services.Authentication.login(handler);
weblogic.servlet.security.ServletAuthentication.runAs(mySubject, request);
// 该处请求httpservletrequest 对象。

  返回顶部       上一页  下一页