https://gitee.com/shuzheng/zheng
这是地址
它有一个filter
public class UpmsAuthenticationFilter extends AuthenticationFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(UpmsAuthenticationFilter.class);
// 局部会话key
private final static String ZHENG_UPMS_CLIENT_SESSION_ID = "zheng-upms-client-session-id";
// 单点同一个code所有局部会话key
private final static String ZHENG_UPMS_CLIENT_SESSION_IDS = "zheng-upms-client-session-ids";
@Autowired
UpmsSessionDao upmsSessionDao;
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
Subject subject = getSubject(request, response);
Session session = subject.getSession();
// 判断请求类型
String upmsType = PropertiesFileUtil.getInstance("zheng-upms-client").get("zheng.upms.type");
session.setAttribute(UpmsConstant.UPMS_TYPE, upmsType);
if ("client".equals(upmsType)) {
return validateClient(request, response);
}
if ("server".equals(upmsType)) {
return subject.isAuthenticated();
}
return false;
}
}
这里有一句
String upmsType = PropertiesFileUtil.getInstance("zheng-upms-client").get("zheng.upms.type");
这里看起来是通过PropertiesFileUtil去获取当前请求是客户端还是服务器端,然而...我没太明白它是怎么实现判断的?求解!!!!!
/**
* 资源文件读取工具
* @author shuzheng
* @date 2016年10月15日
*/
public class PropertiesFileUtil {
// 当打开多个资源文件时,缓存资源文件
private static HashMap<String, PropertiesFileUtil> configMap = new HashMap<String, PropertiesFileUtil>();
// 打开文件时间,判断超时使用
private Date loadTime = null;
// 资源文件
private ResourceBundle resourceBundle = null;
// 默认资源文件名称
private static final String NAME = "config";
// 缓存时间
private static final Integer TIME_OUT = 60 * 1000;
// 私有构造方法,创建单例
private PropertiesFileUtil(String name) {
this.loadTime = new Date();
this.resourceBundle = ResourceBundle.getBundle(name);
}
public static synchronized PropertiesFileUtil getInstance() {
return getInstance(NAME);
}
public static synchronized PropertiesFileUtil getInstance(String name) {
PropertiesFileUtil conf = configMap.get(name);
if (null == conf) {
conf = new PropertiesFileUtil(name);
configMap.put(name, conf);
}
// 判断是否打开的资源文件是否超时1分钟
if ((System.currentTimeMillis() - conf.getLoadTime().getTime()) > TIME_OUT) {
conf = new PropertiesFileUtil(name);
configMap.put(name, conf);
}
return conf;
}
// 根据key读取value
public String get(String key) {
try {
String value = resourceBundle.getString(key);
return value;
} catch (MissingResourceException e) {
return "";
}
}
// 根据key读取value(整形)
public Integer getInt(String key) {
try {
String value = resourceBundle.getString(key);
return Integer.parseInt(value);
} catch (MissingResourceException e) {
return null;
}
}
// 根据key读取value(布尔)
public boolean getBool(String key) {
try {
String value = resourceBundle.getString(key);
if ("true".equals(value)) {
return true;
}
return false;
} catch (MissingResourceException e) {
return false;
}
}
public Date getLoadTime() {
return loadTime;
}
}
这是那个工具类
我想不明白的是,为什么能根据读取配置文件来判断当前前来的是server还是client???????
求助!!!!
这是个jar包,被客户端和服务端同时依赖,读取的是依赖方的配置文件######!!!######获取这个配置类型啊,这个配置有两个值标示了啊######一个server client######
突然想明白了...它读取的不是这个项目下的文件,而是想要单点登录的系统下的文件
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。