java 使用 ldap 例子

java 使用 ldap 例子

import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.CommunicationException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class AdTest {
    public AdTest() {
    }

    public static int connect(String host, String post, String username, String password) {
        DirContext ctx = null;
        int rs = 0;
        String domain = "@example.com"; //ldap 服务器域控
        String name = username.indexOf(domain) > 0 ? username : username + domain;
        Hashtable<String, String> HashEnv = new Hashtable();
        HashEnv.put("java.naming.security.authentication", "simple");
        HashEnv.put("java.naming.security.principal", name);
        HashEnv.put("java.naming.security.credentials", password);
        HashEnv.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
        HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");
        HashEnv.put("java.naming.provider.url", "ldap://" + host + ":" + post);

        try {
            ctx = new InitialDirContext(HashEnv);
            System.out.println("身份验证成功!");
        } catch (AuthenticationException var22) {
            System.out.println("身份验证失败!");
            rs = 1;
            var22.printStackTrace();
        } catch (CommunicationException var23) {
            System.out.println("AD域连接失败!");
            rs = 2;
            var23.printStackTrace();
        } catch (Exception var24) {
            System.out.println("身份验证未知异常!");
            rs = 3;
            var24.printStackTrace();
        } finally {
            if (null != ctx) {
                try {
                    ctx.close();
                    ctx = null;
                } catch (Exception var21) {
                    var21.printStackTrace();
                }
            }

        }

        return rs;
    }
}

WH小于 1 分钟Java
vscode 运行Java 项目的时候的编码问题,idea运行成功,但是vscode运行就nacos 拉取配置中文注释解析失败的问题解决。

vscode 运行Java 项目的时候的编码问题,idea运行成功,但是vscode运行就nacos 拉取配置中文注释解析失败的问题解决。

最近尝试再用vscode 在跑项目,意外的觉得很好用,简洁。尝试命令行跑项目有种很棒的感觉。但是今天有个新项目在跑的时候却出现了个很头疼的问题。 就是项目运行的的时候要去nacos 拉取配置,但是就是解析报错,很纳闷,就是idea 运行就没有问题。我对比两者运行时候的命令发现,idea 在运行期间 jvm 参数多了 -Dfile.encoding=UTF-8 文件编码指定了 UTF-8 🤣,无语了。 以下是在vscode 中启动项目追加 jvm 参数的方式


WH小于 1 分钟系统配置Java
java 编译打包过程中 找不到 tools.jar 的问题,终结解决

java 编译打包过程中 找不到 tools.jar 的问题,终结解决

jdk 1.8 中有个tools.jar,里面提供了很多便于开发的工具,但是由于其是在sun 工作接管Java是开发的,不受到甲骨文公司的欢迎,在后续的版本中已经移除了tools.jar 所以之后的Java配置环境变量的时候已经不再配置CLASSPATH 了 但是有时候在开发中用到tools.jar 的时候,发现在编译过程中 javac 命令是不会去读取CLASSPATH 的jar 去编译的, 网上有好多解决方法,放到jre 的lib 里面但是问题无法解决的 因为是sun 公司开发的,oracle 在引用的这些jar的时候是当作扩展去加载的 只要把tools.jar 放入 jre目录lib 下的ext 扩展类目录就可以在Javac 编译是加载读取


WH小于 1 分钟系统配置Java
java 动态执行代码,可以从数据库·拉代码执行的方式例子

java 动态执行代码,可以从数据库·拉代码执行的方式例子

DynamicJavaCompilerUtil.java

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.stream.Collectors;

public class DynamicJavaCompilerUtil {

    static String tmpPath = "./tmp";


    public static void Test() throws IOException {
        String code = new String("public class T4{  " +
                "static void print(String a){ " +
                "System.out.println(\"Hello world! \"+ a);" +
                "}" +
                "static void print(){ " +
                "System.out.println(\"Hello world! \");" +
                "}" +
                "static void print(Integer a,String b){ " +
                "System.out.println(\"Hello world! \"+a+b);" +
                "}" +
                "}");
        CompilerToRun(code, "T4", "print", 1, "  2");
    }

    /*
     * @param Code 代码字符串
     * @param ClassName 类名
     * @param MethodName  需要执行的方法名
     * @param MethodParam  需要执行的方法的参数
     */
    public static void CompilerToRun(String Code, String ClassName, String MethodName, Object... MethodParam) throws IOException {
        isDirExists(new File(tmpPath));
        File file = new File(tmpPath + "/" + ClassName + ".java");
        RandomAccessFile accessFile = null;
        try {
            accessFile = new RandomAccessFile(file, "rw");
            accessFile.write(Code.getBytes());
            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); //调用动态编译的工具
            int result = compiler.run(null, null, null, tmpPath + "/" + ClassName + ".java"); //进行动态编译,并返回结果
            if (result != 0) {
                throw new RuntimeException("编译失败");
            }
            //通过反射方法动态执行
            //1、首先构建文件的目录url地址,
            URL[] urls = new URL[]{new URL("file:" + tmpPath + "/")};
            //2、使用URLClassLoader对象的loadClass方法加载对应类
            URLClassLoader loder = new URLClassLoader(urls);
            //3、获取所加载类的方法
            Class clazz = loder.loadClass(ClassName);

            Class[] MethodParamClass = Arrays.asList(MethodParam).stream().map(Object::getClass).collect(Collectors.toList()).toArray(new Class[]{});
            // 4、传入方法所需的参数通过invoke运行方法
            Method method = clazz.getDeclaredMethod(MethodName, MethodParamClass);
            method.setAccessible(true);
            method.invoke(null, MethodParam); //当类型为String[]时,需要(Object)new String[] {}初始化
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } finally {
            accessFile.close();
            deleteFile(new File(tmpPath));
        }

    }

    private static void isDirExists(File file) {
        if (!file.exists()) {
            file.mkdir();
        }
    }

    private static Boolean deleteFile(File file) {
        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()) {
            System.out.println("文件删除失败,请检查文件是否存在以及文件路径是否正确");
            return false;
        }
        //获取目录下子文件
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f : files) {
            //判断子目录是否存在子目录,如果是文件则删除
            if (f.isDirectory()) {
                //递归删除目录下的文件
                deleteFile(f);
            } else {
                //文件删除
                f.delete();
                //打印文件名
                System.out.println("文件名:" + f.getName());
            }
        }
        //文件夹删除
        file.delete();
        System.out.println("目录名:" + file.getName());
        return true;
    }
}


WH大约 2 分钟Java
Java 实现控制台打印彩色字体和彩色背景

Java 实现控制台打印彩色字体和彩色背景

请记住,在Java Programming 中,输出屏幕的背景颜色和文本颜色默认为黑色或白色。如果我们想在输出屏幕上突出显示某些文本,那么我们可以使用 ANSI 颜色代码并突出显示特定文本。可以参考 ANSI 转义码以了解更多信息。

句法:

System.out.println(ANSI_COLORNAME + "This text is colored" + ANSI_RESET);

WH大约 2 分钟Java