我正在做一个增量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中拥有自己的UserDetailsServcice和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()方法,但它不起作用。 :(
答案 0 :(得分:1)
有关登录过程的更多代码可能有助于我们提供更完整的答案,但基本上您必须访问普通的servlet容器会话,从而访问wicket中的某个bean。可能是放置该逻辑的最佳位置在MyAuthenticationWebSession
中,以便它知道用户已登录。
要从wicket代码获取servlet容器会话,可以使用
httpSession =
((WebRequest)request).getHttpServletRequest().getSession();
如果你将它放在你的wicket代码中,你还没有这个WebRequest
对象(可能是ServletWebRequest
个对象),你可以从{{{ 1}}:
RequestCycle
答案 1 :(得分:1)
authenticate。不幸的是,上述类中的大多数方法都标记为final,因此有点难以定制。
我认为您应该能够在您自己的会话的构造函数中使用受保护的方法signIn(布尔值)。您可以在那里获得一个请求,希望能够获得“SessionUser”,然后通过UserDetailsService提取您的用户,调用signIn(true)并为该用户初始化正确的角色。如果调用signIn(true),则不应该重定向登录。