1、原理:
【1】:<s:token>标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到session中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。
【2】:<result name="invalid.token">/common/noBack.jsp</</result>指当发现重复提交时,需要流转到的页面.
【3】:为action配置TokenInterceptor或者TokenSessionStoreInterceptor拦截器。这两个拦截器都已经在struts-default.xml中定义,但没有包含在defaultStack拦截器栈中。 <interceptor-ref name="token"/>和<interceptor-ref name="defaultStack"/>是两个拦截器的配置,目的是为了接收页面传入的token令牌及参数,其中<interceptor-ref name="token"/>标示启用TokenInterceptor 如果表单重复提交,会提示The form has already been processed or no token was supplied, please try again。修改国际化文件struts.messages.invalid.token 的键值,提供自己定制的错误信息。比如:struts.messages.invalid.token= 您已经提交了表单,请不要重复提交。
2、具体实现:
表单
<s:form action="register" method="post">
<s:token/>
</s:form>
struts配置文件
<action name="register" class="org.sunxin.struts2.action.RegisterAction">
<result name="input">/pages/register.jsp</result>
<!-- 视图invalid.tokenw为不刷新的页面或action,如果是action需要添加type="redirectAction" -->
<result name="invalid.token">/pages/register.jsp</result>
<interceptor-ref name="token"/>
<interceptor-ref name="defaultStack"/>
</action>
3、疑问:
拦截器token和tokenSession到底有什么区别,知情者请留言,不胜感激
为什么我同事用tokenSession好用,我的不好用
分享到:
相关推荐
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
`<s:a>` 相当于HTML的 `<a>` 标签,但提供了与Struts2框架的集成,可以动态生成URL。`<s:action>` 则用于在页面上触发一个特定的Action。 B. `<s:bean>`: 此标签类似于Struts1中的JavaBean引用,但在Struts2中并不...
`<s:token>` - 令牌标签 用于生成防CSRF攻击的令牌。 ```jsp <s:token name="csrfToken"/> ``` 通过以上详细介绍,我们可以看出Struts2的标签库非常丰富,涵盖了Web应用开发中的各个方面,为开发者提供了极大的...
`<s:token>` - 令牌标签 用于防止跨站请求伪造(CSRF)攻击。 ```xml <s:token/> ``` #### 49. `<s:tree>` - 树形标签 创建树形结构。 ```xml <s:tree value="treeData" nodeLabel="%{#node.label}"/> ``` ####...
`<s:token>`标签用于防止重复提交,与Struts2的Token拦截器配合使用。 `<s:tree>`标签用于生成树形结构,适用于层次数据的展示。 `<s:treenode>`定义树结构中的节点。 T. `<s:updownselect>`,`<s:url>`: `<s:...
虽然 Struts 2 不再推荐使用 Struts 1.x 的标签,但在某些情况下仍然可能见到 `<s:bean>` 标签。此标签用于访问 JavaBean 的属性值。例如:`<s:bean name="user" property="firstName"/>`,这里的 `name` 指定了 ...
`<s:if>`、`<s:elseif>`、`<s:else>` 标签 - **用途**:用于条件判断。 - **示例**: ```xml <s:if test="%{isLoggedIn}"> 已登录 </s:if> <s:elseif test="%{isGuest}"> 游客 </s:elseif> <s:else> 未...
- 示例:`<s:choose><s:when test="%{#session.user == 'admin'}">Admin Panel</s:when><s:otherwise>Guest</s:otherwise></s:choose>` - 用途:类似于 Java 中的 switch-case 结构,用于复杂的条件判断。 ##### ...
2. `<s:action>`标签用于在Struts2的配置文件中声明一个action。它在处理Web请求时起到关键作用。 3. `<s:actionerror>`和`<s:actionmessage>`分别用于显示action产生的错误信息和消息信息。 4. `<s:append>`标签...
`<s:param>` 传递参数给其他标签,例如:`<s:a href="myAction.action"><s:param name="param1" value="value1" /></s:a>`。 P. `<s:password>` 用于创建密码输入框,例如:`<s:password name="myPassword" />`。 ...
<s:hidden name="sessionToken" value="%{token}"/> ``` ##### 23. **i18n 标签** - **功能描述**:用于国际化和本地化。 - **示例代码**: ```jsp <s:i18n code="welcome.message" bundle="messages"/> ``` ...
Struts2框架提供了一种简单有效的方式来解决这一问题,即通过`<s:token/>`标签和相关的拦截器机制来实现。 #### 二、Struts2框架简介 Struts2是一个基于Java的开源Web应用框架,它继承了Struts1的优点,并且进行了...
Struts2 提供了一个称为 `<s:token>` 的标签,用于生成一个唯一的标识符,并将其存储在 session 中。当表单提交时,这个标识符会一同发送到服务器。服务器端的拦截器(如 `token` 拦截器)会检查这个标识符,如果...
2. **数据展示标签**:例如 `<s:property>`、`<s:text>` 等,用于显示 Action 中的数据。 ```jsp <s:property value="message"/> <s:text name="welcome.message"/> ``` 3. **验证标签**:例如 `<s:fielderror>...
通过实验,学员能够掌握Struts2中几个常用标签(如`<s:radio>`、`<s:select>`、`<s:token>`)的应用,并理解OGNL表达式的基本用法。这些知识点对于初学者来说至关重要,因为它们构成了Struts2应用开发的基础。 ####...
<s:token name="struts2" /> <s:submit value="Submit" /> </s:form> ``` 然后,在Action配置中,添加`token`拦截器: ```xml <action name="register" class="com.struts2.action.RegisterAction"> <result ...
- `s:token`标签必须与`<s:form>`标签一起使用,因为Struts2的拦截器通常只在表单提交时起作用。 - 如果你使用的是GET方法,记得设置`<s:form method="get">`,因为默认是POST方法。 - 在实际应用中,可能还需要结合...
<s:optiontransferselect name="selectedOptions" list="{'option1','option2','option3'}" headerKey="" headerValue="Select Options" /> ``` - **说明**: 允许用户从一个列表中选择并转移到另一个列表。 30. ...