5

我第一次在我的应用程序中使用 OpenID 身份验证。我可以针对所选提供者成功验证用户身份,但我不知道如何在 Java EE 服务器上正确登录用户,因此看起来用户已使用例如基于表单的登录方式登录。我可以使用 Servlet 3.0 login,但它需要用户名/密码对,并且在使用 OpenID 时我没有密码。

我希望能够获得一个Principal对象并使用isUserInRole方法等。我错过了什么吗?我在 JBoss 7.1 上运行这个应用程序,但我想应该有一个通用的方法来做到这一点。或者,也许我遗漏了一些东西,Principal并且在使用 OpenID 时,所有与用户角色相关的东西都以不同的方式完成?

4

1 回答 1

1

我想应该有一个通用的方法来做到这一点。

确实有。您需要创建一个所谓的 JASPIC 身份验证模块。已经有一个可用于 OpenID,请参阅:

我可以使用 Servlet 3.0 登录,但它需要用户名/密码对,并且在使用 OpenID 时我没有密码。

这是正确的。因此,您需要调用 Servlet 3.0验证方法。因为login与用户名/密码密切相关,当您定义自己的身份验证模块时,它甚至会在 Java EE 7 中引发异常!(在 Java EE 6 中未定义会发生什么,但它通常不起作用)。

有关如何在 Java EE 中创建类似 OpenID 的身份验证模块的更多示例,请参阅我自己的项目OmniSecurity和使用该项目早期版本的实际应用程序。(不幸的是,代码有点难以理解,因为它需要一个极其复杂和令人费解的解决方法才能让 CDI 与 JASPIC SAM 一起工作,但希望它仍然能让您看到一般模式)

于 2013-08-04T13:34:37.180 回答