天天看点

案例:开发防盗链标签

案例:开发防盗链标签

一、创建一个标签处理类RefererTag.java

package com.hbsi.web.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.jsp.JspContext;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.SkipPageException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class RefererTag extends SimpleTagSupport {

    private String site;

    private String page;

    public void setSite(String site) {

       this.site = site;

    }

    public void setPage(String page) {

       this.page = page;

    }

    @Override

    public void doTag() throws JspException, IOException {

       // TODO Auto-generated method stub

       JspContext jc=this.getJspContext();

       PageContext pc=(PageContext) jc;

       HttpServletRequest request=(HttpServletRequest) pc.getRequest();

       HttpServletResponse response=(HttpServletResponse) pc.getResponse();

       String referer=request.getHeader("referer");

       if(referer==null || !referer.startsWith(site)){

           //跳转到首页

           if(page.startsWith(request.getContextPath())){

              response.sendRedirect(page);

           }else if(page.startsWith("/")){

              response.sendRedirect(request.getContextPath()+page);

           }else{

              response.sendRedirect(request.getContextPath()+"/"+page);

           }

           throw new SkipPageException();

       }

    }

}

二、创建一个标签描述符文件dhw.tld并描述这个标签的属性

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

 <tlib-version>1.0</tlib-version>

 <jsp-version>1.2</jsp-version>

 <short-name>dhw</short-name>

 <uri>http://www.dhw.com</uri>

 <tag>

  <name>referer</name>

  <tag-class>com.hbsi.web.tag.RefererTag</tag-class>

  <body-content>empty</body-content>

  <attribute>

   <name>site</name>

   <required>true</required>

   <rtexprvalue>true</rtexprvalue>

  </attribute>

  <attribute>

   <name>page</name>

   <required>true</required>

   <rtexprvalue>true</rtexprvalue>

  </attribute>

 </tag>

</taglib>

三、在web.xml文件(TestReferer.jsp)中声明TLD的位置

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://www.dhw.com" prefix="dhw"%>

<dhw:referer site="http://localhost" page="/CustomerTagDemo/index.jsp" /><%--防盗链 --%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    <title>My JSP 'TestReferer.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >

    -->

  </head>

  <body>

    明星信息------------------明星信息    

  </body>

</html>

四、跳转到主页index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >

    -->

  </head>

  <body>

    This is my JSP page. <br>

    <a href="/CustomerTagDemo/example/TestReferer.jsp">明星档案</a>

  </body>

</html>

继续阅读