<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
    主站蜘蛛池模板: 国产v片免费播放| 亚洲国产精品国自产电影| 伊人久久国产免费观看视频| 国产亚洲av片在线观看16女人| 亚洲免费观看网站| 国产精品亚洲精品日韩动图| 亚洲日韩精品一区二区三区无码 | 国产成人精品亚洲| 亚洲精品乱码久久久久久自慰 | 四虎免费大片aⅴ入口| 一级做a爰片久久毛片免费看| 亚洲AV成人一区二区三区AV| 日本黄页网站免费| 四虎国产精品永久免费网址| 免费亚洲视频在线观看| 亚洲精品影院久久久久久| 亚洲国产成人五月综合网 | 一级女人18毛片免费| 福利免费在线观看| 亚洲AV成人精品日韩一区| 亚洲av福利无码无一区二区| 免费一级毛片在级播放| 999国内精品永久免费视频| 精品免费久久久久国产一区 | 亚洲成AV人网址| 日韩精品无码区免费专区| 黄色网址在线免费| 国产VA免费精品高清在线| 亚洲日韩精品A∨片无码加勒比| 国产av无码专区亚洲av桃花庵| 四虎AV永久在线精品免费观看| 国产成人无码免费看视频软件| 免费av一区二区三区| 一区二区三区免费在线视频 | 每天更新的免费av片在线观看| 三级黄色免费观看| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲一区二区三区在线观看网站| 亚洲AV无码一区二区二三区软件 | 18禁男女爽爽爽午夜网站免费| baoyu116.永久免费视频|