`

struts2 token拦截器

阅读更多

之前struts2解决token必须在每个action配置里面重新定义token的拦截器,如果配置较多无疑非常麻烦,于是就写了个基于Annotation的TokenInterceptor,只要在需要避免重复提交的action方法前使用@Token注解,拦截器能自动拦截方法并做Token的检验。
使用时除了把在action配置中重定义拦截器,改为注解,其他与原来的拦截器完全一致,包括注意你必须在调用action的token方法前使用<s:token/>获得自己的令牌。 
1、token主要用来防止重复提交(就是你提交好以后,点后退,再点提交),把TokenInterceptor部署到struts2的拦截器栈里:
<interceptors>
   <interceptor name="token" class="com.cgs.util.interceptor.TokenInterceptor"/>      <==
<!--这个也可以不要  此为绑定拦截器
   <interceptor-stack name="normalStack">
    <interceptor-ref name="token"/>
    <interceptor-ref name="paramsPrepareParamsStack"/>
 <interceptor-ref name="defaultStack"></interceptor-ref>             warning:如果不要defaultStack,所有带有传递参数的均无法正常使用了,在Action中所有的参数无法被注入。struts-default中,默认的拦截器引用是defaultstack,这个拦截器包传说是经过精心设计的。。所以会把所有的参数注入! 因此要更改默认拦截器,需要加上这个defaultstack

   </interceptor-stack>
-->
  </interceptors>
  <!--<default-interceptor-ref name="normalStack" />-->
   特别注意红色两行的顺序!先自定义再Default
 

 <package name="forum" namespace="/forum" extends="struts-shop">
  <action name="bbs_*" class="com.cgs.forum.action.ForumAction" method="{1}">
 <result name="...">...</result>
  ....
   <result name="...">...</result>
 <!-- token               Action防止刷新     配置错误返回页面-->
   <interceptor-ref name="token" />              <==
   <result name="invalid.token">错误页面</result>         <==
  </action>
 </package>
2、再把自定义的拦截器部署为默认拦截器://这一步不用
  <default-interceptor-ref name="normalStack"/>

3、在Action类中定义@Token注解:
class CURDAction {
...
   @Token     <==
   public void save(){...}
}

4、在提交过来的页面里面放入<s:token/>的标记:
  <s:form action="user/save.action">
  <s:token></s:token>   <==
   <input type="hidden" name="id" value="${id }"/>
   <s:textfield name="username" label="username"/>
   <s:textfield name="password" label="password"/>
   <s:submit/>
  </s:form>

以后该页面提交以后就不能通过后退在进行重新提交了。
 
 
下面是此注解用到的两个JAVA文件
1.创建@Token
Token.java   <==
===========
package com.cgs.util.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;@Target(METHOD)
@Retention(RUNTIME)
public @interface Token {}
 
2.拦截器方法
TokenInterceptor.java   <==
=========
package com.cgs.util.interceptor;
import java.lang.reflect.Method;
import com.cgs.util.annotations.Token;

import com.opensymphony.xwork2.ActionInvocation;public class TokenInterceptor extends org.apache.struts2.interceptor.TokenInterceptor {
 private static final long serialVersionUID = 1L;
 @Override
 protected String doIntercept(ActionInvocation invocation) throws Exception {
  Object action = invocation.getAction();
  if(action != null) {
   Method method = getActionMethod(action.getClass(), invocation.getProxy().getMethod());
   Token token = method.getAnnotation(Token.class);
   if(token != null) {
    return super.doIntercept(invocation);
   }
  }
  return invocation.invoke();
 } public static final Method getActionMethod(Class<? extends Object> actionClass, String methodName) throws NoSuchMethodException {
        Method method;
        try {
            method = actionClass.getMethod(methodName, new Class[0]);
        } catch (NoSuchMethodException e) {
            String altMethodName = "do" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);
            method = actionClass.getMethod(altMethodName, new Class[0]);
            e.printStackTrace();
        }
        return method;
    }
 
}

 struts2 注解方式使用token拦截器

@InterceptorRefs({
	@InterceptorRef(value="token",params={"includeMethods","login1"}),
	@InterceptorRef("crudStack")
})
分享到:
评论

相关推荐

    Struts拦截器及token拦截器防止重复提交例子源码

    1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按...

    JavaEE Struts2利用tokenSession防止重复提交

    JavaEE Struts2利用tokenSession防止重复提交

    struts2 用拦截器 实现用户权限登录

    struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。 struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。

    struts 拦截器实现权限拦截

    struts 拦截器实现权限拦截,例子简单易懂,有详细的注释。

    Java中的Struts2框架拦截器之实例代码

    本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下 在看拦截器的小例子的前我们先来看看sturts2的原理   struts2自己是有拦截器的,通过拦截器可以拦截用户请求,并作出处理 拦截器...

    tokenSession拦截器的使用

    防止重复提交 之 更强大的tokenSession拦截器

    struts2利用token防止表单重复提交(源代码)

    struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...

    拦截器和控制器的区别

    2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...

    Struts2 in action中文版

    4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...

    深入浅出Struts2(附源码)

    15.2 使用Token拦截器 253 15.3 使用Token Session拦截器 256 15.4 小结 257 第16章调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章进度条 263 ...

    java Struts2+hibernate+Spring整合的通讯录

    (5) 使用token拦截器,阻止用户注册页面的重复提交。 (6) 用户登陆成功之后,能够修改自己的密码,要求修改密码的时候,新旧密码在一个文本框输入(用,分割),通过使用自定义类型转换完成新旧密码的拆分工作。

    Struts2 struts-2.3.16.1版本下的demo

    纯Struts2 struts-2.3.16.1版本下的demo,1、Struts2标签 2、Action 3、ActionSupport中validate 4、prepare 5、modeldriven 6、国际化 7、Token 8、拦截器

    Struts2技术手册-Struts2精华教程-电子书

    .....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    15.2 使用Token拦截器 253 15.3 使用Token Session拦截器 256 15.4 小结 257 第16章 调试与性能分析 258 16.1 debug标签 258 16.2 Debugging拦截器 259 16.3 性能分析 261 16.4 小结 262 第17章 进度条 263 17.1 ...

    struts2 标签库 帮助文档

    6. &lt;s:token&gt;&lt;/s:token&gt;-----拦截器 7. &lt;s:tree&gt;&lt;/s:tree&gt;-----树 8. &lt;s:treenode label=""&gt;&lt;/s:treenode&gt;-----树的结构 U: 1. &lt;s:updownselect list=""&gt;&lt;/s:updownselect&gt;-----多选择框 2. &lt;s:url&gt;&lt;/s:...

    struts2 经典学习小例子

    本实例通过 myEclipse7.5的运行通过,其中含有 拦截器,国际化,防止重复登录,token防止刷新等功能!~~~

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Struts2从入门到精通2017视频教程

    本课程共21讲,课程课件,上课源代码等资料购买后可以直接下载,该课程是在学习完JSP课程后,SSH框架的第一部分,后续还有Hibernate,Spring课程及3大框架的整合

Global site tag (gtag.js) - Google Analytics