<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    Struts1.x中的令牌(Token)使用

    使用token是為了防止重復(fù)提交,像灌水之類的.

    LoginAction:

    package com.web.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;

    public class LoginAction extends DispatchAction {
        
        
    public ActionForward get(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                
    throws Exception {
            
    //保存令牌(保存在jsp動(dòng)態(tài)生成的32位jsessionid)\
            this.saveToken(request);
            System.out.println(
    "begin save");
            
    return mapping.findForward("login");
        }

        
        
    public ActionForward login(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                
    throws Exception {
            
    /*if(this.isTokenValid(request))
            {
                System.out.println("valid");
                this.resetToken(request);
                return mapping.findForward("ok");
            }
    */

            
    //這個(gè)寫法和上面注釋部分一樣效果
            if(this.isTokenValid(request,true))
            
    {
                System.out.println(
    "valid");
                
    return mapping.findForward("ok");
            }

            
    else
            
    {
                System.out.println(
    "invalid");
                
    return mapping.findForward("error");
            }

        }

    }

    struts-config.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

    <struts-config>
        
    <data-sources />
        
    <form-beans>
            
    <form-bean name="loginForm" type="com.web.form.LoginForm"></form-bean>
        
    </form-beans>
        
    <global-exceptions />
        
    <global-forwards />
        
    <action-mappings>
            
    <action path="/login" parameter="method" name="loginForm"
                type
    ="com.web.action.LoginAction">
                
    <forward name="login" path="/login.jsp" />
                
    <forward name="ok" path="/ok.jsp" />
                
    <forward name="error" path="/error.jsp" />
            
    </action>
        
    </action-mappings>
        
    <message-resources parameter="" />
    </struts-config>


    index.jsp:
    <%@page contentType="text/html; charset=GBK"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <c:set var="ctx" value="${pageContext.request.contextPath}" />
    <html>
      
    <head>
        
    <title>My Jsp</title>
      
    </head>
      
    <body>
      
    <href="${ctx}/login.do?method=get">發(fā)言</a>
      
    </body>
    </html>

    login.jsp:
    <%@page contentType="text/html; charset=GBK"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    <html>
      
    <head>
        
    <title>My Jsp</title>
      
    </head>
      
    <body>
      
    <c:set var="ctx" value="${pageContext.request.contextPath}"/>
      
    <!-- 此處必須使用html標(biāo)簽,否則token不能用 -->
      
    <html:form action="login.do?method=login" method="post">
        
    <html:submit value="提交"></html:submit>
      
    </html:form>
      
    </body>
    </html>

    當(dāng)你運(yùn)行第一次的時(shí)候,會(huì)提示你"成功".
    這時(shí)我們退到login.jsp查看一下源代碼:
    <html>
      
    <head>
        
    <title>My Jsp</title>
      
    </head>
      
    <body>
      
      
    <form name="loginForm" method="post" action="/strutsToken/login.do?method=login">
    <div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="d7484f95247cf242a6f35107a1c7ac25"></div>
        
    <input type="submit" value="提交">
      
    </form>
      
    </body>
    </html>
    對(duì)比一下我們寫的login.jsp多了一個(gè)隱藏域:
    <div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="d7484f95247cf242a6f35107a1c7ac25"></div>
    此時(shí)生成了一個(gè)32位的唯一的JsessionID做為值.
    與LoginAction中的get方法的saveToken(request)是一樣的.
    此句的作用就是把一個(gè)jsessionid保存到request范圍里.

    在我們后退重新調(diào)用:
    if(this.isTokenValid(request,true))
            
    {
                System.out.println(
    "valid");
                
    return mapping.findForward("ok");
            }
    時(shí),就會(huì)拿login.jsp里傳過來的jsessionid和request的
    進(jìn)行比較,如果一樣,說明不合法.因?yàn)槲覀兊牟僮鞫际窃谝粋€(gè)請(qǐng)求會(huì)話里
    操作的.說明你在重復(fù)提交.
    如果不一樣,說明重新生成了一個(gè)唯一的jsessionid(新開一個(gè)瀏覽器),
    開啟了一個(gè)新會(huì)話,重新提交,這是合法的.
    這樣就防止了表單重復(fù)提交問題.
    源碼下載

    posted on 2008-01-13 23:17 々上善若水々 閱讀(5527) 評(píng)論(3)  編輯  收藏 所屬分類: JavaWeb

    評(píng)論

    # re: Struts1.x中的令牌(Token)使用  回復(fù)  更多評(píng)論   

    非常好,非常好,非常好
    2009-06-16 10:04 | GloomySunday

    # re: Struts1.x中的令牌(Token)使用[未登錄]  回復(fù)  更多評(píng)論   

    11
    2013-11-21 14:32 | 1

    # re: Struts1.x中的令牌(Token)使用[未登錄]  回復(fù)  更多評(píng)論   

    1111
    2013-11-21 14:32 | 1
    主站蜘蛛池模板: 国产在线播放线91免费| 亚洲国产日产无码精品| 亚洲午夜福利精品久久 | 亚洲w码欧洲s码免费| 亚洲人成在线电影| 亚洲高清无在码在线电影不卡| 亚洲成A∨人片在线观看不卡 | 97在线观免费视频观看| 国产乱码免费卡1卡二卡3卡| 大地资源二在线观看免费高清| 在线观看特色大片免费视频| 毛片免费在线播放| 日本大片在线看黄a∨免费| 在线视频免费观看www动漫| 日本高清免费不卡视频| 内射无码专区久久亚洲| 国产国拍亚洲精品福利| 亚洲精品国产精品乱码视色 | 国产精品成人四虎免费视频| 免费国产精品视频| 国产精品亚洲高清一区二区| 国产亚洲一区二区手机在线观看| 久久香蕉国产线看观看亚洲片| 亚洲黄网在线观看| 亚洲人成色777777老人头| 精品亚洲福利一区二区| 中文字幕乱码系列免费| 3d成人免费动漫在线观看| 免费观看成人毛片a片2008| 国产在线观看免费完整版中文版| 亚洲区日韩区无码区| 久久亚洲日韩精品一区二区三区 | 免费在线观看黄色毛片| 亚洲午夜福利AV一区二区无码| 精品无码一区二区三区亚洲桃色 | 亚洲AV无码久久久久网站蜜桃| 亚洲区日韩精品中文字幕| 特级毛片A级毛片免费播放| 99re6在线精品免费观看| 2020因为爱你带字幕免费观看全集| 蜜桃视频在线观看免费网址入口|