struts2开发时通过interceptor拦截器实现输入数据过滤前后空格的功能

简介: 首先在拦截器注册文件interceptorContext.xml中声明拦截器:  然后配置struts.

首先在拦截器注册文件interceptorContext.xml中声明拦截器:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
      
    <bean id="onlineInterceptor" class="main.com.eca.interceptor.OnlineInterceptor">        
    </bean>     
    <!-- 空格过滤拦截器 -->  
         <bean id="trimInterceptor" class="main.com.eca.interceptor.TrimInterceptor">       
    </bean>     
</beans>

  然后配置struts.xml文件,加入拦截队列

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
  
<struts>    
    <include file="config/catalog.xml"/>  
      
<package name="default" extends="struts-default">   
     <interceptors>  
    <interceptor name="onlineInterceptor" class="onlineInterceptor"></interceptor>  
    <interceptor name="trimInterceptor" class="trimInterceptor"></interceptor>  
    <interceptor-stack name="baseInterceptorStack">  
        <interceptor-ref name="onlineInterceptor"></interceptor-ref>  
        <interceptor-ref name="trimInterceptor"></interceptor-ref>  
        <interceptor-ref name="defaultStack"></interceptor-ref>  
    </interceptor-stack>  
    </interceptors>  
    <default-interceptor-ref name="baseInterceptorStack"></default-interceptor-ref>  
      
    <global-results>  
      <result name="user" type="redirect">/index.jsp?url=${url}</result>  
    </global-results>           
</package>  
  
</struts> 

   这里注意一下,在拦截器栈中,trimInterceptor的位置要在defaultStack之上,否则不会生效甚至报错

  下一步就是实现拦截器代码了

        这里在开发中犯了一次二,就是在取参数值的时候,一开始得到value后直接.toString(),然后trim()了,再塞回去,可是报错,参数违法什么的;之后输出了class类型:

System.out.println(value.getClass());

输出为:

class [Ljava.lang.String;  
class [Ljava.lang.String;  
class [Ljava.lang.String;  
class [Ljava.lang.String;  
class [Ljava.lang.String;

当时看成了String类型了,一看没错啊,怎么不对呢,找了会问题,才哗然大悟,form里面的参数其实是数组的,相同name提交后得到是参数是数组的数据,而且显示的class显示为String[]的,然后修改输出一看OK了

System.out.println(value.getClass()+"--"+JsonUtil.toJson(value));

class [Ljava.lang.String;--["22222"]  
class [Ljava.lang.String;--[""]  
class [Ljava.lang.String;--[""]  
class [Ljava.lang.String;--["11111"]  
class [Ljava.lang.String;--["3333"]

package main.com.eca.interceptor;  
  
import java.util.Iterator;  
import java.util.Map;  
import java.util.Set;  
  
import org.apache.commons.lang.StringUtils;  
  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.Interceptor;  
  
public class TrimInterceptor implements Interceptor {  
    private static final long serialVersionUID = -2578561479301489061L;  
  
    public void destroy() {  
    }  
  
    /*  
     * @Description:拦截所有参数,去掉参数空格 
     * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation) 
     */  
    public String intercept(ActionInvocation invocation) throws Exception {  
          
        Map map=invocation.getInvocationContext().getParameters();  
        Set keys = map.keySet();  
                  Iterator iters = keys.iterator();  
                while(iters.hasNext()){  
                    Object key = iters.next();  
                    Object value = map.get(key);  
                    map.put(key, transfer((String[])value));  
                }  
        return invocation.invoke();  
    }  
      
    /** 
     * @Description: 遍历参数数组里面的数据,取出空格 
     * @param params 
     * @return 
     */  
    private String[] transfer(String[] params){  
        for(int i=0;i<params.length;i++){  
            if(StringUtils.isEmpty(params[i]))continue;  
            params[i]=params[i].trim();  
        }  
        return params;  
    }  
  
    public void init() {  
  
    }  
  
}  


相关文章
|
1月前
|
Java Spring 容器
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
|
11天前
|
Java
解决springboot添加拦截器之后只能获取一次流,并且@requestbody注解和表单方式都可以接到参
解决springboot添加拦截器之后只能获取一次流,并且@requestbody注解和表单方式都可以接到参
QGS
|
11月前
SpringMVC配置中文编码过滤器
SpringMVC配置中文编码过滤器
QGS
55 0
boot 中自定义shiro过滤器的拦截顺序
@boot 中filter SecurityUtils.getSubject()No SecurityManager accessible
boot 中自定义shiro过滤器的拦截顺序
|
SQL JSON Java
Mybaties(十五) 分页插件使用, 参数校验以及全局异常处理
这里是Mybaties中高级应用了, 基于Mybaties+Springboot实现分页, 参数校验以及全局异常(干货满满!!!)
SpringMVC:拦截器和过滤器的区别
SpringMVC:拦截器和过滤器的区别
103 0
SpringMVC:拦截器和过滤器的区别
|
存储 JSON 算法
DO447使用过滤器和插件转换器--使用过滤器处理变量
DO447使用过滤器和插件转换器--使用过滤器处理变量
181 0
DO447使用过滤器和插件转换器--使用过滤器处理变量
|
Java 数据安全/隐私保护 容器
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)下
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)
144 0
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)下
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)上
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)
131 0
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)上
|
前端开发 Java 应用服务中间件
Struts2配置异常错误处理(十六)上
Struts2配置异常错误处理(十六)
292 0
Struts2配置异常错误处理(十六)上