我正在将LDAP中的ldif属性读取到我的java程序中,我最初的想法是将这些属性放到一个映射中,然后从映射中解析它们,但是我发现有一个名为"departmentNumber“的属性,其中包含两个json格式值,
departmentNumber: {"sid":"729999","uid":501,"name":"tebase","role":"managers","title":"sales","groups":["others"]}
departmentNumber: {"sid":"724605","uid":37,"name":"tebase","role":"managers","title":"develope","groups":["leaders"]}
所以我用地图把它们放在下面的一些代码中,
但是我的方法只能检索第一个json值,它包含{"sid":"729999"},但是没有包含{"sid":"724605"}的第二个值,
我观察到的程序日志是:
这是从ldif属性读取的日志。
2019 22:30:58,237 authentication.mzauth authentication.mzauth.doAuthenticate(mzauth.java:44)
{"uid":"brucelee","mail":"brucelee@gm.macom","displayName":"Bruce Lee","givenName":"Bruce Lee","departmentNumber":"{\"sid\":\"729999\",\"uid\":501,\"name\":\"teabas\",\"role\":\"managers\",\"title\":\"sales\",\"groups\":[\"others\"]}","objectClass":"inetOrgPerson","description":"Bruce Lee","sn":"Bruce Lee","cn":"Z39414","department":"000000","info":"2006/02/12"}
这是将其放入映射并解析出来的日志。
2019 22:30:58,247 services.LdapService services.LdapService.getUser(LdapService.java:251)
ldap user:{"username":"brucelee","fullname":"Bruce Lee","email":"brucelee@gm.macom","departmentid":"729999","titles":[{"schoolid":"729999","titles":["managers","sales"]}],"cloudroles":{"usage":"clouddev","roles":[{"appname":"mail","departmentid":"729999","titles":["managers","sales"]}]},"guid":"c00d5ba660145307c84f2c1e1c557e4ededaf1830029d40aa5b244027","pid":"Z39414","openid":"http://openid.macom/brucelee"}
正如你所看到的,只有一个值,一个是sid:72999,而不是两个值,
最初的ldif属性是:
带作用域子树筛选器的LDAPv3基: uid=brucelee请求: ALL Z39414,developer.alle.com dn: cn=Z39414,ou=Managers,dc=developer,dc=alle,dc=com uid: brucelee userPassword: qwdmsdierf邮件: brucelee@gm.macom info: 2006/02/12 sn:李小龙departmentNumber:{"sid":"729999","uid":501,“名称”:“tebase”,“角色”:“经理”,“标题”:“销售”,“组”:“其他”}departmentNumber:{"sid":"724605","uid":37,“名称”:“tebase”,“角色”:“经理”,“标题”:“发展”,“团队”:“领导者”}部门: 000000 givenName:李小龙objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: Z39414 displayName: Z39414 displayName: Bruce Lee搜索结果搜索:2结果:0成功numResponses: 2 numEntries: 1
我的问题是,我如何将两个json值都放进我的映射中,或者我对map的使用是错误的,并且有一个更好的方法来处理这种情况?
public DataModel getUser(String uid, String passwd, String role, DataModel user) throws Exception {
private Map<String, String> map = null;
if (role.equals("managers")) {
map = Ldap.getAttrubites(ldapurl, uid, passwd);
List<Titles> titlesArray = new ArrayList<>();
List<Roles> rolesArray = new ArrayList();
map.forEach((key, value)
-> {logger.info("{} - {}", key, value); });
if (key.equals("departmentNumber")) {
List<StringModel> model = map.get("departmentNumber")).get();
model.stream().forEach(k -> {
for (int i = 0; i < model.size(); i++) {
Titles titles = new Titles();
List<String> titleList = new ArrayList<>();
String userid = model.get(i).getUid();
String mtitle = model.get(i).getRole();
String subtitle = model.get(i).getTitle();
titleList.add(mtitle);
titleList.add(subtitle);
titles.setSchoolid(schoolid);
titles.setTitles(titleList);
titlesArray.add(titles);
........ });}
user.setTitles(titlesArray);
.........;
} return user;
}
发布于 2019-10-07 23:54:31
java.util.Map<K,V>
接口只保存每个键的一个值。如果要为每个键保存多个值,则需要为V
部件指定一个集合类。例如,如下所示。
Map<String, List<String>> map = ...
Java中定义的javax.ws.rs.core.MultivaluedMap
接口是一个实现您想要做的事情的示例。
https://stackoverflow.com/questions/58239094
复制相似问题