我想在应用程序级别设置一个Hashmap对象(登录用户)。但是无法对我在Hashmap对象中保存的旧用户列表的每个请求执行相同的操作,并且只返回当前登录的用户。 我尝试过很多例子,但没有运气。 以下是我的代码
<bean id="applicationContextProvder" class="com.starter.basic.ApplicationContextProvider"/>
<bean id="testBean" class="com.starter.basic.TestBean"/>
TestBean tb = appContext.getApplicationContext().getBean("testBean", TestBean.class)
public class ApplicationContextProvider implements ApplicationContextAware
{
private static ApplicationContext context;
public ApplicationContext getApplicationContext() {
return context;
}
@Override
public void setApplicationContext(ApplicationContext ac)
throws BeansException {
context = ac;
}
}
public class TestBean implements ServletContextAware {
private HashMap hashMap = new HashMap<String ,String >();
}
public HashMap getUsers(){
return hashMap;
}
框架使用Spring MVC 3 + Hibernate 4.0
如果有人不能理解我的观点。我想要做的是,如果某个用户已经登录并尝试从另一个设备再次登录,则用户应该被阻止。我应该在第二次登录时从Hashmap对象中获取该用户。我可以从后端标志做到这一点。但我的要求是使用应用程序上下文。
答案 0 :(得分:1)
您的HashMap需要 Singleton Pattern ,而 并发问题 需要使用{{1}确保ConcurrentHashMap
,
您可以在需要时使用thread safe
至TestBean.getHashMap()
:
get, put or remove
当程序在运行时, class TestBean implements ServletContextAware {
private static final HashMap hashMap = new ConcurrentHashMap<String, String>();
public static HashMap getHashMap() {
return hashMap;
}
}
变量将一直存在。
答案 1 :(得分:1)
您应该为bean使用应用程序范围:
您应该在每次登录时将用户添加到hashmap,并在每次注销时将其删除。