过滤特殊字符的过滤器

struts2会在web.xml中配置如下的过滤器:

<filter>
<filter-name>struts</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

当自己需要再建一个过滤特殊字符的过滤器时,需要将自己的过滤器放在struts2的过滤器前边才会过滤掉使用struts2框架的路径,在web.xml中的整体配置:

    <!-- 过滤特殊字符 -->
<filter>
<filter-name>FilterSpecial</filter-name>
<filter-class>com.piccsoft.project.security.auth.FilterSpecial</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterSpecial</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 过滤特殊字符 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

具体的过滤器的写法如下:

 package com.project.security.auth;

 import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import com.core.util.excel.other.StringUtilTools; public class FilterSpecial implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { Map map=request.getParameterMap();
Set keSet=map.entrySet();
boolean bExist = false;
String result=""; for(Iterator itr=keSet.iterator();itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey();
if (StringFilter(ok.toString())){
bExist = true;
result=ok.toString();
break;
}
Object ov=me.getValue(); String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
} for(int k=0;k<value.length;k++){
if (StringFilter(value[k])){
bExist = true;
result=value[k];
break;
}
}
}
if(bExist){
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String [] tmp={"..","WEB-INF","\t","alert(","<",">","confirm("};
String temp="";
for(int i=0;i<tmp.length;i++){
temp=tmp[i];
int index=result.indexOf(temp);
if(index!=-1){
break;
}
}
req.setAttribute("result", temp);
req.getRequestDispatcher("/error.jsp").forward(req,res);
}else{
chain.doFilter(request, response);
}
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
} public static boolean StringFilter(String str) throws PatternSyntaxException {
if(!StringUtils.isNotEmpty(str)) return false; str = str.replace("<br>", "").replace("<Br>", "").replace("<BR>", ""); // 清除掉所有特殊字符
String regEx="\\.\\.|WEB-INF|<|>|\t|alert\\(|confirm\\("; Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str); return m.find(); }
}

使用struts2框架后的拦截器的更多相关文章

  1. struts2框架之自定义拦截器和配置

    struts框架中也存在拦截器,只不过系统自动调用.框架自带的拦截器的配置文件所在的位置为: java Resources--->Libraries--->struts2-core-2.3 ...

  2. Struts2基础学习(五)—拦截器

    一.概述 1.初识拦截器      Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多 ...

  3. Struts2知识点小结(四)--拦截器与注解开发

    一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...

  4. Struts2 之 modelDriven & prepare 拦截器详解

    struts2 ModelDriven & Prepareable 拦截器 前面对于 Struts2 的开发环境的搭建.配置文件以及 Struts2 的值栈都已经进行过叙述了!这次博文我们讲解 ...

  5. 【struts2】预定义拦截器

    1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器.由于Struts2的默认拦截器声明和引用都在这个St ...

  6. 使用struts2中默认的拦截器以及自定义拦截器

    转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...

  7. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

  8. Struts2之过滤器和拦截器的区别

    刚学习Struts2这个框架不久,心中依然有一个疑惑未解那就是过滤器和拦截器的区别,相信也有不少人跟我一样对于这个问题没有太多的深入了解 那么下面我们就一起来探讨探讨 过滤器,是在java web中, ...

  9. struts2 ModelDriven 和 Preparable 拦截器

    Struts2 运行流程图-1

随机推荐

  1. sbt 学习

    一.基础 1.工程根目录 包含build.sbt的目录是工程的根目录.注意,就算在一个空目录下面执行sbt about,也会生成project文件夹 2.源文件目录结构 SBT有固定的文件组织结构 s ...

  2. mySQL的表操作

    1.新建表 CREATE TABLE 表名 ( 属性名 数据类型 [完整约束条件], 属性名 数据类型 [完整约束条件], ... ... 属性名 数据类型 [完整约束条件] ); 2.删除表 DRO ...

  3. random模块的学习

    import random # ret = random.random() #随机取0-1中间的浮点数 # ret = random.randint(1,3) #随机取1-3中间的整数 # ret = ...

  4. nodeJs 控制台打印中文显示为Unicode解决方案

    在使用 NodeJs 采集其他网站网页时遇到的,在获取源代码后发现里面原来的中文被转成了 Unicode(UTF8) 编码的中文(如:&# [xxx]),这当然不是真正想要的中文实体 解决方案 ...

  5. react-native-table-component, react-native 表格

    使用 react-native-table-component, 加上 FlatList 组件,实现可以下拉刷新,上拉加载的demo import React, { Component } from ...

  6. 正则简单操作cookie、url search

    正则操作cookie.url getCookie function getCookie(key) { var cookies = window.document.cookie, reg = new R ...

  7. Python 中文数字转阿拉伯数字

    #只能转数字,传参中包含非数字会错. def t(str): zhong={'零':0,'一':1,'二':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9}; ...

  8. Confluence安装部署

    前言:Confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享.现在大多数公司都会部署一套Confluence,用作内部WiKi. ...

  9. anujs1.4.0发布

    经过三个月的埋头苦干,终于完成Fiber版的anujs. 主要特性有: 测试全部改成jest, 迁移官方测试用例.有许多迷你React吹得怎么天花乱坠,但是生命周期钩子的执行顺序无法与官方保持一致,那 ...

  10. entityVo对象与entity对象

    java Web项目Service层通用接口和entityVo对象与entity对象转化问题的解决方案 原创 2015年12月17日 15:42:09 标签: java / Service / 通用工 ...