我有以下代码用于运行Java(SE)应用程序(不在服务器上),其中登录应使用运行JAAS身份验证的现有JBoss服务器(我绑定到4.2.3)完成。我从一个简单的控制台应用程序开始执行登录,然后将此功能集成到应用程序中。
我使用一个代码段 - 找到here - 来执行登录:
JaasJbossConfiguration.activateConfiguration();
UsernamePasswordHandler handler =
new UsernamePasswordHandler("userName", "passWord");
LoginContext lc = new LoginContext("myrealm", handler);
try {
lc.login();
} catch (LoginException e) {
// Authentication failed.
}
这就像一个魅力。现在我想扩展我的应用程序并仅允许特殊角色的用户访问。有没有办法从Java应用程序端获取用户角色或仅允许那些用户进行身份验证?
答案 0 :(得分:2)
@RolesAllowed
)EJBContext.getCallerPrincipal()
和EJBContext.isUserInRole()
HttpServletRequest.getRemoteUser()
和HttpServletRequest.isUserInRole()
无论如何,请查看登录模块的来源(例如:DatabaseServerLoginModule
)。然后编写一个执行相同操作的EJB(关于角色查找),并将角色列表返回给独立应用程序。
答案 1 :(得分:0)
按照以下步骤使用容器(主要是JAAS)提供的JEE安全性。优点是,您可以通过配置将身份验证和授权更改为任何新技术,而不会影响应用程序的其他部分。我举一个使用JBoss AS的例子
在web.xml中添加安全性约束
网络资源 / * ROLE_ADDUPDATE ROLE_SEARCH ROLE_ADMIN ROLE_ADMIN ROLE_ADDUPDATE ROLE_SEARCH
在jboss-web.xml中添加Jboss安全域名
Java的:/ JAAS /其他 真正