【Java 工具类】集成AD域账号登录(完整实现)
JAVA集成域账号登录
public class LDAPUtil {// private static final String LDAP_URL = "ldap://XXXXXXX:389";//主域private static final String LDAP_URL = "ldap://XXXXXXX:389";//辅域// private static final String LDAP_URL = "ldap://XXXXXXX:389";//域名private static final String USER_EMAIL = "@XXXXXXX.com";/*** LdapContext 验证身份** @param username* @param password* @return* @throws NamingException*/public static LdapContext getLdapContext(String username, String password) throws NamingException {//创建连接Hashtable<String, String> env = new Hashtable<String, String>();env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL, LDAP_URL);env.put(Context.SECURITY_AUTHENTICATION, "simple");env.put(Context.SECURITY_PRINCIPAL, username + USER_EMAIL);env.put(Context.SECURITY_CREDENTIALS, password);return new InitialLdapContext(env, null);}}
修改登录验证,排除admin管理员账号
//update-start--Author:wangyuhuang Date:20230615 fro:管理员账号验证账号密码,其他用户验证域账号//2. 验证是否是管理员账号if (username.equals("admin")) {//2-1. 校验用户名或密码是否正确String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());String syspassword = sysUser.getPassword();if (!syspassword.equals(userpassword)) {result.error500("用户名或密码错误");return result;}} else {//2-1. 域账号身份验证LdapContext lct = null;try {// 连接 验证身份lct = LDAPUtil.getLdapContext(username, password);} catch (AuthenticationException e) {System.out.println("账号或密码错误!");} catch (CommunicationException e) {System.out.println("AD域连接失败!");e.printStackTrace();} catch (Exception e) {System.out.println("身份验证未知异常!");e.printStackTrace();} finally {if (null != lct) {try {lct.close();lct = null;} catch (Exception e) {e.printStackTrace();}} else {result.error500("用户名或密码错误");return result;}}}//update-end--Author:wangyuhuang Date:20230615 fro:管理员账号验证账号密码,其他用户验证域账号
