¤³¤Î¥Ú¡¼¥¸¤òdel.icio.us¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤³¤Î¥Ú¡¼¥¸¤òlivedoor ¥¯¥ê¥Ã¥×¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤òYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤àYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯
Top / Struts / Ʊ´ü¥È¡¼¥¯¥ó¤ÇÆóÅÙ²¡¤·¤Ê¤É¤ò¥Á¥§¥Ã¥¯¤¹¤ë

WEB³«È¯¤Çɬ¤º¤Ä¤¤¤Æ²ó¤ë¤Î¤¬¡¢Submit¥Ü¥¿¥óÆóÅÙ²¡¤·¤äÌá¤ë¥Ü¥¿¥ó¤ò²¡¤µ¤ì¤ë¤Ê¤É¡¢¾¡¼ê¤Ê²èÌÌÁ«°Ü¤ò¤µ¤ì¤Ê¤¤¤è¤¦¤ÊÇÛθ¤Ç¤¹¡£Struts¤Ç¤ÏƱ´ü¥È¡¼¥¯¥ó¤È¤¤¤¦µ¡Ç½¤Ç¤³¤ì¤é¤Î¹Íθ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¯¤ì¤Þ¤¹¡£

¼ÂºÝ¤Ë¥µ¥ó¥×¥ë¤Ç¡¢¤¢¤ë²èÌ̤ÇSubmit¤òÆóÅÙ²¡¤·¤·¤¿¤È¤­¡¢¤½¤ì¤ò¸¡ÃΤ·¤ÆÆó¤ÄÌܤΥꥯ¥¨¥¹¥È¤ò¥¨¥é¡¼¤Ç¤Ï¤¸¤¯¤È¤¤¤¦»ö¤ò¹Í¤¨¤Æ¤ß¤Þ¤¹¡£

Ʊ´ü¥È¡¼¥¯¥ó¤È¤Ï

Ʊ´ü¥È¡¼¥¯¥ó¤Îµ¡Ç½¤È¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

  1. ¤¢¤ë¥¢¥¯¥·¥ç¥ó¤Ç¡¢¥µ¡¼¥Ð¾å¤Ç¥æ¥Ë¡¼¥¯¤ÊID(°Ê²¼¡¢¥È¡¼¥¯¥ó)¤òÀ¸À®¤·¡¢ÊֵѤ¹¤ëhtml¤ËhiddenÅù¤Ç»Å¹þ¤ó¤Ç¤ª¤¯
  2. ¤½¤Î¥¢¥¯¥·¥ç¥ó¤Ç¡¢¥È¡¼¥¯¥ó¤ÏSession¤Ë¤â³ÊǼ¤·¤Æ¤ª¤¯
  3. ¼¡¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤ÏhiddenÆâ¤Î¥È¡¼¥¯¥ó¤¬Èô¤ó¤Ç¤¯¤ë
  4. ¼¡¤Î¥¢¥¯¥·¥ç¥ó¤Ç¡¢hidden¥Ñ¥é¥á¥¿Æâ¤Î¥È¡¼¥¯¥ó¤ÈSession¤Î¥È¡¼¥¯¥ó¤¬Åù¤·¤¤¤³¤È¤ò³Îǧ¤¹¤ë
  5. Åù¤·¤±¤ì¤Ð¡¢Àµ¤·¤¤¥ê¥¯¥¨¥¹¥È¤È¤¤¤¦¤³¤È¤Ç½èÍý¤¹¤ë¡£SessionÆâ¤Î¥È¡¼¥¯¥ó¤ò¿·¤·¤¤¥â¥Î¤Ë½ñ¤­´¹¤¨¡¢hidden¤ÇÊÖ¤¹¥È¡¼¥¯¥ó¤â¤½¤Î¿·¤·¤¤¥â¥Î¤Ë¤¹¤ë¡£Åù¤·¤¯¤Ê¤±¤ì¤Ð¡¢Àµµ¬¤Î¥ê¥¯¥¨¥¹¥È¤Ç¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¡¢¥¨¥é¡¼½èÍý¤¹¤ë¡£
  6. °Ê²¼·«¤êÊÖ¤·¡£

¤³¤ÎÃæ¤Ç¡¢¥È¡¼¥¯¥ó¤ÎÀ¸À®¡¢¥È¡¼¥¯¥ó¥Á¥§¥Ã¥¯¡¢hidden¤Ë¥È¡¼¥¯¥ó¤ò½ñ¤­½Ð¤¹¡¢¤Ê¤É¤ÏStruts¤¬¼«Æ°¤Ç¤ä¤Ã¤Æ¤¯¤ì¤Þ¤¹¤Î¤Ç¡¢»È¤¦Â¦¤Ï¥È¡¼¥¯¥ó¤ò¥Á¥§¥Ã¥¯¤¹¤ë¥á¥½¥Ã¥É¤ò¥¢¥¯¥·¥ç¥ó¥¯¥é¥¹¤Ëµ­½Ò¤·¤¿¤ê¡¢¥¨¥é¡¼½èÍý¤À¤±¤ò¤ä¤Ã¤Æ¤ª¤±¤Ð¤è¤¤¤È¸À¤¦¤³¤È¤Ç¤¹¤Í¡£¥é¥¯¥Á¥ó¤Ç¤¹¡£

