欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Jsp标签_简单标签_防盗链和转义标签的实现

程序员文章站 2022-03-23 20:45:38
一概念   1防盗链     在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,...
一概念

 

1防盗链

 

  在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件,通过referer,网站可以检测目标网页访问的来源网页。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

 

2页面中的转义字符

 

  在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。

 

字符 转义字符

" &quot;

& &amp;

< &lt;

> &gt;

空格 &nbsp;

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

 

2.1防盗链的实现

 

  1.tld约束

 

复制代码

<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处理类

 

复制代码

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

        }

        

    

    } 

}