復(fù)制內(nèi)容到剪貼板
一般情況我們每個(gè)系統(tǒng)都在src目錄下有一個(gè)SummerLogin.config文件,用來配置登錄所用的LoginModule代碼:
LoginContext loginContext = new LoginContext(
longinModule == null ? GlobalKey.KEY_LoginModule: longinModule, handler);
loginContext.login();
subject = loginContext.getSubject();
request.getSession().setAttribute(GlobalKey.KEY_USER, subject);
DAXT的為
引用:
SummerLoginModule{
com.thunisoft.fy.security.login.FYLoginModule required debug=true;
};
引用:
SummerLoginModule{
com.thunisoft.fy.security.login.SJFYLoginModule required debug=true;
};
復(fù)制內(nèi)容到剪貼板
至此,就需要找到初始化java.security.auth.login.config的地方,最后在com.thunisoft.summer.sys.PropertyResource找到初始化的源碼
代碼:
String extra_config = System.getProperty("java.security.auth.login.config");
復(fù)制內(nèi)容到剪貼板
顯然問題原因在于系統(tǒng)變量java.security.auth.login.config只能存在一份,啟動(dòng)DAXT時(shí)候已經(jīng)初始化,后續(xù)啟動(dòng)XFXT的時(shí)候已經(jīng)不能初始化XFXT的SummerLoginModule。而在XFXT登錄的時(shí)候,實(shí)際上就只能獲取到DAXT的LoginModule了。代碼:
private void setEnvironment() {
Properties props = System.getProperties();
// 如果運(yùn)行環(huán)境中已經(jīng)存在,則不配置
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);
}
}
當(dāng)然如果幾個(gè)系統(tǒng)使用的是同一個(gè)LoginModule類,上述問題就不會(huì)存在了。目前有三個(gè)LoginModule:FYLoginModule、SJFYLoginModule StatLoginModule,如果把這三個(gè)類合成為一個(gè)公用的LoginModule倒是可以解決問題,但是感覺很怪異。。。。