我有一个使用Wildfly 10作为服务器的JSF 2.2应用程序。会话未正确无效,抛出“会话无效”
用户已登录,并添加到在线用户列表:
HttpSession session = request.getSession();
funcionario.setSessao(session);
funcionario.setIp(request.getRemoteAddr());
session.setAttribute("usuarioLogado", funcionario);
我删除从在线用户列表中注销用户。
public class ActiveUserListener implements HttpSessionAttributeListene {
@Inject
Fixo fixo;
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getValue() instanceof Funcionario) {
fixo.getLogins().add((Funcionario) event.getValue());
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getValue() instanceof Funcionario) {
if (event.getValue() instanceof Funcionario) {
fixo.getLogins().remove((Funcionario) event.getValue());
}
}
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
if (event.getValue() instanceof Funcionario) {
fixo.getLogins().add((Funcionario) event.getValue());
}
} }
public class SessionCounter implements HttpSessionListener {
@Inject
Fixo fixo;
public void sessionDestroyed(HttpSessionEvent se) {
if (se.getSession().getAttribute("usuarioLogado") != null) {
Funcionario f = fixo.getLogins().stream().filter(o -> o.getSessaoId().equals(se.getSession().getId()))
.findAny().get();
fixo.getLogins().remove(f);
}
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}}´
,当我尝试打印一些用户/会话的详细信息:
public void usuConsole() {
System.out.println("nº " + fixo.getLogins().size());
for (Funcionario f : fixo.getLogins()) {
System.out.println(f.getMatricula());
if (f.getSessao() != null) {
System.out.println(f.getSessao().getId());
System.out.println(f.getSessao().getCreationTime());
System.out.println(f.getSessao().getLastAccessedTime());
}
}
}
打印一些线条,在某些时候:
会话无效R5EB6hKAzanm50PSRYqxcv361UMD6nGjZWxJVc5P
如果很少用户登录就没问题,但是在很多用户登录之后d注销,错误出现
你是否试图让这个线程安全?如果同时创建多个会话或同时创建一些会话,会发生什么情况? – stdunbar
不,我该怎么办? – erickdeoliveiraleal