Проверка административной роли WebSphere в контексте сервлета - PullRequest
0 голосов
/ 27 июня 2018

Я просто пытаюсь проверить, есть ли у данного пользователя заданная административная роль WebSphere в сервлете Java.

идиома:

HttpServletRequest#isUserInRole

... работает для неадминистративных ролей, и для iscadmins административной роли, определенной на этой странице документации.

Однако все остальные роли на приведенной выше странице (которые, похоже, отличаются от iscadmins , в области видимости, с прописной буквы), не отражаются при вызове isUserInRole.

Я попытался проверить как у основного административного пользователя (на основе файлов, созданного с помощью профиля), так и у других пользователей, к которым я явно добавил административные роли.

Во всех случаях только проверки роли iscadmin возвращают true при назначении.

Использование стандарта WAS 8.5.5, если это имеет отношение.

Мне интересно, есть ли что-то важное, что я неправильно понимаю в отношении безопасности и масштабов в этом контексте.

Примечание

Я пробовал разные комбинации, чтобы проверять имена ролей с первой заглавной буквой: как есть, строчными буквами, заглавными буквами и т. Д., Даже стал более креативным с ролью Admin Security Manager ...

1 Ответ

0 голосов
/ 25 июля 2018

После долгих часов головной боли и поисков в недокументированных API, я думаю, я нашел то, что искал.

Справедливое предупреждение

Я не смог найти любую документацию по этому поводу, даже javadocs. Я не могу честно сказать, если это рекомендуемый подход.

При этом подход, описанный ниже, работает для меня (проверено назначение и удаление роли Администратор безопасности администратора * из вошедшего в систему пользователя, затем перезагрузка сервлета и отладка).

Кроме того, остается загадкой, почему эти роли не видны через идиому 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);
...