3_Jsp標籤_簡單標籤_防盜鏈和轉義標籤的實現

 一律念html

1防盜鏈java

  在HTTP協議中,有一個表頭字段叫referer,採用URL的格式來表示從哪兒連接到當前的網頁或文件,經過referer,網站能夠檢測目標網頁訪問的來源網頁。有了referer跟蹤來源就好辦了,這時就能夠經過技術手段來進行處理,一旦檢測到來源不是本站即進行阻止或者返回指定的頁面。web

2頁面中的轉義字符apache

  在HTML中,定義轉義字符串的緣由有兩個:第一個緣由是像「<」和「>」這類符號已經用來表示HTML標籤,所以就不能直接看成文本中的符號來使用。爲了在HTML文檔中使用這些符號,就須要定義它的轉義字符串。tomcat

字符 轉義字符
" &quot;
& &amp;
< &lt;
> &gt;
空格 &nbsp;

-------------------------------------------------------------------------------------------------------app

2.1防盜鏈的實現less

  1.tld約束webapp

<tag>
    <name>referer</name>
    <tag-class>com.tag.RefererTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
            <name>site</name>
            <required>true</required>
    </attribute>
    <attribute>
            <name>page</name>
            <required>true</required>
    </attribute>
</tag>

   2.實現了簡單Tag接口的自定義Tag處理類jsp

package com.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 {
        
        PageContext context = (PageContext)this.getJspContext();
        HttpServletRequest request = (HttpServletRequest)context.getRequest();
        HttpServletResponse response = (HttpServletResponse)context.getResponse();
        String referer = request.getHeader("referer");
        String path = request.getContextPath();
        if(referer==null||referer.startsWith(site)){
            if(page.startsWith(path))
                response.sendRedirect(page);
            else if(page.startsWith("/"))
                response.sendRedirect(path+page);
            else
                response.sendRedirect(path+"/"+page);
        //    throw new SkipPageException(); 不執行  
     //    執行則是jsp片斷invoke
} } }

  3. 頁面引用ide

------------index.jsp-------------------referer.jsp-----------

  4.結果頁面跳轉

-----------------------------------------------------------------------------------------------------------

2.2轉義標籤的實現

  1.tld約束

<tag>
     <name>htmlfilter</name>
    <tag-class>com.tag.HtmlFilterTag</tag-class>
    <body-content>scriptless</body-content>
    <!-- <body-content>tagdependent</body-content> -->
</tag>

  2.自定義Tag處理類(其中Filter方法來自)

apache_tomcat-6.0.39.webapps\examples\WEB-INF\classes.util包

package com.tag;

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class HtmlFilterTag extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
        StringWriter content = new StringWriter();
        jf.invoke(content);
        
        String _content = filter(content.getBuffer().toString());
        this.getJspContext().getOut().write(_content);
        
    }


      public static String filter(String message) {

            if (message == null)
                return (null);

            char content[] = new char[message.length()];
            message.getChars(0, message.length(), content, 0);
            StringBuffer result = new StringBuffer(content.length + 50);
            for (int i = 0; i < content.length; i++) {
                switch (content[i]) {
                case '<':
                    result.append("&lt;");
                    break;
                case '>':
                    result.append("&gt;");
                    break;
                case '&':
                    result.append("&amp;");
                    break;
                case '"':
                    result.append("&quot;");
                    break;
                default:
                    result.append(content[i]);
                }
            }
            return (result.toString());

        }
    
}

 

  3.頁面引用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://self-tag-with-hello" prefix="i" %>
<html>
  <head>
    <title>filter</title>
  </head>
  <body>
      <i:htmlfilter>
          <a href="${pageContext.request.contextPath}/referer.jsp">小呵呵</a>
            <body-content>scriptless</body-content>    
      </i:htmlfilter>
              
      
  </body>
</html>
View Code

  4.結果展現

  5.body-content類型介紹

相關文章
相關標籤/搜索