Java HttpSessionListener:如何为不同类型的会话进行自定义?

问题描述 投票:0回答:1

我需要能够区分会话类别;就像这样:

public final class MyHttpSessionListener implements HttpSessionListener {

    private static final AtomicInteger counterA = 
            new AtomicInteger();

    private static final AtomicInteger counterB =
            new AtomicInteger();

    private static final MyHttpSessionListener INSTANCE = 
            new MyHttpSessionListener();

    public static MyHttpSessionListener getInstance() {
        return INSTANCE;
    }

    public MyHttpSessionListener() {}

    public int getNumberOfAClients() {
        return counterA.get();
    }

    public int getNumberOfBClients() {
        return counterB.get();
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Creating a session...");

        User user = 
                (User) se.getSession()
                         .getAttribute(Config.CURRENT_USER_ATTRIBUTE);

        switch (user.getUserType()) { <--- Here, user is null!
            case A:
                counterA.incrementAndGet();
                break;

            case B:
                counterB.incrementAndGet();
                break;
        }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // Similar to sessionCreated.
        ...
    }
}

上述switch语句中的空问题是由于在我没有机会通过session.setAttribute(...)将用户对象设置为会话之前,已调用了侦听器。

我需要能够区分会话类别;就像这样:public final类MyHttpSessionListener实现HttpSessionListener {private static final AtomicInteger ...

java java-ee httpsession
1个回答
0
投票

我发现的一种解决方案是向有问题的侦听器添加使计数器递增的方法。接下来,只需在登录代码中调用这些方法:

© www.soinside.com 2019 - 2024. All rights reserved.