之前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") })
相关推荐
1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按...
JavaEE Struts2利用tokenSession防止重复提交
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。 struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
struts 拦截器实现权限拦截,例子简单易懂,有详细的注释。
本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下 在看拦截器的小例子的前我们先来看看sturts2的原理 struts2自己是有拦截器的,通过拦截器可以拦截用户请求,并作出处理 拦截器...
防止重复提交 之 更强大的tokenSession拦截器
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...
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 ...
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 ...
(5) 使用token拦截器,阻止用户注册页面的重复提交。 (6) 用户登陆成功之后,能够修改自己的密码,要求修改密码的时候,新旧密码在一个文本框输入(用,分割),通过使用自定义类型转换完成新旧密码的拆分工作。
纯Struts2 struts-2.3.16.1版本下的demo,1、Struts2标签 2、Action 3、ActionSupport中validate 4、prepare 5、modeldriven 6、国际化 7、Token 8、拦截器
.....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........
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 ...
6. <s:token></s:token>-----拦截器 7. <s:tree></s:tree>-----树 8. <s:treenode label=""></s:treenode>-----树的结构 U: 1. <s:updownselect list=""></s:updownselect>-----多选择框 2. <s:url></s:...
本实例通过 myEclipse7.5的运行通过,其中含有 拦截器,国际化,防止重复登录,token防止刷新等功能!~~~
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控制标签详解 ...
本课程共21讲,课程课件,上课源代码等资料购买后可以直接下载,该课程是在学习完JSP课程后,SSH框架的第一部分,后续还有Hibernate,Spring课程及3大框架的整合