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

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

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

    天空是藍色的

    做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標文件 #gcc helloworld.o -o helloworld //編譯成可執行exe #helloworld //運行exe
    數據加載中……
    How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl

    How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl

    思路
    首先BasePage是需要登陸的 protected ,
    BasePage實現org.apache.tapestry.event.PageValidateListener方法,判斷asm對象Visit是否已經登陸
    如沒visit==null,去cookies找回用戶名和密碼從cycle中獲得Login頁面
    Login頁面實現common.tapestry.IConstructVisit接口。LoginPage登陸時保存用戶名密碼到cookies中,并對cookies的值加密,
    cookies的key是baseUrl+key,取回時對cookies值解密,加密解密的password放到Application的meta信息中

    實現代碼如下
    抽象接口LoginCookiesManager

    package common.tapestry.engine;

    public interface LoginCookiesManager {
     
     String APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION = "common.tapestry.default-cookies-encrypt";//是否需要加密,默認加密
     String APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY = "common.tapestry.default-cookies-encryption-key";//加密的password

     public static final String COOKIES_KEY_LOGIN_USERNAME = "USERNAME";
     public static final String COOKIES_KEY_LOGIN_PASSWORD = "PASSWORD";
     
     /**
      * 將用戶名和密碼寫入cookies
      * @param username
      * @param password
      * @param maxAge
      */
     void writeCookies(String username,String password,int maxAge);
     /**
      * 清除用戶名和密碼cookies
      */
     void removeCookies();
     /**
      * 從cookies中獲得用戶名
      * @return
      */
     String getUsername();
     /**
      * 從cookies中獲得密碼
      * @return
      */
     String getPassword();
    }

    LoginCookiesManagerImpl 實現

    package common.tapestry.engine;

    import org.apache.hivemind.ApplicationRuntimeException;
    import org.apache.tapestry.engine.IPropertySource;
    import org.apache.tapestry.services.AbsoluteURLBuilder;
    import org.apache.tapestry.services.CookieSource;
    import org.apache.tapestry.web.WebRequest;
    import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
    import org.jasypt.exceptions.EncryptionOperationNotPossibleException;

    public class LoginCookiesManagerImpl implements LoginCookiesManager {
     private static StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
     private IPropertySource applicationPropertySource;
     private CookieSource cookieSource;
     private WebRequest request;
     private AbsoluteURLBuilder absoluteURLBuilder;

     public void setApplicationPropertySource(
       IPropertySource applicationPropertySource) {
      this.applicationPropertySource = applicationPropertySource;
      String encrypKey = getCookiesEncryptionKey();
      standardPBEStringEncryptor.setPassword(encrypKey);
     }

     private String decrypt(String value) {
      String tmp = value;
      try {
       tmp = standardPBEStringEncryptor.decrypt(value);
      } catch (EncryptionOperationNotPossibleException e) {
       throw new ApplicationRuntimeException("please clear your cookies");
      }
      return tmp;
     }

     private String encrypt(String value) {
      return standardPBEStringEncryptor.encrypt(value);
     }

     private String getCookiesEncryptionKey() {
      String temp = applicationPropertySource
        .getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY);
      return (temp != null) ? temp : "crypassword";
     }

     private boolean isCookiesEncryption() {
      String temp = applicationPropertySource
        .getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION);
      return (temp != null) ? Boolean.valueOf(temp).booleanValue() : true;
     }

     public void removeCookies() {
      String cookiesKeyLogin_username = generateApplicationCookiesKey_Login__Username();
      String cookiesKeyLogin_password = generateApplicationCookiesKey_Login__Password();
      cookieSource.removeCookieValue(cookiesKeyLogin_username);
      cookieSource.removeCookieValue(cookiesKeyLogin_password);
     }

     public void writeCookies(String username, String password, int maxAge) {
      writeCookiesValue_Login__Username(username, maxAge);
      writeCookiesValue_Login__Password(password, maxAge);
     }

     public String getUsername() {
      String value = cookieSource
        .readCookieValue(generateApplicationCookiesKey_Login__Username());
      if (isCookiesEncryption()) {
       value = decrypt(value);
      }
      return value;
     }

     public String getPassword() {
      String value = cookieSource
        .readCookieValue(generateApplicationCookiesKey_Login__Password());
      if (isCookiesEncryption()) {
       value = decrypt(value);
      }
      return value;
     }

     private void writeCookiesValue_Login__Username(String username, int maxAge) {
      String key = generateApplicationCookiesKey_Login__Username();
      String value = username;
      if (isCookiesEncryption()) {
       value = encrypt(username);
      }
      cookieSource.writeCookieValue(key, value, maxAge);
     }

     private void writeCookiesValue_Login__Password(String password, int maxAge) {
      String key = generateApplicationCookiesKey_Login__Password();
      String value = password;
      if (isCookiesEncryption()) {
       value = encrypt(password);
      }
      cookieSource.writeCookieValue(key, value, maxAge);
     }

     private String generateApplicationCookiesKey_Login__Username() {
      return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_USERNAME);
     }

     private String generateApplicationCookiesKey_Login__Password() {
      return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_PASSWORD);
     }

     private String generateApplicationCookiesKey(String key) {
      String contextPath = request.getContextPath();
      return absoluteURLBuilder.constructURL(contextPath + "/") + key;
     }

     public void setCookieSource(CookieSource cookieSource) {
      this.cookieSource = cookieSource;
     }

     public void setRequest(WebRequest request) {
      this.request = request;
     }

     public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder) {
      this.absoluteURLBuilder = absoluteURLBuilder;
     }

    }

    hivemodule.xml配置

    <?xml version="1.0"?>
    <module id="common.tapestry" version="1.0.0">
    <service-point id="LoginCookiesManager" interface="common.tapestry.engine.LoginCookiesManager">
    <invoke-factory>
       <construct class="common.tapestry.engine.LoginCookiesManagerImpl" >
         <set-object property="cookieSource" value="infrastructure:cookieSource"/>
         <set-service property="absoluteURLBuilder" service-id="tapestry.request.AbsoluteURLBuilder"/>
                  <set-service property="request" service-id="tapestry.globals.WebRequest"/>  
                  <set-object property="applicationPropertySource" value="service:tapestry.props.ApplicationPropertySource"/>             
          </construct>
      </invoke-factory> 
    </service-point>

    <contribution configuration-id="tapestry.Infrastructure">
        <property name="loginCookiesManager" object="service:common.tapestry.LoginCookiesManager"/>
    </contribution>
    </module>

    使用

    在BasePage中獲得該service

    public LoginCookiesManager getLoginCookiesManager() {
      LoginCookiesManager svc = (LoginCookiesManager) getRequestCycle().getInfrastructure().getProperty("loginCookiesManager");
      return svc;
     }
     
    /**
      * 判斷用戶是否已經登陸
      *
      * @return
      */
     private boolean isUserLoggedIn() {
      Object asmVisit = this.getRequestCycle().getInfrastructure().getApplicationStateManager().get(ASM_VISIT);

      if (!(asmVisit instanceof IVisit)) {
       throw new ApplicationRuntimeException(
         "The visit class must implements " + IVisit.class);
      }
      IVisit visit = (IVisit) asmVisit;
      if (visit == null || (visit != null && !visit.isLoggedIn())) {
       IPage loginPage = getRequestCycle().getPage(PAGE_LOGIN);
       if (loginPage instanceof IConstructVisit) {
        //從cookies中找回用戶名和密碼
        String cookiesLoginUsername = getLoginCookiesManager().getUsername();
        String cookiesLoginPassword = getLoginCookiesManager().getPassword();
        IConstructVisit constructVisit = (IConstructVisit) loginPage;
        visit = constructVisit.doConstructVisit(this.getRequestCycle(),
          cookiesLoginUsername, cookiesLoginPassword);
       } else {
        throw new ApplicationRuntimeException("The " + PAGE_LOGIN
          + " class must implements " + IConstructVisit.class);
       }
      }
      if (visit == null)
       return Boolean.FALSE.booleanValue();
      return visit.isLoggedIn();
     } 


    Login類必須實現如下接口
    package common.tapestry;

    import org.apache.tapestry.IRequestCycle;

    public interface IConstructVisit {
     public IVisit doConstructVisit(IRequestCycle cycle, String username,String password);
    }

     
    系原創
    其他blog地址  http://oxyc.spaces.live.com/
                             http://hiok.blog.sohu.com

    posted on 2008-03-24 15:26 bluesky 閱讀(3856) 評論(5)  編輯  收藏 所屬分類: 工作總結

    評論

    # re: How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl[未登錄] 2008-09-11 20:30 kelly

    是不是不全啊!能不能也寫全一下!謝謝!
      回復  更多評論    

    # re: How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl 2008-09-12 21:05 bluesky

      回復  更多評論    

    # re: How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl[未登錄] 2008-09-16 09:37 kelly

    ASM_VISIT,PAGE_LOGIN是什么東東啊?IVisit又是什么東東啊?IConstructVisit這個接口又有什么作用啊?能否給予一個具體一點是列啊!剛研究!請賜教!非常感激!
      回復  更多評論    

    # re: How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl[未登錄] 2008-09-16 09:52 kelly

    能否寫個簡單的登陸的示例給我?非常感謝!
      回復  更多評論    

    # re: How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl 2008-09-19 22:03 bluesky

    你需要自己擴展org.apache.tapestry.html.BasePage基類并實現 org.apache.tapestry.event.PageValidateListener
    void pageValidate(PageEvent event);方法內通過
    org.apache.tapestry.services.CookieSource把用戶名和密碼從cookies中找回來然后調用登錄業務邏輯,然后繼續決定是否跳轉登錄Login還是繼續Render該Page
      回復  更多評論    
    主站蜘蛛池模板: 亚洲国产成人在线视频| 午夜亚洲福利在线老司机| 亚洲av色福利天堂| a级毛片高清免费视频| 亚洲人成人77777网站| 中国一级特黄的片子免费| a级亚洲片精品久久久久久久 | 亚洲AV无码成人精品区狼人影院 | 久久精品视频亚洲| 国精产品一区一区三区免费视频| 亚洲精品无码专区久久久| 中文在线观看永久免费| 亚洲AV无码久久| 青青青国产在线观看免费网站| 亚洲日韩AV一区二区三区中文| 国产一区二区三区免费看| 国产日韩久久免费影院| 久久久亚洲欧洲日产国码农村| 91香蕉在线观看免费高清| 亚洲国产日韩精品| 亚洲av无码成人精品区| 可以免费观看的国产视频| 亚洲免费在线视频观看| 国产精品黄页在线播放免费| 久久国产精品免费一区| 亚洲综合激情另类小说区| 日韩一级免费视频| 羞羞视频免费网站在线看| 亚洲大尺码专区影院| 免费a级毛片大学生免费观看 | 亚洲1区2区3区精华液| 在线亚洲精品自拍| 久久成人国产精品免费软件| 亚洲人AV在线无码影院观看| 亚洲日韩中文字幕日韩在线| 四虎影视成人永久免费观看视频 | 羞羞网站免费观看| 亚洲国产精品自在在线观看 | 日韩一区二区在线免费观看| 水蜜桃视频在线观看免费播放高清| 亚洲一区免费视频|