在 servlet 上下文中进行 WebSphere 管理角色检查



我只是想在Java servlet中检查给定的用户是否具有给定的WebSphere管理角色。

成语:

HttpServletRequest#isUserInRole

。适用于非管理角色,以及本文档页面中定义的ISCDoAdmin管理角色。

但是,在调用isUserInRole时,上面页面中的所有其他角色(似乎与iscadmin不同,除了范围之外,它们的第一个字母大写(不会反映

。我尝试与主要管理用户(基于文件,使用配置文件创建(以及我明确向其添加管理角色的其他用户进行检查。

在所有情况下,只有iscadmin角色检查在分配时返回 true。

如果相关,请使用标准 WAS 8.5.5。

我想知道在这种情况下,我对安全性和范围是否有一些重要的误解。

注意

我尝试了不同的组合来检查具有第一个大写字母的角色名称:按原样,小写,全大写等,甚至使用管理员安全管理器角色变得更加有创意......

经过数小时的头痛和搜索未记录的 API,我想我已经找到了我想要的东西。

公平警告

我找不到任何关于这方面的文档,甚至找不到javadocs。 老实说,我无法判断这是否是推荐的方法。

也就是说,下面的方法对我有用(通过从登录用户中分配和删除管理员安全管理员角色,然后重新加载 servlet 并进行调试来进行测试(。

此外,为什么这些角色不能通过HttpServletRequest#isUserInRole成语看到,这仍然是模糊的。

代码配方

// relevant imports
import com.ibm.websphere.management.authorizer.AdminAuthorizer;
import com.ibm.websphere.management.authorizer.AdminAuthorizerFactory;
import static com.ibm.ws.security.util.Constants.*;
// you'll need the com.ibm.ws.admin.core.jar plugin in your classpath for this
AdminAuthorizer aa = AdminAuthorizerFactory.getAdminAuthorizer();
// all admin roles are there as constants, 
// save for "iscadmins", which you can retrieve with
// the HttpServletRequest#isUserInRole idiom anyway
String role = com.ibm.ws.security.util.Constants.ADMINSECURITY_ROLE;
// that's it!
boolean test = aa.isCallerInRole(role);