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

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

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

    歲月如哥
    人生非夢
    posts - 50,comments - 144,trackbacks - 0
    今天恰巧在一個tomcat同時發布了兩個系統:DAXT、XFXT。tomcat啟動順序為先DAXT后XFXT,啟動完成之后發現DAXT可以登錄,但是XFXT不能登錄(單個系統發布可以登錄)。通過跟蹤XFXT登錄發現在UserAASAction的如下代碼處獲取的SummerLoginModule為com.thunisoft.fy.security.login.FYLoginModule
    復制內容到剪貼板
    代碼:
    LoginContext loginContext = new LoginContext(
    longinModule == null ? GlobalKey.KEY_LoginModule: longinModule, handler);
    loginContext.login();
    subject = loginContext.getSubject();
    request.getSession().setAttribute(GlobalKey.KEY_USER, subject);
    一般情況我們每個系統都在src目錄下有一個SummerLogin.config文件,用來配置登錄所用的LoginModule
     DAXT的為
    引用:
    SummerLoginModule{
       com.thunisoft.fy.security.login.FYLoginModule required debug=true;
    };
    XFXT的為
    引用:
    SummerLoginModule{
       com.thunisoft.fy.security.login.SJFYLoginModule required debug=true;
    };
    通過跟蹤LoginContext的初始化,發現在com.sun.security.auth.login.ConfigFile.init()初始化的時候是從系統變量獲取SummerLogin.config文件并進行初始化的,如下
    復制內容到剪貼板
    代碼:
    String extra_config = System.getProperty("java.security.auth.login.config");
    至此,就需要找到初始化java.security.auth.login.config的地方,最后在com.thunisoft.summer.sys.PropertyResource找到初始化的源碼
    復制內容到剪貼板
    代碼:
    private void setEnvironment() {
                    Properties props = System.getProperties();
                    // 如果運行環境中已經存在,則不配置
                    if (null == props.getProperty(GlobalKey.LOGIN_CONFIG)) {
                            String config = null;
                            try{
                                    config = SysConfiguration.getInstance().getProperty(
                                            GlobalKey.LOGIN_CONFIG);
                            }
                            catch(MissingResourceException mre){
                                    logger.info(GlobalKey.LOGIN_CONFIG + ": Not Configured.");
                            }

                            // 如果配置文件中沒有配置則用缺省值
                            if (null == config || "".equalsIgnoreCase(config.trim())) {
                                    URL url = PropertyResource.class
                                                    .getResource(GlobalKey.LOGIN_CONFIG_MODULE);
                                    if (null != url)
                                            props.setProperty(GlobalKey.LOGIN_CONFIG, url.getFile());
                            } else
                                    props.setProperty(GlobalKey.LOGIN_CONFIG, config);
                    }
            }
    顯然問題原因在于系統變量java.security.auth.login.config只能存在一份,啟動DAXT時候已經初始化,后續啟動XFXT的時候已經不能初始化XFXT的SummerLoginModule。而在XFXT登錄的時候,實際上就只能獲取到DAXT的LoginModule了。
           當然如果幾個系統使用的是同一個LoginModule類,上述問題就不會存在了。目前有三個LoginModule:FYLoginModule、SJFYLoginModule StatLoginModule,如果把這三個類合成為一個公用的LoginModule倒是可以解決問題,但是感覺很怪異。。。。
    posted on 2009-07-15 17:09 歲月如歌 閱讀(1188) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲女人18毛片水真多| 亚洲自偷精品视频自拍| 免费亚洲视频在线观看| 日韩一级视频免费观看| 亚洲精品无码永久在线观看男男| 一二三四在线播放免费观看中文版视频 | 亚洲国产成人久久精品app| 免费在线看黄网站| 亚洲妇熟XXXX妇色黄| 性色午夜视频免费男人的天堂| 久久99亚洲网美利坚合众国| 精品国产sm捆绑最大网免费站| 亚洲人成伊人成综合网久久| 成人超污免费网站在线看| 亚洲av综合av一区二区三区| 国产精品99久久免费| 国产成人无码免费看片软件| 国产V亚洲V天堂无码久久久| 人妻丰满熟妇无码区免费| 亚洲国产精品美女| 男女啪啪永久免费观看网站| 日韩成人毛片高清视频免费看| 亚洲色精品88色婷婷七月丁香 | 亚洲国产成人超福利久久精品| 国产人在线成免费视频| 久久久久久亚洲精品无码| 亚洲人成网站18禁止一区| 毛片在线播放免费观看| 亚洲人成影院在线高清| 免费一级毛片正在播放| A片在线免费观看| 亚洲久悠悠色悠在线播放| 亚洲福利精品电影在线观看| 国产免费一区二区视频| 国产成人亚洲精品| 亚洲性日韩精品国产一区二区| 97国产在线公开免费观看| 免费国产黄网站在线看| 亚洲欧洲自拍拍偷综合| 亚洲国产精品狼友中文久久久| 99在线观看精品免费99|