开发 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
      注意: 安全角色名称中不能包含连字符。在管理控制台中,无法修改含连字符的安全角色名称。另外,BEA 建议对安全角色名使用以下约定:它们应该独一无二。
    3. 定义要使用的身份验证类型以及将应用安全约束的安全领域。在本例中,指定了 FORM 类型,但未指定领域,因此,领域是默认领域,这意味着安全约束将应用到 WebLogic Server 实例启动时激活的安全领域。
    4. 定义一个或多个安全角色并将它们映射到安全约束。在我们的示例中,只在安全约束中定义了一个安全角色 admin,因此在此处只定义一个安全角色名称。但是,实际上可以定义任意数量的安全角色。
      清单 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-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>
  3. 创建一个 Web 应用程序文件,该文件在用户通过输入 URL 请求受保护的 Web 应用程序资源时将生成欢迎屏幕。清单 3-9 显示了一个示例 welcome.jsp 文件。图 3-3 显示的是欢迎屏幕。
    清单 3-9 FORM 身份验证 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:

      http://hostname:7001/security/welcome.jsp

    3. 输入用户名和密码。即显示欢迎屏幕。 
阅读更多
个人分类: Weblogic Security
上一篇开发 BASIC 身份验证 Web 应用程序
下一篇将声明性安全用于 Web 应用程序
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