From bcef07f82dfca534941b8d1b0ca2b84550578ff6 Mon Sep 17 00:00:00 2001 From: Kane Date: Sun, 28 Aug 2022 01:01:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90ldap=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=81=E9=9C=80=E8=A6=81=E5=B0=86=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8url=E5=8F=82=E6=95=B0=E5=8C=96=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cpic/xim/ldap/CpicLDAP.java | 65 +++++++++++++ .../xim/servlets/{ => ldap}/LdapServlet.java | 34 ++++++- .../cpic/xim/servlets/ldap/LdapStuffInfo.java | 91 +++++++++++++++++++ 3 files changed, 185 insertions(+), 5 deletions(-) create mode 100644 code/java/cpicxim-servlets/src/main/java/com/cpic/xim/ldap/CpicLDAP.java rename code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/{ => ldap}/LdapServlet.java (65%) create mode 100644 code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapStuffInfo.java diff --git a/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/ldap/CpicLDAP.java b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/ldap/CpicLDAP.java new file mode 100644 index 0000000..d934973 --- /dev/null +++ b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/ldap/CpicLDAP.java @@ -0,0 +1,65 @@ +/* + * @Author: Kane + * @Date: 2022-05-25 19:32:18 + * @LastEditors: Kane + * @LastEditTime: 2022-08-28 00:53:09 + * @FilePath: \cpicxim-servlets\src\main\java\com\cpic\xim\ldap\CpicLDAP.java + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ +package com.cpic.xim.ldap; + +import javax.naming.CommunicationException; +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public class CpicLDAP +{ + private static String ldapServerUrl = "ldap://10.39.0.205:389"; + + public static boolean ldapLogin( String serverURL, String userName, String password ) + { + boolean result = false; + + + if ( userName.endsWith( "@pr.intra.cpic.com.cn" ) == false) + { + userName += "@pr.intra.cpic.com.cn"; + } + + DirContext ctx = null; + Hashtable ldap = new Hashtable(); + + ldap.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" ); + ldap.put( Context.SECURITY_AUTHENTICATION, "simple" ); + ldap.put( Context.PROVIDER_URL, ldapServerUrl ); + ldap.put( Context.SECURITY_PRINCIPAL, userName ); + ldap.put( Context.SECURITY_CREDENTIALS, password ); + + try + { + ctx = new InitialDirContext( ldap ); + ctx.close(); + + result = true; + } + catch ( CommunicationException error ) + { + error.printStackTrace(); + error.getMessage(); + + result = false; + } + catch ( NamingException error ) + { + error.printStackTrace(); + result = false; + } + + return result; + } +} diff --git a/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/LdapServlet.java b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapServlet.java similarity index 65% rename from code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/LdapServlet.java rename to code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapServlet.java index cde03a1..eeceb48 100644 --- a/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/LdapServlet.java +++ b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapServlet.java @@ -1,15 +1,15 @@ -/** +/* * @Author: Kane - * @date: 2022-08-27 22:20:38 + * @Date: 2022-08-27 22:20:38 * @LastEditors: Kane - * @LastEditTime: 2022-08-27 23:32:36 - * @FilePath: \cpicxim-servlets\src\main\java\com\cpic\xim\servlets\LdapServlet.java + * @LastEditTime: 2022-08-28 01:01:28 + * @FilePath: \cpicxim-servlets\src\main\java\com\cpic\xim\servlets\ldap\LdapServlet.java * @Description: * * Copyright (c) ${2022} by Kane, All Rights Reserved. */ -package com.cpic.xim.servlets; +package com.cpic.xim.servlets.ldap; import java.io.IOException; import java.io.BufferedReader; @@ -18,6 +18,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import com.fasterxml.jackson.databind.*; public class LdapServlet extends HttpServlet { @@ -40,6 +41,9 @@ public class LdapServlet extends HttpServlet writer.write( "{ \"returnMessage\": \"请用post请求调用本接口!\"}" ); } + /***************************************************** + * 响应post请求,将请求体的json字符串转换后,用于ldap验证。 + *****************************************************/ @Override public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException @@ -48,6 +52,8 @@ public class LdapServlet extends HttpServlet response.setCharacterEncoding( "UTF-8" ); request.setCharacterEncoding( "UTF-8" ); + PrintWriter writer = response.getWriter(); + BufferedReader reader = request.getReader(); String line; StringBuilder requestString = new StringBuilder(); @@ -57,5 +63,23 @@ public class LdapServlet extends HttpServlet requestString.append( line ); } + LdapStuffInfo stuffInfo; + + // 转换json + try + { + ObjectMapper mapper = new ObjectMapper(); + stuffInfo = mapper.readValue( requestString.toString(), LdapStuffInfo.class ); + } + catch ( IOException error ) + { + // 如果转换json失败,不抛出异常。 + // 返回请求内容解析失败的提示。 + writer.write( "{ \"returnMessage\": \"请求内容不是合法的json字符串!\"}" ); + return; + } + + } } + diff --git a/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapStuffInfo.java b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapStuffInfo.java new file mode 100644 index 0000000..9a27cd1 --- /dev/null +++ b/code/java/cpicxim-servlets/src/main/java/com/cpic/xim/servlets/ldap/LdapStuffInfo.java @@ -0,0 +1,91 @@ +/* + * @Author: Kane + * @Date: 2022-08-28 00:13:12 + * @LastEditors: Kane + * @LastEditTime: 2022-08-28 00:27:27 + * @FilePath: \cpicxim-servlets\src\main\java\com\cpic\xim\servlets\ldap\LdapStuffInfo.java + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ + +package com.cpic.xim.servlets.ldap; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/***************************************************** + * 太平洋保险ldap用户信息对象。 + * @author Kane + * @version 1.0 + *****************************************************/ +public class LdapStuffInfo +{ + public LdapStuffInfo( String ldapStuffName, String ldapStuffPassword) + { + this.ldapStuffName = ldapStuffName; + this.ldapStuffPassword = ldapStuffPassword; + } + + public String getLdapStuffName() + { + return ldapStuffName; + } + + public void setLdapStuffName( String ldapStuffName ) + { + this.ldapStuffName = ldapStuffName; + } + + public String getLdapStuffPassword() + { + return ldapStuffPassword; + } + + public void setLdapStuffPassword( String ldapStuffPassword ) + { + this.ldapStuffPassword = ldapStuffPassword; + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((ldapStuffName == null) ? 0 : ldapStuffName.hashCode()); + result = prime * result + ((ldapStuffPassword == null) ? 0 : ldapStuffPassword.hashCode()); + return result; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj) + return true; + if ( obj == null) + return false; + if ( getClass() != obj.getClass()) + return false; + LdapStuffInfo other = (LdapStuffInfo) obj; + if ( ldapStuffName == null) + { + if ( other.ldapStuffName != null) + return false; + } else if ( !ldapStuffName.equals( other.ldapStuffName )) + return false; + if ( ldapStuffPassword == null) + { + if ( other.ldapStuffPassword != null) + return false; + } else if ( !ldapStuffPassword.equals( other.ldapStuffPassword )) + return false; + return true; + } + + @JsonProperty( "stuff_name") + private String ldapStuffName; + + @JsonProperty( "stuff_password") + private String ldapStuffPassword; + + +}