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

一概念
 
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
        }
        
    
    } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值