小记:
在做一套系统,准备接入集成登录。但是该系统对接的用户系统过多,所以要给每个用户系统在web.xml中配置相应的过滤器,导致web.xml过于冗杂庞大,不利于管理。解决方案:给所有用户的登录请求配置成同一个登录请求,在web.xml里配置一套统一的过滤器,不配置init-param初始化参数,将初始化参数配置到用户各自的properties文件中,
例:casServerUrlPrefix=cas服务认证ip或域名
serverName=客户端ip或域名
encoding=UTF-8
casServerLoginUrl=cas服务认证ip或域名/login
然后阅读源码改写其获取init-param的方法,增加从properties读取文件的方式。以下是基于cas-client-core-3.2.1.jar包的获取初始化参数的源码
.
protected final String getPropertyFromInitParams(FilterConfig filterConfig, String propertyName, String defaultValue) {
// 此处是从properties获取初始化参数
Properties prop = FileTools.readProperties("DBConfig_" + Formater.ntrim(FileTools.readProperties("SystemConfig.properties").getProperty("UnitCode")) + ".properties");
String value0 = prop.getProperty(propertyName);
if (CommonUtils.isNotBlank(value0)) {
log.info((new StringBuilder()).append("Property [").append(propertyName).append("] loaded from Properties.getProperty with value [").append(value0).append("]").toString());
return value0;
}
// 此处是从filterConfig获取初始化参数
String value1 = filterConfig.getInitParameter(propertyName);
if (CommonUtils.isNotBlank(value1)) {
log.info((new StringBuilder()).append("Property [").append(propertyName).append("] loaded from FilterConfig.getInitParameter with value [").append(value1).append("]").toString());
return value1;
}
// 此处是从ServletContext获取初始化参数
String value2 = filterConfig.getServletContext().getInitParameter(
propertyName);
if (CommonUtils.isNotBlank(value2)) {
log.info((new StringBuilder()).append("Property [").append(propertyName).append("] loaded from ServletContext.getInitParameter w