如何永久注销wicket?

时间:2014-01-25 19:40:08

标签: java session wicket logout invalidation

我有一个 Wicket 应用程序(网址是: localhost:7001 / myWicketApp ),它以登录问题开头。这很好用。在我的主页中,我有一个Sign Out链接。

我想要的是什么:如果我点击此链接,它应该从会话中退出,然后转到另一个网页等。 www.google.com 我写了这个注销的java代码:

private AjaxLink createSignOutLink() {
    return new AjaxLink("signOutLink") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            S2rtSession.get().invalidate();
            S2rtSession.get().logout();
            throw new RedirectToUrlException("http://www.google.com");
        }
    };
}

发生了什么:当我点击它时,它会转到新页面( www.google.com ),因此它似乎工作正常。 但是当我点击浏览器的BACK按钮(或者我再次输入我的网址而不关闭浏览器并按ENTER键)时,它会返回我的页面而不会要求输入用户名和密码。所以签出没有发生。

缺少什么?有办法,永久退出,或浏览器缓存用户名和密码,而不关闭浏览器,它将无法正常工作?

我希望有一种方法可以从缓存和会话中删除所有内容。

谢谢!

2 个答案:

答案 0 :(得分:1)

此代码适用于我,但在wicket 1.5.8中。但可能有帮助

public class MyAppSession extends AuthenticatedWebSession implements IClusterable

我的退出链接是:

logOut = new Link<Page>("logOut") {
   private static final long serialVersionUID = 1L;

   @Override
   public void onClick() {
       //MyAppSession.get().invalidate(); - **I do not remember why, but in sources i have this line an it is commented!!!**
       MyAppSession.get().signOut();
       setResponsePage(WebApplication.get().getHomePage());
   }
};

答案 1 :(得分:1)

也许凭据保存在Cookie中,请尝试以下代码:

private AjaxLink createSignOutLink() {
        return new AjaxLink("signOutLink") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                IAuthenticationStrategy strategy = WebApplication.get().getSecuritySettings()
                            .getAuthenticationStrategy();
                    strategy.remove();
                S2rtSession.get().logout();
                throw new RedirectToUrlException("http://www.google.com");
            }
        };
    }