使用struts2框架后的拦截器
过滤特殊字符的过滤器
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框架后的拦截器的更多相关文章
- struts2框架之自定义拦截器和配置
struts框架中也存在拦截器,只不过系统自动调用.框架自带的拦截器的配置文件所在的位置为: java Resources--->Libraries--->struts2-core-2.3 ...
- Struts2基础学习(五)—拦截器
一.概述 1.初识拦截器 Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多 ...
- Struts2知识点小结(四)--拦截器与注解开发
一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...
- Struts2 之 modelDriven & prepare 拦截器详解
struts2 ModelDriven & Prepareable 拦截器 前面对于 Struts2 的开发环境的搭建.配置文件以及 Struts2 的值栈都已经进行过叙述了!这次博文我们讲解 ...
- 【struts2】预定义拦截器
1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器.由于Struts2的默认拦截器声明和引用都在这个St ...
- 使用struts2中默认的拦截器以及自定义拦截器
转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...
- java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题
一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...
- Struts2之过滤器和拦截器的区别
刚学习Struts2这个框架不久,心中依然有一个疑惑未解那就是过滤器和拦截器的区别,相信也有不少人跟我一样对于这个问题没有太多的深入了解 那么下面我们就一起来探讨探讨 过滤器,是在java web中, ...
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1
随机推荐
- 初识异步、并发处理纯代码及Demo
多线程Thread 处理 Thread thread = new Thread(()=> { ; i < ; i++) { Console.WriteLine("这是第" ...
- yum源配置问题
目前我所知有三种情况: 1. 完全公网环境 2. linux所处内网,但可以代理至公网 3. 完全内网 这里讨论下第三种情况,如果是处在完全内网情况下,可以使用linux安装时的iso镜像包作为本地y ...
- zk hdfs hadoop yarn hive 学习笔记
如图
- 树——B-树
B树的定义: 1.若根结点不是终端结点,则至少有2棵子树 2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 3.每一个叶子节点都包含k-1个元素,其中 m/2 ...
- zabbix3.x添加华为(93069306)网络设备详解
转载自:https://www.cnblogs.com/yinzhengjie/p/6768006.html 前言: 欢迎加入:高级运维工程师之路 598432640 相信大家在看我的文章之前,也看过 ...
- if __name__ == '__main__':用法
这个博主写的很好,已经验证过了.https://blog.csdn.net/yjk13703623757/article/details/77918633
- es 服务器搭建
安装jdk,原系统安装的openjava 参考https://www.cnblogs.com/Dylansuns/p/6974272.html注意配置/etc/profile 时,要注意自己安装的是哪 ...
- 用word发CSDN blog,免去插图片的烦恼
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- java 将mysql中Blob类型转为字符串或数字
引入Blob类型貌似不行,不知道是版本问题还是java中的Blob类型为oracle,后来使用byte[]转换成功. public float byte2float(byte[] b) { if(b! ...
- STM32F401 外部中断误触发问题
现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒. 原因:PA1配置成EXTI(上拉输入),经常被误触发 解决方式:将PA1配置成浮空输 ...