¤ä¤Ã¤Æ¤ß¤ë

ή¤ì

index.do -> IndexAction -> index.jsp -> double.do -> DoubleAction -> success.jsp

¤È¤¤¤¦Î®¤ì¤Î¥µ¥ó¥×¥ë¤Ç¤¹¡£

¥½¡¼¥¹

  • IndexAction?
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
      saveToken(request);
      return mapping.findForward("success");
    }
  • index.jsp
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <%@ page language="java" contentType="text/html; charset=UTF-8" %>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    
    <%@page import="org.apache.struts.Globals"%>
    <html:html xhtml="true" lang="true">
    <head>
    <title>Ʊ´ü¥È¡¼¥¯¥ó¤Î²Ôư³ÎǧJSP</title>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
    <html:base />
    </head>
    <body>
    <html:form method="post" action="/double" >
      <html:submit />
    </html:form>
    <%=session.getAttribute(Globals.TRANSACTION_TOKEN_KEY) %>
    </body>
    </html:html>
  • DoubleAction?
    public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response)
         throws Exception {
      ActionMessages errors = new ActionMessages();
      HttpSession session = request.getSession();
      boolean tokenValid = false;
      synchronized (session) {
        tokenValid = isTokenValid(request);
        saveToken(request);
      }
      if (!tokenValid) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("token¥Á¥§¥Ã¥¯¥¨¥é¡¼");
        errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                new String(buffer), false));
        saveErrors(request, errors);
      }
    }

¥»¥Ã¥·¥ç¥ó¤Ë¥È¡¼¥¯¥ó¤ò¥»¥Ã¥È

IndexAction?¤ÇSession¤Ë¥È¡¼¥¯¥ó¤ò¥»¥Ã¥È¤·¤Æ¤¤¤Þ¤¹¡£¥È¡¼¥¯¥ó¤òÀ¸À®¤·¤ÆSession¤Ë¥»¥Ã¥È¤¹¤ë¥á¥½¥Ã¥É¤Ï

org.apache.struts.action.Action#saveToken

¤Ç¤¹*1*2¡£

JSP¤Îhidden¤Ë¥È¡¼¥¯¥ó¤ò¥»¥Ã¥È

index.jsp¤Ç¤Ïform¤ò»È¤Ã¤ÆSubmit¤·¤Æ¤¤¤Þ¤¹¤¬¡¢½ÐÎϤµ¤ì¤ëhtml¤Ë¤Ï¼«Æ°Åª¤Ëhidden¥¿¥°¤¬ÁÞÆþ¤µ¤ì¤Þ¤¹¡£¶ñÂÎŪ¤Ë¤ÏSubmit¤Îform¤Ï

<html:form method="post" action="/double" >
  <html:submit />
</html:form>

¤È¤·¤Æ¤¤¤ë¤À¤±¤Ê¤Î¤Ç¤¹¤¬½ÐÎϤµ¤ì¤ëhtml¤Ï

<form id="hogeForm" method="post" action="/strutsExamples/double.do">
  <div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" 
         value="612326e14b3ce599284543e2246f170b" /></div>
  <input type="submit" value="Submit" />
</form>

¤È¤Ê¤ê¤Þ¤¹¡£¤¢¤ë¥­¡¼ÃͤÇhidden¤Ë¥È¡¼¥¯¥ó¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Þ¤¹*3¡£

¼¡¤Î¥ê¥¯¥¨¥¹¥È¤Ç¡¢¥µ¡¼¥Ð¤Ç¥È¡¼¥¯¥ó¤Î¥Á¥§¥Ã¥¯

¤µ¤Æ¤³¤ì¤Çsession¤Ë¥È¡¼¥¯¥ó¤¬¥»¥Ã¥È¤µ¤ì¡¢¤µ¤é¤Ëhtml¤Îhidden¤Ë¥È¡¼¥¯¥ó¤¬¥»¥Ã¥È¤µ¤ì¤Þ¤·¤¿¡£¼¡¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤ë¥¢¥¯¥·¥ç¥ó(DoubleAction?)¤Ç¤Ï

synchronized (session) {
    tokenValid = isTokenValid(request);
    saveToken(request);
}
if (!tokenValid) {
    StringBuffer buffer = new StringBuffer();
    buffer.append("token¥Á¥§¥Ã¥¯¥¨¥é¡¼");
    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
            new String(buffer), false));
    saveErrors(request, errors);
}

¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

isTokenValid(request);

¤¬Session¤Î¥È¡¼¥¯¥ó¤Èhidden¤Î¥È¡¼¥¯¥ó¤ò¥Á¥§¥Ã¥¯¤¹¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£¤Ç¡¢¼¡¤Î

saveToken(request);

¤ÇºÆÅ٥ȡ¼¥¯¥ó¤ò½ñ¤­´¹¤¨¤Æ¤¤¤Þ¤¹¡£

