流程:
1.用戶調登錄接口,傳用戶名和密碼2.用戶名和密碼在ad驗證,驗證通過后,返回當前用戶的相關信息。(注:ldap為java自帶的api不需要maven引入其他的)3.根據返回的用戶信息,實現自己系統的業務邏輯
@RequestMapping("/getMsg")
@ResponseBody
public String getAllPersonNamesWithTraditionalWay(@RequestParam String username,@RequestParam String password) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//ldap://192.168.153.129:389/dc=contoso,dc=com
env.put(Context.PROVIDER_URL, "ldap://192.168.153.129:389/dc=contoso,dc=com");
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx;
String name="";
NamingEnumeration results = null;
try {
ctx = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
results = ctx.search("", "(&(objectclass=person)(userprincipalname=" + username+ "))",controls);
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
name = attributes.get("userprincipalname").get().toString().split("@")[0];
}
catch (AuthenticationException e)
{
String erroMsg= e.toString();
e.printStackTrace();
return erroMsg;
}
catch (NameNotFoundException e) {
String erroMsg= e.toString();
e.printStackTrace();
return erroMsg;
} catch (NamingException e) {
e.printStackTrace();
String erroMsg= e.toString();
return erroMsg;
} finally {
if (results != null) {
try {
results.close();
} catch (Exception e) {
}
}
}
return name;
}
返回了登錄用戶的name字段。還有其他字段如下圖)

微軟ad域樣子:(我是通過虛擬機安裝了windos sever 2008 r2 然后在其系統上,安裝了AD域)

