struts2拦截器添加及xss攻击的处理
struts2拦截器添加及xss攻击的处理
先在struts2.xml中添加拦截路径。
<package name="base" extends="struts-default,json-default" > <!-- 给文本编辑器配置的bean以及constant --> <!--拦截器--> <interceptors> <interceptor name="LoginInterceptor" class="com.spark.tempo.urm.web.interceptor.LoginInterceptor"> <!--方法不拦截--> <param name="excludeMethods">login</param> </interceptor> <interceptor-stack name="myDefault"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="LoginInterceptor"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefault"/> <global-results> <result name="login">/mgrIndex.jsp</result> </global-results> </package>
然后在需要拦截的action中添加注解:
@ParentPackage(value="base")
如果action中都有继续统一的BaseAction则可以在BaseAction中写入此注解如:
@ParentPackage(value="base") public class BaseAction extends WebApplicationObjectSupport implements Action {
在添加拦截器类及方法:
我做这拦截添加了防止页面中传入的xss攻击代码
2、拦截器要继承MethodFilterInterceptor类这样xml中的<param name="excludeMethods">login</param>不拦截的方法才能生效不然不生效别怪我哟。
public class LoginInterceptor extends MethodFilterInterceptor {@Resource private IBaseService baseService; private HttpServletRequest request; @Override public String doIntercept(ActionInvocation acation) throws Exception {String actionName = acation.getInvocationContext().getName();//获取action方法名 Map<String,Object> parameters = acation.getInvocationContext().getParameters(); request = ServletActionContext.getRequest(); ActionContext ac = acation.getInvocationContext(); ValueStack stack = ac.getValueStack(); for(Map.Entry<String,Object> map : parameters.entrySet()){Object[] obj = (Object[])map.getValue();//获取传入的参数值是否有非法,xss攻击 // System.out.println("参数名:"+map.getKey()+" 参数值:"+obj[0].toString()); // System.out.println("处理参数名:"+map.getKey()+" 处理后参数值:"+XssHttpServletRequestWrapper.xssEncode(obj[0].toString())); //action参数中添加处理后的值,防止xss攻击将处理后的参数重新set到action值中 stack.setValue(map.getKey(), XssHttpServletRequestWrapper.xssEncode(obj[0].toString())); }User user = (User) ServletActionContext.getRequest().getSession().getAttribute(SysContextParam.SessionAttribute.SESSION_CURR_USER); //用户已登陆,添加操作日志 if(user != null){//获取访问者ip String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0) {ip = request.getRemoteAddr(); }//添加日志: String logSql = "INSERT INTO t_custom_manager_log (id, operator, create_date, operate_url, ip,operate_project) VALUES(?, ?, ?, ?, ? ,?)"; baseService.executeUpdateByOrigSQL(logSql, new Object[]{null,user.getName(),new Date(),request.getServletPath(),ip,"1"}); return acation.invoke(); }else{return "login"; }}}
添加防拦截的xss攻击类
public class XssHttpServletRequestWrapper {/** * 将容易引起xss漏洞的半角字符直接替换成全角字符 * * @param s * @return */ public static String xssEncode(String s) {if (s == null || s.isEmpty()) {return s; }StringBuilder sb = new StringBuilder(s.length() + 16); for (int i = 0; i < s.length(); i++) {char c = s.charAt(i); switch (c) {case '>':sb.append('>');// 全角大于号 break; case '<':sb.append('<');// 全角小于号 break; // case '\'': // sb.append('‘');// 全角单引号 // break; // case '\"': // sb.append('“');// 全角双引号 // break; case '(':sb.append('(');// 全角 break; case ')':sb.append(')');// 全角 break; case '&':sb.append('&');// 全角 break; case '\\':sb.append('\');// 全角斜线 break; case '#':sb.append('#');// 全角井号 break; case '%': // < 字符的 URL 编码形式表示的 ASCII 字符(十六进制格式) 是: %3c processUrlEncoder(sb, s, i); break; default:sb.append(c); break; }}return sb.toString(); }private static void processUrlEncoder(StringBuilder sb, String s, int index) {if (s.length() >= index + 2) {if (s.charAt(index + 1) == '3' && (s.charAt(index + 2) == 'c' || s.charAt(index + 2) == 'C')) { // %3c, %3C sb.append('<'); return; }if (s.charAt(index + 1) == '6' && s.charAt(index + 2) == '0') { // %3c (0x3c=60) sb.append('<'); return; }if (s.charAt(index + 1) == '3' && (s.charAt(index + 2) == 'e' || s.charAt(index + 2) == 'E')) { // %3e, %3E sb.append('>'); return; }if (s.charAt(index + 1) == '6' && s.charAt(index + 2) == '2') { // %3e (0x3e=62) sb.append('>'); return; }}sb.append(s.charAt(index)); } }
好,搞完收工。
还有就是拦截到返回的参数:login他会返回到struts2中xml
<global-results> <result name="login">/mgrIndex.jsp</result> </global-results>
获取返回的login到mgrIndex.jsp路径中,这我是jsp页面。也可以根据自己的需要添加
struts2拦截器添加及xss攻击的处理相关推荐
- Struts2拦截器的使用
如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...
- Struts2拦截器实现异常处理机制
http://bbs.itcast.cn/thread-10364-1-1.html Struts2拦截器实现异常处理机制 在j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印 ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- struts2 拦截器_Struts2令牌拦截器示例
struts2 拦截器 Struts 2 token interceptor can be used to handle multiple form submission problem. While ...
- struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作
struts2 拦截器 Sometimes we have long running actions where user will have to wait for final result. In ...
- struts2拦截器理论知识
软件设计中DRY规则,即不要写重复的代码,这样可以大大减轻后期维护的工作量!但是问题来了,重复的代码是不可避免的,比如在用户发送请求之前先判断用户是否登录,怎么办呢?于是就把这些重复代码提取出来,封装 ...
- Struts2 拦截器(Interceptor )原理和配置
Struts2 拦截器 拦截器在概念上与servlet过滤器或JDK代理类相同.拦截器允许横切功能,把action以及框架分开实现.你可以使用拦截器实现以下操作: 在调用action之前提供预处理逻辑 ...
- 基于SSH2框架Struts2拦截器的登录验证实现 来自菠萝大象
本文为菠萝大象原创,如要转载请注明出处. 通过之前的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解系列文章,我们已经成功将这三种框架整合到了一起, 这次大 ...
- Struts2 拦截器的配置:
Struts2 拦截器的配置: 第一步:在struts.xml文件中加入拦截器配置: 我们可以在配置拦截器的时候,自己定义一个拦截器栈来包含我们自己定义的拦截器(注意:一定要将 defaultStac ...
- Struts2拦截器和标签
一.struts2拦截器 1.struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面. 2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每 ...
最新文章
- 一、面试题(持续跟新)
- 荣耀30s鸿蒙5g,荣耀赵明:荣耀30S将掀起5G手机购买狂潮
- python文件存储过程_python调用MySql存储过程
- maya python 弹出窗口_maya python打印状态复选框?
- 编写一个函数,计算下式当n=10和n=100的值。
- mysql典型安装和自定义_Mysql8.0.19下载安装—windows版本自定义安装
- [七]JavaIO之 PipedInputStream 和 PipedInputStream
- 服务器放在机柜_服务器网络机柜的保养维护
- DirectX12_基础知识
- 计算机网络中处理通信控制功能的是,在计算机网络中处理通信控制功能的计算机是()。A.通信线路B.终端C.主计算机D.通信控制处理机...
- 数据库实现一个轻量的背单词APP
- Redis(三) Redis的持久化 RDB与AOF
- win10文件夹加密_专业的文件隐藏软件——文件夹隐藏精灵PC软件
- you-get的一点修改
- Yii2-Admin-Theme 基于layui的通用后台模板
- 【论文笔记】Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in NLP
- 美团笔试题_20220409
- MySQL8高级_读写分离和分库分表
- 共享单车登录显示服务器未响应,ofo共享单车出故障了吗?ofo共享单车无法登陆、连接不上、无法结算怎么回事?[图]...
- t420i升级固态硬盘提升_给自己的办公设备大升级:购入雷克沙固态移动硬盘,享受高速...
热门文章
- Windows扫雷游戏python
- 作为前端程序员:你必须知道的常用英语词汇!!全是干货!!!
- 前端英文和数字不换行怎么解决
- iPhone卡三格信号网络不通无服务
- 小程序 Vant Weapp 使用插槽自定义 Cell 的左侧图标
- 开放世界游戏中的大地图的实现——程序技术篇
- [转载]Matlab定积分近似计算
- 计算机在高分子材料与工程中的应用,计算机技术在高分子材料工程中的应用.doc...
- 使用DAEMON Tools Ultra制作Ubuntu启动U盘全过程(含图文)
- 如何搭建威纶通触摸屏与S7-200smart之间无线PPI通信?