Вам нужно объединить оба списка, чтобы получить соответствующие записи. Это должно исправить вашу ошибку
var matchDesc = list2.Join(list1, a => a.Code, b => b.TransCode, (a, b) => b.Desc).ToList();
Читайте во всех возможных ролях или hardcode список. Затем выполните итерации по нему выполняющий isUserInRole и создайте список ролей, в которых находится пользователь, и затем преобразуйте список в массив.
String[] allRoles = {"1","2","3"};
HttpServletRequest request = ... (or from method argument)
List userRoles = new ArrayList(allRoles.length);
for(String role : allRoles) {
if(request.isUserInRole(role)) {
userRoles.add(role);
}
}
// I forgot the exact syntax for list.toArray so this is prob wrong here
return userRoles.toArray(String[].class);
Ответ грязен.
Сначала необходимо узнать то, что тип request.getUserPrincipal () возвращает в веб-приложении.
System.out.println("type = " + request.getUserPrincipal().getClass());
Скажем, это возвращает org.apache.catalina.realm. GenericPrincipal.
Затем бросьте результат getUserPrincipal () к тому типу и используйте методы, которые он предоставляет.
final Principal userPrincipal = request.getUserPrincipal();
GenericPrincipal genericPrincipal = (GenericPrincipal) userPrincipal;
final String[] roles = genericPrincipal.getRoles();
Я сказал, что это было грязным. Это не очень портативно также.