zoukankan      html  css  js  c++  java
  • 实现一个基本防盗链标签

    1. 标签处理类

     1 public class MyReferer extends BodyTagSupport {
     2     private String site;
     3     private String back;
     4     public String getSite() {
     5         return site;
     6     }
     7     public void setSite(String site) {
     8         this.site = site;
     9     }
    10     public String getBack() {
    11         return back;
    12     }
    13     public void setBack(String back) {
    14         this.back = back;
    15     }
    16     public int doEndTag() throws JspException {
    17         // 获取JSP上下文环境对象
    18         PageContext pageContext = this.pageContext;
    19         // 获取到request对象
    20         HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
    21         // 判断
    22         String header = request.getHeader("referer");
    23         if(header != null && header.startsWith(getSite())){
    24             // 执行后续的页面
    25             return Tag.EVAL_PAGE;
    26         }else{
    27             // 页面的重定向
    28             HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
    29             try {
    30                 response.sendRedirect(getBack());
    31             } catch (IOException e) {
    32                 e.printStackTrace();
    33             }
    34             // 不执行
    35             return Tag.SKIP_PAGE;
    36         }
    37     }
    38 }

    2. 描述文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <taglib 
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
     6     version="2.1">
     7   <!-- 2. 编写标签库描述文件 -->  
     8   <tlib-version>1.0</tlib-version>
     9   <short-name>jnb</short-name>
    10    <tag>  
    11     <name>referer</name>
    12     <tag-class>cn.itcast.custom.MyReferer</tag-class>
    13     <body-content>empty</body-content>
    14      <attribute>
    15         <name>site</name>
    16         <required>true</required>
    17         <rtexprvalue>true</rtexprvalue>
    18     </attribute>
    19      <attribute>
    20         <name>back</name>
    21         <required>true</required>
    22         <rtexprvalue>true</rtexprvalue>
    23     </attribute>
    24   </tag>
    25 </taglib>    

    3. 引入和使用

    1 <%@taglib uri="/WEB-INF/referer.tld" prefix="my"%>
    2    <my:referer site=http://localhost:8080/day11/list.jsp
    3  back="/day11/list.jsp"/>
  • 相关阅读:
    守护进程的创建(syslog函数)
    进程控制fork vfork,父子进程,vfork保证子进程先运行
    进程概述,父子进程
    gdb调试分析多线程死锁
    tcp握手
    实现自己的ls命令
    获取当前目录getcwd,设置工作目录chdir,获取目录信息
    目录的创建,删除,获取当前目录
    文件的移动,删除 rename remove unlink 函数
    sendkeys
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3736658.html
Copyright © 2011-2022 走看看