通过示例更好地说明了创建定制标记库涉及的步骤。以下示例显示用于创建名为 sslCheck 的新标记库的步骤。此标记库使用安全套接字层(SSL)用来保护 Web 站点。SSL 允许 Web 浏览器与 Web 服务器之间进行安全连接,而 sslCheck 标记提供了使用安全连接的灵活方法。可以在任何 JSP 脚本包括 Java™ 和 JavaScript™ 中使用该标记。
下列简单标记实现检查所用的协议,然后将用户重定向至安全页或错误页, 这取决于标记的参数化(在后面说明)。此安全连接实现仅对 JSP 页(服务器端动态运行页)有效,对 HTML(静态)页是无效的。
创建 sslCheck .java
package com.ibm.entry.security; import java.io.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.TagSupport; public class sslCheck extends TagSupport { private String errorpage=null; public void setErrorpage(String errorpage) { this.errorpage=errorpage; } public int doStartTag() throws JspException { try { HttpServletRequest request=(HttpServletRequest)pageContext.getRequest(); HttpServletResponse response=(HttpServletResponse)pageContext.getResponse(); if(request.getScheme().indexOf("https")==-1) { if(errorpage!=null) { // redirect to the error page response.sendRedirect(errorpage); } else { // redirect to the page using ssl String jumpURL="https://"+request.getServerName()+request.getRequestURI(); if(request.getQueryString()!=null) jumpURL+="?"+request.getQueryString(); response.sendRedirect(jumpURL); } return SKIP_PAGE; } } catch (IOException ioe) { throw new JspTagException("sslcheck tag failed"); } return EVAL_BODY_INCLUDE; } public int doEndTag() { return EVAL_PAGE; } }
<?xml version="1.0" encoding="UTF-8"?> <taglib> <tlibversion>1.0</tlibversion> <shortname>sslchk</shortname> <info>Tag library for checking SSL</info> <tag> <name>sslcheck</name> <tagclass>com.ibm.entry.security.sslCheck</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>errorpage</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
<%@ taglib uri="/WEB-INF/tlds/sslCheck.tld" prefix="sslchk" %>
选项 | 描述 |
---|---|
<sslchk:sslcheck errorpage="error_page"/> | 当请求到达 JSP 且未在使用 SSL 时,将显示使用 errorpage 属性定义的页。在开始使用应用程序之前, 必须使用错误消息创建错误页。 |
<sslchk:sslcheck/> | 使用不带 errorpage 属性的标记会立即将页重定向至同一位置,但会使用安全连接。 |
<wsad install directory>\plugins\com.ibm.etools.websphere.runtime\etc\DummyServerKeyFile.jksWebAS 是 JKS 文件的密码。
<%@ taglib uri="/WEB-INF/tlds/sslCheck.tld" prefix="sslchk" %> <sslchk:sslcheck/>