struts2拦截非法字符+防止反复提交

拦截 :

在src下建interceptor

public class filterinterceptor extends AbstractInterceptor {


/**

*/
private static final long serialVersionUID = 1L;


@Override
public String intercept(ActionInvocation ai) throws Exception {
 
Object action=ai.getAction();
if(action!=null)
{
if(action instanceof loginAction)
{
loginAction loginact=(loginAction) action;
String descri=loginact.getUser().getDescri();
   if(descri.contains("bad"))

   {
    descri=descri.replaceAll("bad","XXXX");
    User user=new User();
    String hobby=user.getHobby();
    String name=user.getName();
    String pass=user.getPassword();
    int sex=user.getSex();
    String provice=user.getProvice();
    user.setDescri(descri);
    loginact.setUser(user);;
   }
   return ai.invoke();
}
}
return loginAction.LOGIN;
}


}

建action

public class loginAction extends ActionSupport implements SessionAware{      //防止反复提交的话必须要继承,且涉及interceptor



private Employ emp;
  
   private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;

}
public Employ getEmp() {
return emp;
}


public void setEmp(Employ emp) {
this.emp = emp;
}




// @Override
// public void validate() {
// if(emp.getUser()==null||("").equals(emp.getUser()))
// {
// this.addFieldError("name", "请输入用户名");
// }
// if(emp.getPassword()==null||("").equals(emp.getPassword())) {
// this.addFieldError("password", "请输入密码");
// }
// }


public String dologin()
{

if(emp.getUser().equals("zhangsan")&&(emp.getPassword()).equals("123"))
{
session.put("name",emp);

}
return "success";
}


}


struts.xml

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
 <struts>
 
  <constant name="struts.devMode" value="true"/>                  //开发模式,最好写                     
  <package name="firstpackage" extends="struts-default">       
   <interceptors>
     <interceptor name="filterinterceptor" class="com.a.interceptor.filterinterceptor"/>         //声明interceptor,且声明放在package内最上方,否则可能有问题
   </interceptors>
   <global-results>
     <result name="success">/token/success.jsp</result>
     <result name="login">/token/login.jsp</result>
   </global-results>
  
   
    <action name="loginAction"  class="com.a.Action.loginAction"  method="doLogin">
       <interceptor-ref name="defaultStack"></interceptor-ref>    //放重复提交
       <interceptor-ref name="token"></interceptor-ref>
      <result name="invalid.token">/token/notice.jsp</result>

      <interceptor-ref name="filterinterceptor"></interceptor-ref>                                                    //部署拦截字符的
    </action>
    </package>
    </struts>



login.jsp

<body>
    <s:form action="loginAction" method="post">
    <s:token></s:token>                              //防重复提交
    <s:textfield name="user.name" label="user" required="true" requiredposition="left"></s:textfield>
    <s:password name="user.password" label="password" required="true" requiredposition="left"></s:password>
    <s:radio name="user.sex" list="#{1:'男',0:'女'}" label="sex" ></s:radio>
    <s:select list="{'请选择省份','吉林','北京','上海'}" name="user.provice" label="provice"></s:select>
    <s:checkboxlist list="{'足球','游泳','跑步'}" name="user.hobby" label="label"></s:checkboxlist>
    <s:textarea name="user.descri" cols="30" rows="5" label="描述"></s:textarea>
    <s:submit value="submit"></s:submit>
    <s:reset value="reset"></s:reset>
    </s:form>
    
</body>
</html>

还写notice.jsp,,success.jsp省】


注意点:在struts.xml中拦截器声明在上面,且在action在下面,且在action部署中拦截器的部署都是在result前面的一个拦截器完了接着下一个,

拦截器的class中  

Object action=ai.getAction();
if(action!=null)
{
if(action instanceof loginAction)
{
loginAction loginact=(loginAction) action; 

以上几句是拦截器里面涉及action内容的通用方法,,机即通过拦截器对象拿到action对象

其他的还可以通过拦截器对象拿到actioncontext然后拿到session见另一个拦截器栗子!

大家晚安 拜托明天高效

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值