• javaWeb 使用jsp标签进行防盗链


    /**
     * 1.新建类继承SimpleTagSupport
     *     新建2个属性, 添加对应的set方法
     *     覆盖doTag()方法
     */
    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 webSite;
        private String jumpPage;
    
        public void setWebSite(String webSite) {
            this.webSite = webSite;
        }
    
        public void setJumpPage(String jumpPage) {
            this.jumpPage = jumpPage;
        }
    
        @Override
        public void doTag() throws JspException, IOException {
            PageContext pageContext = (PageContext) this.getJspContext();
            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
            HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
    
            String webRoot = request.getContextPath();
            // 得到 referer
            String referer = request.getHeader("referer");
            if (referer == null || !referer.startsWith(webSite)) { // 是盗链者
                if (jumpPage.startsWith(webRoot)) { // "/web/index.jsp"
                    response.sendRedirect(jumpPage);
                } else if (jumpPage.startsWith("/")) { // "/index.jsp"
                    response.sendRedirect(webRoot + jumpPage);
                } else {// "index.jsp"
                    response.sendRedirect(webRoot + "/" + jumpPage);
                }
                throw new SkipPageException();// 如果是盗链者,就抛出这个异常
            }
        }
    }
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 文件名 /WEB-INF/referer.tld -->
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
        <tlib-version>1.0</tlib-version>
        <short-name>anyName</short-name><!-- 这个值可以任意设置 -->
        <uri>anyUri</uri><!-- 这个Uri可以任意设置,但是不要与别的 .tld 文件相同 -->
    
        <tag>
            <name>referer</name>
            <tag-class>de.bvb.web.tag.RefererTag</tag-class>
            <body-content>empty</body-content> <!-- 不要标签体 -->
            <attribute>
                <name>webSite</name><!-- 需要添加前面设置的2个属性 -->
                <required>true</required><!-- required表示是否必须 -->
                <rtexprvalue>true</rtexprvalue><!-- rtexprvalue表示属性的值是否可以使用el表达式 -->
            </attribute>
            <attribute>
                <name>jumpPage</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    
    </taglib>
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="referer" uri="/WEB-INF/referer.tld"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <!-- 3.设置好标签库以后添加下面这行标签就可以进行防盗链了。
    webSite表示不设置防盗链的站点,jumpPage表示发现盗链以后跳转的页面 -->
    <referer:referer webSite="http://localhost" jumpPage="index.jsp" />
    
    <html>
    <head>
    <title>通过jsp标签进行防盗链</title>
    </head>
    <body>某某某的文章</body></html>
  • 相关阅读:
    Linux设置系统时间并同步到硬件
    centos6.9安装mysql5.7.22并设置初始密码
    mysql修改数据库文件存储位置
    mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)
    mysql1.6(主从同步,数据读写分离)
    Mysql1.5(binlog增量备份与恢复,innobackupex)
    Mysql1.4(用户授权,权限撤销;图形管理工具,数据备份-恢复)
    MYSQL1.3(存储引擎,数据导入导出,管理表记录)
    MYSQL1.2(字段管理,索引类型)
    mysql1.1(搭建,数据类型,基本使用)
  • 原文地址:https://www.cnblogs.com/Westfalen/p/5974184.html
Copyright © 2020-2023  润新知