我有一个必须使用外部登录的Seam应用程序。逻辑如下:
非常简单。但是我被困住了。
重定向到/ seam / resources / token。我打算从会话中获取Identity,使用令牌填充它,然后进行身份验证。但是在资源处理程序中,用户会话显然不可见:会话上下文为空。 :(
我尝试在那里进行LifeCycle.beginCall,它在某种意义上起作用:身份验证逻辑有效,但结果永远不会被用户使用(用户的会话仍然有空身份)。
我做错了什么?
P.S。这是我的资源处理程序的或多或少的完整代码。为简洁起见,删除了记录和其他不相关的内容。
@Scope(ScopeType.APPLICATION)
@Name("tokenResource")
// @BypassInterceptors
public class TokenResource extends AbstractResource {
@Override
public String getResourcePath() {
return "/token";
}
@Override
public void getResource(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
String token = request.getParameter("token");
// woot?
Lifecycle.beginCall();
Identity identity = Identity.instance();
MyIdentity mid = (MyIdentity) identity;
mid.setToken(token);
mid.login();
response.sendRedirect("/home.seam");
}
答案 0 :(得分:0)
您可以使用JBoss Picketlink与OpenID和Google集成。他们提供的捆绑包中有几个例子,似乎可以直接将它与Seam一起使用。
唯一需要注意和注意的小事是该项目处于早期阶段,因此可能会出现一些错误。
答案 1 :(得分:0)
或许将身份退回到Session上下文?