<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
    主站蜘蛛池模板: 四虎永久成人免费影院域名| 日韩在线免费播放| 亚洲AV无码日韩AV无码导航| 一级特黄a大片免费| www国产亚洲精品久久久| 日日狠狠久久偷偷色综合免费| 国产免费资源高清小视频在线观看| 亚洲精华国产精华精华液好用| 午夜影视在线免费观看| 日韩色日韩视频亚洲网站| 国产免费观看黄AV片| 五月天婷婷免费视频| 国产亚洲成人在线播放va| 国产一级一毛免费黄片| 亚洲成人精品久久| 18勿入网站免费永久| 亚洲欧美日韩中文高清www777| 国产婷婷高清在线观看免费| 一区二区在线免费视频| 日韩亚洲人成在线综合日本| 最近最好最新2019中文字幕免费| 亚洲成人黄色在线观看| 日韩在线视频免费看| 特级毛片aaaa免费观看| 亚洲欧洲日产国码无码网站| 99精品视频免费在线观看| 亚洲一级毛片在线观| 内射无码专区久久亚洲| 久久免费高清视频| 亚洲人配人种jizz| 亚洲黄片手机免费观看| 久久久久久一品道精品免费看 | 久久黄色免费网站| 亚洲国产午夜电影在线入口| 国产精品免费播放| 久久精品乱子伦免费| 亚洲日韩中文字幕一区| 亚洲永久无码3D动漫一区| 国产精品视频免费观看| 日韩毛片免费一二三| 亚洲美女精品视频|