• javaWeb 使用jsp开发 html过滤标签


    1.jsp调用代码

    <t:htmlFilter>
        <a href="${pageContext.request.contextPath }/index.jsp">link</a>
    </t:htmlFilter>

    2.tld文件代码

    <tag>
        <name>htmlFilter</name>
        <tag-class>de.bvb.web.tag.HtmlFilterTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>

    3.标签实现类代码

    package de.bvb.web.tag;
    
    import java.io.IOException;
    import java.io.StringWriter;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class HtmlFilterTag extends SimpleTagSupport {
        @Override
        public void doTag() throws JspException, IOException {
            StringWriter sw = new StringWriter();
            JspFragment jf = this.getJspBody();
            jf.invoke(sw);
            String content = sw.getBuffer().toString();
            content = filter(content);
            ((PageContext) this.getJspContext()).getOut().write(content);
        }
    
        //copy from apache-tomcat-8.0.9/webapps/examples/WEB-INF/classes/util/HTMLFilter.java
        public String filter(String message) {
            if (message == null)
                return (null);
            char content[] = new char[message.length()];
            message.getChars(0, message.length(), content, 0);
            StringBuilder result = new StringBuilder(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());
        }
    }
  • 相关阅读:
    XSS 防御方法总结
    IE浏览器兼容方案
    js 排序算法
    webapck 打包体积优化策略
    webapck 速度优化策略
    Grunt、Gulp和Webpack对比
    数据库中的undo日志、redo日志
    使用sysbench对mysql压力测试
    java -cp & java jar的区别
    使用BenchmarkSQL测试PostgreSQL
  • 原文地址:https://www.cnblogs.com/Westfalen/p/5978896.html
Copyright © 2020-2023  润新知