`
lzstone
  • 浏览: 94081 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

防止页面刷新产生二次提交的Token

    博客分类:
  • java
 
阅读更多

1、自己感觉strut1的Token不是很好用,也许是我没有用明白,所以决定写一个

public class RequestToken {

    /*
     * 存入token
     */
   
    static public String saveToken(HttpSession session) {
        Long requestToken = System.currentTimeMillis();
        //System.currentTimeMillis()点击频率高的时候会存在不安全因素,可以采用UUID,或者用随机产生32位
        if (session.getAttribute("tokenList") == null) {
            ArrayList<String> tokenList = new ArrayList<String>();
            tokenList.add(String.valueOf(requestToken));
            session.setAttribute("tokenList", tokenList);
        } else {
            ArrayList<String> tokenList = (ArrayList<String>) session
                    .getAttribute("tokenList");
            tokenList.add(String.valueOf(requestToken));
            session.setAttribute("tokenList", tokenList);
        }
        return String.valueOf(requestToken);
    }

    /*
     * 验证token值
     */
    static public boolean isTokenValid(HttpSession session, String requestToken) {
        ArrayList<String> tokenList = null;
        if (session.getAttribute("tokenList") == null) {
            tokenList = new ArrayList<String>();
        } else {
            tokenList = (ArrayList<String>) session.getAttribute("tokenList");
        }
        return tokenList.contains(requestToken);
    }

    /*
     * 移除当前token
     */
    static public void removeRequestToken(HttpSession session,
            String requestToken) {
        ArrayList<String> tokenList = null;
        if (session.getAttribute("tokenList") == null) {
            tokenList = new ArrayList<String>();
        } else {
            tokenList = (ArrayList<String>) session.getAttribute("tokenList");
        }
        tokenList.remove(requestToken);
        session.setAttribute("tokenList", tokenList);
    }

    /*
     * 重置token
     */
    static public void resetToken(HttpSession session) {
        ArrayList<String> tokenList = new ArrayList<String>();
        session.setAttribute("tokenList", tokenList);
    }
}

分享到:
评论

相关推荐

    struts token 防止页面刷新,重复提交

    ### Struts Token机制防止页面刷新及重复提交 在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于...

    防止页面刷新重复提交的方法.

    防止页面刷新重复提交是 Web 开发中常见的问题,多次提交表单可能会导致不必要的数据重复录入、服务器压力增大等问题。下面我们将详细介绍防止页面刷新重复提交的方法。 一、验证码方法 验证码方法是防止页面刷新...

    防止页面刷新、定时刷新间隔刷新

    防止页面刷新主要是为了避免用户重复提交表单数据。在实际开发中,可以通过多种方法来达到这一目的: 1. **使用JavaScript禁止表单重复提交**: - 在表单提交后,可以利用JavaScript禁用提交按钮或表单,从而避免...

    防止用户刷新,重复提交数据

    在Web开发中,防止用户刷新页面而导致重复提交数据是一个重要的问题。这通常涉及到表单提交、支付确认等关键操作,确保这些操作仅执行一次是非常必要的。本资源提供了一个解决方案,通过使用“Token”机制来避免这种...

    防止页面的重复提交和刷新

    重复提交通常发生在用户在未收到明确反馈的情况下尝试多次提交表单的情况。这种情况可能会导致数据库中出现重复的数据记录,从而影响数据的一致性和准确性。例如,在在线购物系统中,用户可能会担心支付请求没有被...

    .NET 刷新页面防止表单二次提交的实现方法

    在.NET框架中,防止页面刷新时表单被重复提交是一个常见的问题,尤其是在存在服务器端控件按钮的情况下。当用户点击提交按钮后,如果不进行适当的处理,可能会因为多种原因导致页面刷新(如用户点击浏览器的刷新按钮...

    struts2token回退刷新

    Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...

    struts token机制解决表单重复提交

    如果匹配,说明是第一次提交,服务器执行业务逻辑;如果不匹配或者Session中不存在该Token,则认为是重复提交,服务器会忽略此次请求。 二、实现步骤 1. **配置Action**:在Struts的配置文件(struts.xml或struts....

    利用struts的token控制重复提交

    Struts的Token机制主要用来防止用户意外或恶意的多次提交表单,例如在刷新页面时重复提交数据。它的工作原理如下: 1. **生成Token**: 当用户访问一个需要防重复提交的表单时,服务器会生成一个唯一的Token并将其...

    Struts之Token解决表单那重复提交

    如果Token已经存在于会话中并且与请求中的Token匹配,说明这是第一次提交;否则,说明是重复提交,可以抛出异常或者返回一个提示信息。 5. **清理Token** 当处理完请求后,记得从会话中删除Token,以免影响下一次...

    J2EE框架-重复提交、重复刷新、防止后退的问题以及处理方式

    - 利用`window.location.replace()`替换当前URL,防止浏览器历史记录中保存该页面,减少用户通过刷新或后退按钮重复提交的可能。 - 设置表单提交后的提示信息,告知用户操作已完成,避免再次点击。 - **防止后退...

    防止表单重复提交

    这种方法有效防止了用户短时间内多次点击提交按钮的情况,但并不能应对用户刷新页面或使用浏览器的前进/后退功能导致的重复提交。 第二种情况,用户在表单提交后刷新页面,会导致浏览器重新发送之前的POST请求,...

    Struts2解决表单重复提交

    在Web应用中,表单重复...开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。通过这些方法的合理应用,可以有效地提高Web应用的健壮性和用户体验。

    防止恶意刷新

    恶意刷新指的是用户通过不断刷新页面来达到某种目的的行为,例如试图绕过网站的安全机制、攻击表单提交等。这种行为不仅会影响用户体验,还会对服务器造成不必要的负担,甚至导致数据安全问题。因此,实现有效的防止...

    PHP防止刷新重复提交页面的示例代码

    这样,即使用户刷新页面,由于Session变量已经更新,服务器将不再处理第二次提交的数据,而是直接返回提示信息。这种方法有效地防止了因刷新页面而产生的重复提交问题。 此外,还可以结合其他方法,如令牌验证...

    防重复提交代码

    例如,在用户提交表单后,由于网络延迟或其他原因导致用户多次点击提交按钮或浏览器缓存导致页面刷新时,可能会出现数据的重复提交。这不仅会导致数据库数据不一致的问题,还可能引发业务逻辑错误,如订单重复等。...

    一个注解解决页面重复提交

    在网页应用中,用户可能会因误操作或网络延迟导致页面上的表单被多次提交,这被称为页面重复提交问题。为了解决这个问题,开发者通常会采取一些策略,其中使用注解是一种简洁有效的方法。本文将详细讲解如何利用注解...

    防止重复提交

    4. **表单重置**:提交后立即清空或重置表单,使用户看到已提交的状态,同时也防止了用户二次提交。 5. **使用Lock机制**:在用户点击提交后锁定表单,直到服务器返回确认信息或者超时,解锁后再允许用户操作。 综...

    php页面防重复提交方法总结

    如果发生第二次提交,由于session中的token已经被销毁,所以验证失败,从而阻止了重复提交。这种方法同样提高了安全性,但同样需要管理session。 这些方法各有优缺点,实际应用中应根据项目需求和安全性考虑选择...

Global site tag (gtag.js) - Google Analytics