关于springboot 域认证

最近项目,客户要求实现域认证,然后登录。网上资料自己整理一下,以备后续使用;

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.域认证通过后,可以结合自己的实际情况,进行业务处理。

posted @ 2024-01-23 11:43  成神之路~  阅读(36)  评论(0编辑  收藏  举报