Servlet上下文中的WebSphere管理角色检查

时间:2018-06-27 13:42:41

标签: java security servlets websphere roles

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

成语:

HttpServletRequest#isUserInRole

...适用于非管理角色,并且在this文档页面中定义的 iscadmins 管理角色。

但是,调用isUserInRole时,不会反映上一页中的所有其他角色(似乎与 iscadmins 不同,在作用域之外,由于首字母大写)。

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

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

使用所有相关的标准WAS 8.5.5。

我想知道在这种情况下对于安全性和范围是否存在一些关键的误解。

注意

我尝试了不同的组合来检查具有首字母大写的角色名称:按原样,小写字母,大写字母等。 Admin Security Manager 角色甚至更具创造力。

1 个答案:

答案 0 :(得分:0)

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

公平警告

我找不到关于此的任何文档,甚至找不到javadocs。 我不能诚实地说这是否是推荐的方法。

这就是说,以下方法对我有用(通过从登录的用户中分配和删除 Admin安全管理器角色进行测试,然后重新加载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);