<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
      回復  更多評論    
    主站蜘蛛池模板: 国产乱子伦精品免费无码专区| 日韩电影免费观看| 免费毛片在线播放| 国产99在线|亚洲| 处破痛哭A√18成年片免费| 亚洲一日韩欧美中文字幕在线| A级毛片内射免费视频| 亚洲精华液一二三产区| 日本高清免费不卡在线| 香蕉视频亚洲一级| 亚洲日韩国产成网在线观看| 一级做受视频免费是看美女| 亚洲熟妇无码AV在线播放| 无码av免费一区二区三区| 亚洲福利电影一区二区?| 成人午夜免费福利| 免费视频成人国产精品网站| 中文亚洲成a人片在线观看| 亚洲人成免费电影| 最近中文字幕大全免费版在线| 不卡一卡二卡三亚洲| 99久久99这里只有免费的精品 | 亚洲人成免费网站| www.免费在线观看| 亚洲AV无码成人专区| 成人免费无遮挡无码黄漫视频| 亚洲看片无码在线视频| 女人毛片a级大学毛片免费| 国产精品亚洲一区二区三区久久 | 久久99热精品免费观看动漫| 亚洲AV综合色区无码一区| 国产综合成人亚洲区| 国产成人高清精品免费鸭子 | 四虎影视久久久免费观看| 亚洲狠狠爱综合影院婷婷| 中国在线观看免费的www| 亚洲av女电影网| 永久免费AV无码国产网站| 国产成人亚洲精品无码AV大片 | 久久久久亚洲av无码专区蜜芽| 2021国内精品久久久久精免费|