我只是想在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);