我为我们的WSO2自定义声明获得了一些正常工作的代码。虽然我想添加或改变它的一部分。当我使用 identifiers.getRolesCSV()进行调用时,它将像String一样打印出来,但是如果你尝试将它用作变量,它仍会将它视为ArrayList。或者另一种说法是,现在从WSO2传递的角色是一个如下所示的数组。
"roles": [
"Admin",
" Software Engineer",
" Current User",
],
我想将它改为像这样的逗号分隔字符串。
"roles": "Admin, Software Engineer, Current User"
第二个是ID令牌中返回的内容。
以下是一些代码。
private Map<String, String> addClaims(String subscriberId, Map<String, String> map) {
if (subscriberId == null) {
return map;
}
Entity identifiers = null;
identifiers = EntityHelper.getEntityFromUserName(subscriberId);
if (identifiers == null) {
return map;
}
map.put("roles", identifiers.getRolesCSV());
return map;
}
public class Entity {
List roles = new ArrayList();
public Entity() {
}
public String getRolesCSV() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < roles.size(); i++) {
sb.append(roles.get(i));
if (i != roles.size() - 1)
{
sb.append(", ");
}
}
return sb.toString();
}
public class EntityHelper {
private final LdapHelp ldapHelper = new LdapHelp();
public EntityHelper() {
}
public Entity getEntityFromUserName(String netid) {
Attributes attributes = null;
Entity domainEntity = new Entity();
try {
attributes = ldapHelper.getAttributesForUsername(netid, Domain.*local*);
if (attributes != null) {
List roles = getAttributeList(attributes.get(LdapHelp.MEMBER_OF_ATTRIBUTE), "CN");
domainEntity.setRoles(roles);
} else {
if (log.isDebugEnabled()) {
log.debug("no attributes returned");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return domainEntity;
}
答案 0 :(得分:0)
所以看起来代码是正常的。代码何时构建令牌,它会将其打印出来。当wso2建立声明时,它会以另一种方式打印它。点是它的工作正常只是看起来它工作错了。