拦截器
struts2是基于拦截器运行的,defaultStack会拦截所有的action
public class CheckLogin implements Interceptor { 实现接口Interceptor
public void destroy() { Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
}
public void init() { Init方法在拦截器类被创建之后,在对Action拦截之前调用,
}
public String intercept(ActionInvocation ai) throws Exception { Intercept是拦截器的主要拦截方法
System.out.println("我是一个拦截器");
Action action=(Action)ai.getAction(); //获取当前拦截的action
System.out.println("当前拦截的action"+action.getClass().getName());
Map session=ai.getInvocationContext().getSession(); //获取当前的session
if(action instanceof Loginaction){ 是否包含这个action
ai.invoke(); 是,执行后面代码
}else{
Object accName=session.get("accName"); 从session里面获取名字
if(accName==null){ 空值
return "login"; 返回登录
}else{
ai.invoke(); //如果可以获取到session继续执行后面的代码
}}
Return null;
}
}
拦截器的地址struts2-core-2.2.1.jar包里面的struts-default.xml里面配置找name为defaultStack的
struts.xml文件
<package name="default" namespace="/" extends="struts-default">继承了拦截器
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|<!-- 配至拦截器 -->
| <interceptors>
|
| <!-- 引入自定义的拦截器 -->
| <interceptor name="cLogin" class="com.hou.util.CheckLogin"></interceptor>
|
| <!-- 把自定义的拦截器定义到堆栈 -->o
| <interceptor-stack name="checkLogin">
| <interceptor-ref name="cLogin"></interceptor-ref> 自己定义的拦截器
| <interceptor-ref name="defaultStack"></interceptor-ref> 包里面的18个拦截器
| </interceptor-stack>
| </interceptors>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<!-- 把自己的拦截去设置成默认的 -->
<default-interceptor-ref name="checkLogin"/>
<!-- 全局返回 ,返回结果action里面找不到的,在这里找-->
<global-results>
<result name="login">/error.jsp</result>
</global-results>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
员工action
<action name="emp" class="com.hou.action.Empaction">
<result>/emp/empList.jsp</result>
<result name="edit">/emp/editEmp.jsp</result>
</action>
防止重复提交
第一步:在表单中加入<s:token />
<s:form action="" method="post“>
<s:textfield name="name"/><s:token/><s:submit/> 提交的时候,变成隐藏域,提交的vlaue值是一个长串数字,value值不一致,返回"invalid.token"
</s:form>
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
部门action
<action name="dept" class="com.hou.action.Deptaction">
<!-- deptAction里面引进19个拦截器 -->
<interceptor-ref name="token"> 引入struts-default.xml里面的token拦截器
<param name="includeMethods">saveOrUpdate</param> includeMethods使用拦截器的方法 excludeMethods - 过滤掉不使用拦截器的方法
</interceptor-ref>
<interceptor-ref name="checkLogin"/> 引入自己的拦截器
<result>/dept/deptList.jsp</result>
<result name="edit">/dept/editDept.jsp</result>
<!-- type="redirectAction"的执行结果可以访问Action里面的方法,不写type可以访问链接 -->
<result name="invalid.token" type="redirectAction">dept!deptList</result>
</action>
配置加入了“token”拦截器和“invalid.token”结果,因为“token”拦截器在会话的token与请求的token不一致时,将会直接返回“invalid.token”结果。
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 登录action
<action name="login_*" class="com.hou.action.Loginaction" method="{1}">
<result>/index.jsp</result>
<result name="input">/Login.jsp</result>
</action>
</package>
相关推荐
1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按...
通过上述步骤,我们可以在不改变原有Action代码的情况下,利用Struts2的拦截器机制防止重复提交。这个压缩包中的Eclipse项目可能包含了一个示例实现,你可以通过阅读代码,更深入地理解这个解决方案的工作原理和应用...
在本案例中,由于项目组认为Struts2的标签性能不佳,所以选择了自定义拦截器来实现防止重复提交。 首先,我们来看如何创建自定义拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)的概念,可以对Action的调用...
拦截器防止重复提交的设置步骤 在 Struts2 框架中,防止重复提交是一个非常重要的安全性问题。重复提交可能会导致数据的不一致和系统的不稳定。为了解决这个问题,Struts2 提供了拦截器机制来防止重复提交。在本文...
Struts2默认提供了一些拦截器来帮助处理这个问题,但如题目所述,由于性能考虑,项目组决定不使用Struts2的标签,因此需要自定义拦截器来实现防止重复提交的功能。 自定义拦截器的实现主要分为以下几个步骤: 1. *...
总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...
在这个"struts2实现的简单登陆 附加拦截器防止重复提交"的项目中,我们将深入探讨Struts2如何处理用户登录以及如何通过拦截器来防止重复提交的问题。 首先,我们来理解一下Struts2的核心概念。Struts2框架基于...
Struts2自定义拦截器实现防止重复提交
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
Struts2框架提供了一种解决方案,即使用Token机制来防止表单的重复提交。以下是对这个主题的详细说明: 1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交...
Struts2是一个流行的Java web框架,它...总的来说,Struts2的令牌机制是通过生成和验证令牌来防止重复提交和CSRF攻击的有效方式。开发者应当理解其工作原理,并在需要的地方正确使用,以提高应用程序的安全性和稳定性。
在Web应用中,表单重复...开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。通过这些方法的合理应用,可以有效地提高Web应用的健壮性和用户体验。
总结,Struts2的tokenSession机制是JavaEE Web开发中防止重复提交的有效手段,通过生成并校验token,确保每个请求的唯一性,从而保护了业务数据的完整性。在实际项目中,我们需要正确配置和使用这个机制,以提高应用...
**TokenInterceptor**是Struts2的一个特定拦截器,主要用于防止重复提交。在表单提交过程中,如果用户意外刷新页面,可能会导致数据重复录入。TokenInterceptor通过在客户端生成一个令牌(Token),并在服务器端检查...
- **令牌(Token)**:防止重复提交。 - **异常(Exception)**:异常处理。 - **校验(Validation)**:数据验证。 - **文件上传(FileUpload)**:文件上传处理。 #### 六、总结 拦截器是Struts2框架中一项非常...
总之,防止重复提交是Web应用开发中的重要一环,可以通过Struts2提供的 `<s:token>` 标签结合拦截器,或者结合客户端验证和服务器端状态管理等多种方式来实现。正确实施这些措施,可以有效避免数据的不一致性,提高...
Struts2的Token插件是防止重复提交的一种常见方法。这里的"Strut2Token"很可能是指这个插件的应用。它的工作原理是在用户提交表单时生成一个唯一的令牌,并将其存储在服务器端(例如Session)和客户端(通常是隐藏...
Struts2是一个流行的Java Web框架,它为开发者...通过上述步骤,Struts2的`s:token`标签可以帮助开发者有效地防止重复提交,保证Web应用程序的数据一致性。理解并正确使用这个功能,可以提升应用的健壮性和用户体验。