最近项目,客户要求实现域认证,然后登录。网上资料自己整理一下,以备后续使用;
springboot 域认证,我采用的是ldap方式认证。
1.引入插件:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-ldap</artifactId> </dependency>
2.编写ldap认证代码
String UserName=loginBody.getUsername(); String password=loginBody.getPassword(); String host="10.123.7.6"; //AD域IP String domain="lysh.sinopec.com"; //AD域名后缀 String port="389"; //端口 String url=new String("ldap://"+host+":"+port); String user=UserName.indexOf(domain)>0?UserName:UserName+domain; //实例化 Hashtable env=new Hashtable(); DirContext ctx=null; env.put(Context.SECURITY_AUTHENTICATION,"simple"); //LDAP访问级别(none,simple,strong) env.put(Context.SECURITY_PRINCIPAL, UserName);//AD用户名 env.put(Context.SECURITY_CREDENTIALS,password); //AD的密码 env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");//LDAP工厂类 env.put("com.sun.jndi.ldap.connect.timeout","3000"); //连接超时时间 env.put(Context.PROVIDER_URL,url); try{ ctx=new InitialDirContext(env); //初始化上下文 System.out.println("---域认证,身份验证成功---"); if(hasuser(UserName)) { String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), "", ""); ajax.put(Constants.TOKEN, token); return ajax; }else{ return AjaxResult.error("该用户不存在,请联系管理员"); } } catch (AuthenticationException e) { System.out.println("身份验证失败"); e.printStackTrace(); return null; }catch (javax.naming.CommunicationException e){ System.out.println("AD域连接失败"); e.printStackTrace(); return null; }catch (Exception e){ System.out.println("身份验证未知异常"); e.printStackTrace(); return null; }finally { try { ctx.close(); } catch (NamingException e) { throw new RuntimeException(e); } }
3.修改代码中自己的域,域服务器ip,端口号,用户名,密码。
4.域认证通过后,可以结合自己的实际情况,进行业务处理。
标签:UserName,String,认证,关于,env,ldap,put,springboot From: https://www.cnblogs.com/sguozeng/p/17981998