isTokenValid?(request)¤Ï¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ç¤¹¤¬¡¢¥È¡¼¥¯¥ó¤òÊѹ¹¤¹¤ë¤Þ¤Ç¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ç¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤Î¤Ç¡¢session¥¤¥ó¥¹¥¿¥ó¥¹¤Î¥â¥Ë¥¿¤ò¼èÆÀ¤·¤Æ½èÍý¤·¤Æ¤¤¤Þ¤¹*4¡£

Form¤Ç¤Ê¤¯<html:link />¤Î¾ì¹ç

¾å¤ÎÎã¤Î¤è¤¦¤Ë<html:form />¥¿¥°¤Î¾ì¹ç¤Ï¼«Æ°¤Çhidden¥¿¥°¤¬ÁÞÆþ¤µ¤ì¥È¡¼¥¯¥ó¤¬Post¤µ¤ì¤Þ¤·¤¿¤¬¡¢<html:link />¥¿¥°¤Ê¤É¤Î¾ì¹ç¤Ï

<html:link action="/double" transaction="true">¥ê¥ó¥¯</html:link>

¤È¤·¤Ætransaction°À­¤òtrue¤Ë»ØÄꤷ¤Þ¤¹¡£transaction°À­¤ò»ØÄꤹ¤ë¤È

http://localhost:8080/strutsExamples/double.do
  ?org.apache.struts.taglib.html.TOKEN=f8e8901ab4cc126a148fe3d46d5596e7

¤È¥Ñ¥é¥á¥¿¤Ë¥È¡¼¥¯¥ó¤¬ÀßÄꤵ¤ì¤Þ¤¹¡£¤Á¤Ê¤ß¤Ë¤³¤Îtransaction°À­¤Ï¥Ç¥Õ¥©¥ë¥È¤Ïfalse¤Ê¤Î¤Ç¡¢¥È¡¼¥¯¥ó¤òÁ÷¿®¤·¤¿¤¤¾ì¹ç¤ÏÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¤¢¤²¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¥µ¥ó¥×¥ë¡£

¤³¤Îµ­»ö¤Ï

ÁªÂò»è Åêɼ
¤ª¤â¤·¤í¤«¤Ã¤¿ 162  
¤½¤¦¤Ç¤â¤Ê¤¤ 20  
  • ¤½¤Î¾¤Î¥ê¥ó¥¯·Ï¤Î¥¿¥°¤Ï¡¢rewrite¥¿¥°¤¬¤¢¤ê¤Þ¤¹¤Í¡£¤³¤ì¤âtransaction="true"¤ò¤Ä¤±¤ÆÀ©¸æ¤·¤Þ¤¹¡£ -- ¤­¤Î? 2008-01-27 (Æü) 00:39:44
  • ¥á¥¤¥ó²èÌ̤ÈÊ̤˥µ¥Ö¥¦¥£¥ó¥É¥¦¤Ç¤â¹¹¿·¤¹¤ë²èÌ̤ξì¹ç¤Ã¤Æ¥È¡¼¥¯¥ó¤¬¤º¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¤è¤Í¡© -- yama? 2011-03-02 (¿å) 13:07:06

¤³¤Î¥Ú¡¼¥¸¤òdel.icio.us¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤³¤Î¥Ú¡¼¥¸¤òlivedoor ¥¯¥ê¥Ã¥×¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤òYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤àYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯
Top / Struts / Ʊ´ü¥È¡¼¥¯¥ó¤ÇÆóÅÙ²¡¤·¤Ê¤É¤ò¥Á¥§¥Ã¥¯¤¹¤ë

¸½ºß¤Î¥¢¥¯¥»¥¹:56329


*1 Ãæ¤Ç¤ÏsessionId¤òMD5¤Ç¥Ï¥Ã¥·¥å¤·¤Æ¡¢¹¹¤Ë¸½ºß»þ¹ï¤Ç¥Ï¥Ã¥·¥å¤·¤Æ¤¤¤ë¤ß¤¿¤¤¤Ç¤¹
*2 Session¤Ë¥»¥Ã¥È¤µ¤ì¤ë¤È¤­¤Î¥­¡¼ÃͤÏ"org.apache.struts.action.TOKEN"¤Ç¤¹¡£¤³¤ÎÄê¿ôÃͤÏorg.apache.struts.Globals.TRANSACTION_TOKEN_KEY¤Ç¼èÆÀ²Äǽ¤Ç¤¹¡£
*3 hidden¤ÎÄê¿ôÃÍ"org.apache.struts.taglib.html.TOKEN" ¤Ïorg.apache.struts.Globals.TOKEN_KEY¤Ç¼èÆÀ²Äǽ¤Ç¤¹¡£
*4 ¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ê¥á¥½¥Ã¥É¤òÍѰդ·¤Æ¤ª¤¤¤Æ¤¯¤ì¤Æ¤â¤¤¤¤¤è¤¦¤Ê¡¢¡¢¡¢

¥È¥Ã¥×   ÊÔ½¸ Åà·ë º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2012-03-22 (ÌÚ) 11:44:09 (58d)