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