我只是在尝试检查给定用户在Java servlet中是否具有给定的WebSphere管理角色。
成语:
HttpServletRequest#isUserInRole
...适用于非管理角色,并且在this文档页面中定义的 iscadmins 管理角色。
但是,调用isUserInRole
时,不会反映上一页中的所有其他角色(似乎与 iscadmins 不同,在作用域之外,由于首字母大写)。
我尝试与主要的管理用户(基于文件,使用配置文件创建)和其他我明确添加了管理角色的用户进行检查。
在所有情况下,只有 iscadmin 角色检查在分配后返回true。
使用所有相关的标准WAS 8.5.5。
我想知道在这种情况下对于安全性和范围是否存在一些关键的误解。
注意
我尝试了不同的组合来检查具有首字母大写的角色名称:按原样,小写字母,大写字母等。 Admin Security Manager 角色甚至更具创造力。
答案 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);