现在的位置: 首页 > 综合 > 正文

开发安全应用程序(三)– 开发表单登录页面

2013年01月17日 ⁄ 综合 ⁄ 共 4155字 ⁄ 字号 评论关闭
 开发表单登录页面
Web 客户机(浏览器)可以通过使用下列其中一种机制来对 Web 服务器认证用户:

HTTP 基本认证
Web 服务器请求认证 Web 客户机,而 Web 客户机在 HTTP 头中传送用户和密码信息。

HTTPS 客户机认证
此机制要求用户(Web 客户机)拥有公用密钥证书。Web 客户机将此证书发送至请求客户机证书的 Web 服务器。这是一种使用 HTTPS 协议的强壮认证机制。

基于表单的认证
对于此认证机制,您可以控制登录屏幕的外观。

HTTP 基本认证将用户密码以简单 Base64 编码方式从 Web 客户机发送至 Web 服务器。基于表单的认证将用户密码以纯文本格式从浏览器发送至 Web 服务器。所以,除非使用 HTTPS,否则 HTTP 基本认证和基于表单的认证都不是很安全。

Web 应用程序部署描述符包含关于要使用哪种认证机制的信息。使用基于表单的认证时,部署描述符还包含登录和错误页面的项。登录页面可以是 HTML 页面或 JSP 页面。当从应用程序访问受保护的资源(如 servlet、JSP 或 HTML 页面)时,将在 Web 客户机上显示这个登录页面。如果认证失败,则将显示错误页面。您可以编写登录和错误页面以满足应用程序的需要并控制那些页面的外观。在汇编应用程序期间, 汇编程序可以设置应用程序的认证机制并在部署描述符中设置登录和错误页面。

有关更多信息和代码示例,参见示例:表单登录。

Copy code

示例:表单登录
以下是表单应该如何编码到 HTML 页面中的示例:
<form method="POST" action="j_security_check">
  <input type="text" name="j_username">
  <input type="text" name="j_password">
</form>
登录表单的操作必须始终是 j_security_check。应使用 j_username 输入字段来获取用户名,并应该使用 j_password 输入字段来获取用户的密码。

当 从 Web 客户机接收到请求时,Web 服务器将已配置的“表单”页面发送至客户机并保留原始请求。当 Web 服务器从 Web 客户机接收到已完成的“表单”页面时,Web 服务器将从表单中抽取用户名和密码并认证用户。如果认证成功,Web 服务器将把调用重定向至原始请求。如果认证失败,Web 服务器将把调用重定向至已配置的错误页面。

下面是 HTML 登录页面的示例:

<!-- login.html -->
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <meta http-equiv="Pragma" content="no-cache">
  <title>Security FVT Login Page </title>
</head>

<body>

  <h2>Form Login</h2>

  <form method="post" action="j_security_check">
    <p>
    <strong>You may have entered an invalid user ID
      or password. To correct the problem, please enter
      your correct user ID and password. If you have
      forgotten your user ID or password, please contact
      the server administrator.</strong>
    </p>
    <p>
    <strong>Please enter user ID and password:</strong>
    <br>
    <strong>User ID</strong>
    <input type="text" size="20" name="j_username">
    <strong>Password</strong>
    <input type="password" size="20" name="j_password">
    </p>

    <p>
    <strong>And then click this button:</strong>
    <input type="submit" name="login" value="Login">
    </p>
  </form>

</body>
</html>
下面是 JSP 错误页面的示例:

<!-- error.jsp -->
<jsp:useBean id="ErrorReport" scope="request"
          class="com.ibm.websphere.servlet.error.ServletErrorReport"/>
<DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title>Error <%=ErrorReport.getErrorCode()%></title>
</head>
<body>

<H1>SecFVTServlet1 Error
  <%= ErrorReport.getErrorCode() %> </H1>

<% if (ErrorReport.getErrorCode() >= 500 &&
  ErrorReport.getErrorCode() != response.SC_SERVICE_UNAVAILABLE) {%>

  <H4>An error has occured while processing request:
    <%= HttpUtils.getRequestURL(request) %></H4>

  <B>Message: </B><%= ErrorReport.getMessage() %><BR>
  <B>StackTrace:</B><%= ErrorReport.getStackTrace() %>

<% } else if (ErrorReport.getErrorCode() == response.SC_NOT_FOUND) { %>
  Document Not Found
<% } %>

</html>
在将 Web 应用程序配置为使用基于表单的认证之后,部署描述符包含登录配置,如下所示:

<login-config id="LoginConfig_1">
<auth-method>FORMauth-method>FORM>
<realm-name>Example Form-Based Authentication Area</realm-name>
<form-login-config id="FormLoginConfig_1">
  <form-login-page>/login.html</form-login-page>
  <form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
下面是显示这些示例的登录和错误页面的样本“Web 应用程序归档”(WAR)文件的目录结构:

META-INF
META-INF/MANIFEST.MF
login.html
error.jsp
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/aServlet.class
表单注销

表单注销是允许用户在不必关闭所有 Web 浏览器会话的情况下从应用程序注销的机制。在用户注销之后,访问受保护的 Web 资源将要求重新进行认证。此功能不是 J2EE 规范所必需的,而是作为 WebSphere 安全性中的附加功能提供的。

表单注销是按以下方式工作的:

在 Web 浏览器中指定注销表单 URI 的 URI。
浏览器装入表单。
用户单击表单的提交按钮来注销。
WebSphere 安全性代码将用户注销。
注销时,会将该用户重定向至注销退出页面。
表 单注销不需要任何部署描述符中的任何属性。它只是随 Web 应用程序包含的 HTML 或 JSP 文件。表单注销页面与大多数 HTML 表单非常相似。然而,与表单登录页面相似,表单注销页面具有 Web 容器所识别的特殊 POST 操作。于是,Web 容器将其分派到特殊的内部 WebSphere 表单注销 servlet。表单注销页面中的 POST 操作的值必须是 ibm_security_logout。

可 以在注销表单中指定注销退出页面。退出页面可以是 HTML 或 JSP 文件,用户注销之后将重定向到该文件。注销退出页面与注销表单必须驻留在同一个 Web 应用程序中。注销退出页面只是作为表单注销页面中的一个参数指定的。如果没有指定注销退出页面,则将把缺省注销 HTML 消息返回给用户。

下面是一个样本 HTML 注销表单。此表单将注销退出页面配置为在注销后将用户重定向回登录页面。

<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Pragma" content="no-cache">
<title>Logout Page </title>
<head>

<body>
<h2>Sample Form Logout</h2>
<form method="post" action="ibm_security_logout" name="logout">
  <p>
    <strong> Click this button to logout:</strong>
    <input type="submit" name="logout" value="Logout">
    <input type="hidden" name="logoutExitPage" value="/login.html">
  </p>
</form>

</body>
</html>

创建表单登录页面和用于执行基于表单的认证的组件。

创建错误页面。可以进行编程以将错误页面设计成重试认证或显示适当的错误消息。

(可选)创建表单注销页面。

将登录、错误和注销页面汇编到 WAR 文件中。应该相对于 WAR 文件的根目录来放置这些页面。例如,如果在部署描述符中将登录页面配置为 /login.html,则将登录页面放在 WAR 文件的根目录中。也可以使用“应用程序汇编工具”来执行此步骤。

抱歉!评论已关闭.