Servlet---请求封装器

简介: 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/75804694     如果前端传入的字符串中包含特殊字符。
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/75804694

    如果前端传入的字符串中包含特殊字符。例如HTML标签 <a href="http://www.baidu.com">百度</a>,传入这种参数会导致后台吧字符串当成了HTML链接。为了避免这种情况的发生,需要过滤用户输入的字符串。
    从Request中可以用 getParameter()方法获取参数,可以将获得的参数进行处理,但是Request却没有类似“setParameter()”的方法。当然,也可以直接重写getParameter,但是就需要接口中的所有方法都重写,非常麻烦。
    HttpServletRequestWrapper类使用了HttpServletRequest接口,并实现了所有的方法,使用时只需集成该类,并重写需要的特定方法即可。

WrapperTest继承自HttpServletRequestWrapper,并重写了getParameter,构造函数传入的是真正的Request,可以使用getRequest()获取它,之后可以通过过滤器用WrapperTest替换HttpServletRequest

public class WrapperTest extends HttpServletRequestWrapper {

    // 传入真正的request
    public WrapperTest(HttpServletRequest request) {
        super(request);
    }

    // 处理从request中获得的参数
    public String getParameter(String name) {
        String result = this.getRequest().getParameter(name);
        // 使用StringEscapeUtils过滤特殊字符
        return StringEscapeUtils.escapeHtml3(result);
    }
}

用WrapperTest替换HttpServletRequest,doFilter()中将WrapperTest传入,之后的Servlet就会从WrapperTest中获得参数,而不是从HttpServletRequest中获得。

public class WrapperFilter implements Filter {

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // 创建新的Request
        HttpServletRequestWrapper requestWrapper = new WrapperTest((HttpServletRequest)arg0);

        // 用WrapperTest对象替换HttpServletRequest,使getParameter具有过滤的功能
        arg2.doFilter(requestWrapper, arg1);
    }

    public void init(FilterConfig arg0) throws ServletException {}
    public void destroy() {}
}

直接访问Servlet(http://localhost:8080/Test/hello?html=<a href='http://www.baidu.com>百度</a>

        String html =  req.getParameter("html");
        System.out.println("#"+html);

        结果:
        &lt;a href='http://www.baidu.com'&gt;百度&lt;/a&gt;
相关文章
|
6月前
|
XML Java 数据格式
Servlet 教程 之 Servlet 客户端 HTTP 请求 3
该教程展示了如何在Servlet中处理客户端HTTP请求,特别是获取HTTP头信息。示例代码创建了一个名为`DisplayHeader`的Servlet,它扩展了`HttpServlet`并重写了`doGet`方法。在`doGet`中,使用`HttpServletRequest`的`getHeaderNames()`遍历所有头部,显示其名称和对应值。Servlet在TomcatTest项目下,通过`web.xml`配置映射到`/TomcatTest/DisplayHeader`路径。
56 14
|
6月前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
54 8
|
2月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
6月前
Servlet 教程 之 Servlet 客户端 HTTP 请求 1
Servlet教程讲解了客户端HTTP请求,包括各种重要头信息:Accept(定义可处理的MIME类型)、Accept-Charset(指定字符集)、Accept-Encoding(处理的编码类型)、Accept-Language(首选语言)、Authorization(身份验证)、Connection(是否支持持久连接)、Content-Length(POST数据大小)、Cookie(返回cookies)、Host(指定URL的主机和端口)、If-Modified-Since(检查页面更新)、If-Unmodified-Since(条件性操作)。
34 0
|
缓存 Java 数据库
Servlet 处理请求的原理
Servlet 处理请求的原理
197 0
|
6月前
|
Web App开发 前端开发 JavaScript
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
70 0
|
Java 容器
Jsp之四 servlet请求响应
Jsp之四 servlet请求响应
71 0
|
存储 应用服务中间件 数据库
Servlet请求转发和重定向
Servlet请求转发和重定向
166 0
|
应用服务中间件 API
JavaWeb 速通Servlet(请求转发和请求重定向)
JavaWeb——HttpServletRequest 和 HttpServletResponse 内容分享。
177 0
|
XML 编解码 前端开发
JavaWeb《二》Servlet、Request请求
本文是javaweb的第二篇,介绍了Servlet,Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。 概述了Request请求与响应,并且主要分析了Request请求。
130 0
JavaWeb《二》Servlet、Request请求