会话到期时,重定向到登录页面时出现空指针异常



我需要在会话到期时重定向到登录页面。

我正在使用httpessionlistener,它正在调用sessionDestroyed方法,但我无法重定向到登录页面。

我在重定向

时得到空指针异常Java类

import com.and.web.util.FacesUtils;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        System.out.print(getTime() + " (session) Created:");
        System.out.println("ID=" + session.getId() + " MaxInactiveInterval="
                + session.getMaxInactiveInterval());
    }
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        session.invalidate();
        try {
            FacesUtils.getExternalContext().redirect("/tnt-ui/");
        } catch (IOException ex) {
            Logger.getLogger(MyHttpSessionListener.class.getName()).log(Level.SEVERE, null, ex);
        }
        // session has been invalidated and all session data
        //(except Id)is no longer available
        System.out.println(getTime() + " (session) Destroyed:ID=" + session.getId());
    }
    private String getTime() {
        return new Date(System.currentTimeMillis()).toString();
    }
}

web . xml

<listener>
    <listener-class>`com.and.web.bean.MyHttpSessionListener`</listener-class>
</listener>

如何做到这一点?

public void sessionDestroyed(HttpSessionEvent se) {
    HttpSession session = se.getSession();
    session.invalidate();
    try {
        FacesUtils.getExternalContext().redirect("/tnt-ui/");

这是行不通的。重定向只能在请求处理期间发出。sessionDestroyed通常是超时事件,不会被请求线程调用。

您可以使用(例如)过滤器来检测过期会话并重定向它们。

最新更新