Java Wicket身份验证角色:从JSP注入外部用户凭据

Java Wicket身份验证角色:从JSP注入外部用户凭据,java,jsp,wicket,Java,Jsp,Wicket,我正在进行增量JSP-->Wicket迁移。我保留了JSP应用程序并进行逐页迁移。我可以从JSP wicket页面返回,但我的问题是在JSP中,我登录的用户凭证存储在一个Bean(UserBean,scope:session)中,在JSP中,我在每个页面上检查来自该Bean的登录用户 但是我怎样才能在wicket中获得这些信息呢?因此,如果用户登录了我的JSP页面,它可以在wicket页面上读取并设置用户信息,这样我的wicket登录页面就不会出现 my wicket page使用wicket

我正在进行增量JSP-->Wicket迁移。我保留了JSP应用程序并进行逐页迁移。我可以从JSP wicket页面返回,但我的问题是在JSP中,我登录的用户凭证存储在一个Bean(UserBean,scope:session)中,在JSP中,我在每个页面上检查来自该Bean的登录用户

但是我怎样才能在wicket中获得这些信息呢?因此,如果用户登录了我的JSP页面,它可以在wicket页面上读取并设置用户信息,这样我的wicket登录页面就不会出现

my wicket page使用wicket auth角色并检查:

@AuthorizeInstantiation("ADMIN") public class HomePage extends BasePage {.....}
我在wicket中有我自己的UserDetailsService和我的AuthenticationWebSession

经过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()方法,但它不起作用:(

更多关于登录过程的代码可能有助于我们做出更完整的回答,但基本上您必须从wicket中的某个地方访问正常的servlet容器会话,从而访问该bean。可能最好将该逻辑放在
MyAuthenticationWebSession
中的某个地方,以便它了解ser已登录

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

httpSession =
((WebRequest)request).getHttpServletRequest().getSession();
如果在您将其放入wicket代码时,您还没有此
WebRequest
对象(可能是
ServletWebRequest
对象),您可以从
RequestCycle
获取它:

RequestCycle requestCycle = RequestCycle.get();
Request request = requestCycle.getRequest();

authenticate在登录过程中由AuthenticatedWebSession调用。不幸的是,前面提到的类中的大多数方法都标记为final,因此很难自定义

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