gra*_*hez 5 security servlets java-ee jaspic
我第一次在我的应用程序中玩OpenID身份验证.我可以成功地针对选择的提供程序对用户进行身份验证,但我不知道如何在Java EE服务器上正确登录用户,因此看起来用户已使用例如基于表单的登录进行登录.我可以使用Servlet 3.0 login
但它需要用户名/密码对,而且在使用OpenID时我没有密码.
我希望能够得到一个Principal
对象和使用isUserInRole
方法等.我错过了什么吗?我在JBoss 7.1上运行这个应用程序,但我想应该有一个共同的方法来做到这一点.或者也许我错过了一些东西,Principal
使用OpenID时所有的东西和用户角色都有所不同?
我想应该有一个通用的方法来做到这一点。
确实有。您需要创建一个所谓的 JASPIC 身份验证模块。已经有一个可用于 OpenID,请参阅:
我可以使用 Servlet 3.0 登录,但它需要用户名/密码对,并且在使用 OpenID 时我没有密码。
这是正确的。因此,您需要调用 Servlet 3.0 的验证方法。因为login
与用户名/密码紧密相关,所以当您定义自己的身份验证模块时,它甚至会在 Java EE 7 中引发异常!(在 Java EE 6 中,未定义会发生什么,但它通常不起作用)。
有关如何在 Java EE 中创建类似 OpenID 的身份验证模块的更多示例,请参阅我自己的项目OmniSecurity以及使用该项目早期版本的实际应用程序。(不幸的是,代码有点难以理解,因为它需要一个极其复杂且令人费解的解决方法来让 CDI 与 JASPIC SAM 一起工作,但希望它仍然能让您看到一般模式)