Wicket auth-role:从JSP注入外部用户凭证

时间:2011-05-29 06:14:54

标签: java jsp wicket

我正在做一个增量JSP - > Wicket迁移。我保留了JSP应用程序并逐页迁移。我将从JSP< - >返回并返回wicket pages.But我的问题是在JSP中,我登录的用户凭据存储在Bean(UserBean,scope:session)和JSP中的每个页面上,我检查从该bean登录用户。

但是如何才能在检票口获得这些信息?所以从我的JSP页面,如果用户登录,在wicket页面加载它可以读取并设置suer信息,以便我的wicket登录页面不来。

我的wicket页面使用wicket-auth-role并检查:

@AuthorizeInstantiation("ADMIN") public class HomePage extends BasePage {.....}

我在wicket中拥有自己的UserDetailsS​​ervcice和MyAuthenticationWebSession。

在Don Roby的一些尝试和帮助之后,我在wicket的会话中获得了userID:

        final RequestCycle requestCycle = RequestCycle.get();
        WebRequest wr=(WebRequest)requestCycle.getRequest();
        HttpServletRequest hsr= wr.getHttpServletRequest();

        AuthenticatedWebSession session = OrbitWebSession.get();
        String username = (String)hsr.getSession().getAttribute("SessionUser");

现在,我在哪里可以设置用户名,密码和调用身份验证,以便我的页面不会重定向到登录页面?谁调用authenticate()方法以及如何调用?我在我的安全页面上尝试过onBeforeRender()方法,但它不起作用。 :(

2 个答案:

答案 0 :(得分:1)

有关登录过程的更多代码可能有助于我们提供更完整的答案,但基本上您必须访问普通的servlet容器会话,从而访问wicket中的某个bean。可能是放置该逻辑的最佳位置在MyAuthenticationWebSession中,以便它知道用户已登录。

要从wicket代码获取servlet容器会话,可以使用

httpSession =
((WebRequest)request).getHttpServletRequest().getSession();

如果你将它放在你的wicket代码中,你还没有这个WebRequest对象(可能是ServletWebRequest个对象),你可以从{{{ 1}}:

RequestCycle

答案 1 :(得分:1)

在登录过程中,AuthenticatedWebSession会调用

authenticate。不幸的是,上述类中的大多数方法都标记为final,因此有点难以定制。

我认为您应该能够在您自己的会话的构造函数中使用受保护的方法signIn(布尔值)。您可以在那里获得一个请求,希望能够获得“SessionUser”,然后通过UserDetailsS​​ervice提取您的用户,调用signIn(true)并为该用户初始化正确的角色。如果调用signIn(true),则不应该重定向登录。