Servlet---请求封装器
来源:互联网 发布:java数据结构和算法 编辑:程序博客网 时间:2024/06/15 04:30
如果前端传入的字符串中包含特殊字符。例如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); 结果: <a href='http://www.baidu.com'>百度</a>
阅读全文
0 0
- Servlet---请求封装器
- [Servlet]请求封装器、响应封装器
- Servlet过滤器与封装器
- Servlet请求
- [Servlet&JSP] 封装器的使用
- retrofit2拦截器和请求封装
- OkHttp二次封装请求 拦截器
- 自定义拦截器封装公共请求参数
- 封装servlet详解
- 封装Servlet工具类
- Servlet封装BaseServlet
- web请求:servlet处理请求
- AJAX异步请求封装
- Android封装Http请求
- 封装网络请求
- Block封装http请求
- 封装Ger网络请求
- 网络请求封装
- XML Schema是什么
- leetcode Add Two Numbers 解决思路
- Android之Handler和Loooper源码分析
- Python爬虫Selenium和PhantomJS系列之十三
- 【札记】一道通往新世界的大门:《暗时间》
- Servlet---请求封装器
- QT编程随笔
- 被多数人误解的nth-of-type
- 利用ViewPager实现启动引导页
- JSP-隐式对象、pageContext、错误处理
- NYOJ 121 另类乘法
- 高质量c/c++编程学习之三:常量
- JSP-使用JSTL-out、set、remove、catch捕捉异常、条件判断、流程控制、字符截取
- Impossible escape