SessionListenerAdapter 中的会话过期后重定向到登录页面

时间:2021-04-12 04:57:46

标签: shiro

我正在使用 Apache Shiro。我想在会话过期后将我的用户重定向到“登录”页面。

我尝试了以下代码,但重定向不起作用。 我有一个 NPE:

<块引用>

验证会话时出错:java.lang.NullPointerException

对于行:

FacesContext.getCurrentInstance().getApplication().getNavigationHandler()
                .handleNavigation(FacesContext.getCurrentInstance(), null, /login.xhtml);

这是我的代码:

public class MySessionListener2 extends SessionListenerAdapter {
    
    @Override
    public void onExpiration(Session session) {

        System.out.println("会Session expiration:" + session.getId());

        FacesContext.getCurrentInstance().getApplication().getNavigationHandler()
                .handleNavigation(FacesContext.getCurrentInstance(), null, Constants.LOGIN);
    }
}

堆栈跟踪:

04:12:52,177 ERROR [org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler] (SessionValidationThread-1) Error while validating the session: java.lang.NullPointerException
at deployment.myapp.war//com.myapp.util.MySessionListener1.onExpiration(MySessionListener1.java:58)
at deployment.myapp.war//org.apache.shiro.session.mgt.AbstractNativeSessionManager.notifyExpiration(AbstractNativeSessionManager.java:208)
at deployment.myapp.war//org.apache.shiro.session.mgt.AbstractValidatingSessionManager.onExpiration(AbstractValidatingSessionManager.java:157)
at deployment.myapp.war//org.apache.shiro.web.session.mgt.DefaultWebSessionManager.onExpiration(DefaultWebSessionManager.java:284)
at deployment.myapp.war//org.apache.shiro.session.mgt.AbstractValidatingSessionManager.validate(AbstractValidatingSessionManager.java:145)
at deployment.myapp.war//org.apache.shiro.session.mgt.AbstractValidatingSessionManager.validateSessions(AbstractValidatingSessionManager.java:288)
at deployment.myapp.war//org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler.run(ExecutorServiceSessionValidationScheduler.java:120)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

0 个答案:

没有答案