MaxKey пре 3 година
родитељ
комит
61673b4b07

+ 1 - 1
maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/support/rememberme/InMemoryRemeberMeService.java

@@ -28,7 +28,7 @@ public class InMemoryRemeberMeService   extends AbstractRemeberMeService {
 
     protected static final Cache<String, RemeberMe> remeberMeStore = 
             Caffeine.newBuilder()
-                .expireAfterWrite(ConstsTimeInterval.TWO_WEEK, TimeUnit.MINUTES)
+                .expireAfterWrite(ConstsTimeInterval.TWO_WEEK, TimeUnit.SECONDS)
                 .build();
     
     @Override

+ 2 - 1
maxkey-common/src/main/java/org/maxkey/util/HttpsTrusts.java

@@ -31,7 +31,8 @@ public class HttpsTrusts {
 		sc.init(null, trustAllCerts, null);
 		javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 	}
-    /*
+    
+    /**
      * https ssl auto trust
      */
 	public static void beforeConnection() {

+ 3 - 2
maxkey-common/src/main/java/org/maxkey/util/Preconditions.java

@@ -20,7 +20,6 @@ package org.maxkey.util;
 import java.util.Locale;
 import java.util.regex.Pattern;
 
-import org.maxkey.client.oauth.model.OAuthConstants;
 
 /**
  * Utils for checking preconditions and invariants
@@ -31,6 +30,8 @@ public abstract class Preconditions {
 
     // scheme = alpha *( alpha | digit | "+" | "-" | "." )
     private static final String URL_REGEXP = "^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+";
+    
+    private static final String OUT_OF_BAND = "oob";
 
     /**
      * Checks that an object is not null.
@@ -75,7 +76,7 @@ public abstract class Preconditions {
      */
     public static void checkValidOAuthCallback(String url, String errorMsg) {
         checkEmptyString(url, errorMsg);
-        if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) {
+        if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OUT_OF_BAND) != 0) {
             check(isUrl(url), errorMsg);
         }
     }

+ 4 - 3
maxkey-common/src/test/java/org/maxkey/util/InstanceTest.java

@@ -20,7 +20,8 @@ package org.maxkey.util;
 import java.security.Provider;
 import java.security.Security;
 
-import org.maxkey.client.crypto.ReciprocalUtils;
+import org.maxkey.crypto.password.PasswordReciprocal;
+
 
 public class InstanceTest {
 
@@ -28,9 +29,9 @@ public class InstanceTest {
         if(System.getProperty("java.version").startsWith("1.8")) {
             System.out.println("1.8");
             Security.addProvider((Provider)Instance.newInstance("com.sun.crypto.provider.SunJCE"));
-            System.out.println(ReciprocalUtils.encode("ddddd"));
+            System.out.println(PasswordReciprocal.getInstance().encode("ddddd"));
             
-            System.out.println(ReciprocalUtils.encode("ddfs"));
+            System.out.println(PasswordReciprocal.getInstance().encode("ddfs"));
         }else {
             System.out.println("other");
         }

+ 6 - 0
maxkey-core/src/main/java/org/maxkey/constants/ConstsStatus.java

@@ -48,5 +48,11 @@ public final class ConstsStatus {
     public static final int APPROVED 	= 14;
     
     public static final int QUITED 		= 15;
+    
+    public static final String NONE 	= "NONE";
+    
+    public static final String YES 		= "YES";
+    
+    public static final String NO 		= "NO";
 
 }

+ 12 - 1
maxkey-core/src/main/java/org/maxkey/constants/ldap/ActiveDirectoryUser.java

@@ -121,7 +121,13 @@ public class ActiveDirectoryUser {
 	public static final String NAME 						= "name";
 	public static final String UID 							= "uid";
 	
+	/**
+	 * First Name
+	 */
 	public static final String GIVENNAME 					= "givenName";
+	/**
+	 * Last Name/SurName
+	 */
 	public static final String SN 							= "sn";
 	public static final String INITIALS 					= "initials";
 	public static final String DESCRIPTION 					= "description";
@@ -143,8 +149,13 @@ public class ActiveDirectoryUser {
 	public static final String INFO 						= "info";
 	public static final String HOMEPHONE 					= "homePhone";
 	
-
+	/**
+	 * admin@maxkey.top
+	 */
 	public static final String USERPRINCIPALNAME 			= "userPrincipalName";
+	/**
+	 * maxkey\admin
+	 */
 	public static final String SAMACCOUNTNAME 				= "sAMAccountname";
 	public static final String LOGONHOURS 					= "logonHours";
 	public static final String LOGONWORKSTATION 			= "logonWorkstation";

+ 29 - 34
maxkey-core/src/main/java/org/maxkey/entity/UserInfo.java

@@ -19,7 +19,6 @@ package org.maxkey.entity;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 
@@ -271,80 +270,80 @@ public class UserInfo extends JpaBaseEntity {
     
     public static class ONLINE {
         // 在线
-        public static final int ONLINE = 1;
+        public static final int ONLINE 				= 1;
         // 下线
-        public static final int OFFLINE = 0;
+        public static final int OFFLINE 			= 0;
     }
 
     public static class MARRIED {
         // 未知
-        public static final int UNKNOWN = 0;
+        public static final int UNKNOWN 			= 0;
         // 单身
-        public static final int SINGLE = 1;
+        public static final int SINGLE 				= 1;
         // 结婚
-        public static final int MARRIED = 2;
+        public static final int MARRIED 			= 2;
         // 离异
-        public static final int DIVORCE = 3;
+        public static final int DIVORCE 			= 3;
         // 丧偶
-        public static final int WIDOWED = 4;
+        public static final int WIDOWED 			= 4;
 
     }
 
     public static class GENDER {
         // 未知
-        public static final int UNKNOWN = 0;
+        public static final int UNKNOWN 			= 0;
         // 女性
-        public static final int FEMALE = 1;
+        public static final int FEMALE 				= 1;
         // 男性
-        public static final int MALE = 2;
+        public static final int MALE 				= 2;
     }
 
     public static class IDTYPE {
         // 未知
-        public static final int UNKNOWN = 0;
+        public static final int UNKNOWN 			= 0;
         // 身份证
-        public static final int IDCARD = 1;
+        public static final int IDCARD 				= 1;
         // 护照
-        public static final int PASSPORT = 2;
+        public static final int PASSPORT 			= 2;
         // 学生证
-        public static final int STUDENTCARD = 3;
+        public static final int STUDENTCARD 		= 3;
         // 军人证
-        public static final int MILITARYCARD = 4;
+        public static final int MILITARYCARD 		= 4;
     }
 
     public static class AUTHNTYPE {
         // 用户名密码
-        public static final int NORMAL = 1;
+        public static final int NORMAL 				= 1;
         // 手机
-        public static final int MOBILE = 2;
+        public static final int MOBILE 				= 2;
         // 短信
-        public static final int SMS = 3;
+        public static final int SMS 				= 3;
         // 邮箱
-        public static final int EMAIL = 4;
+        public static final int EMAIL 				= 4;
 
-        public static final int TIMEBASED_OPT = 5;
+        public static final int TIMEBASED_OPT 		= 5;
 
-        public static final int COUNTERBASED_OPT = 6;
+        public static final int COUNTERBASED_OPT 	= 6;
 
-        public static final int HOTP_OPT = 7;
+        public static final int HOTP_OPT 			= 7;
 
-        public static final int RSA_OPT = 8;
+        public static final int RSA_OPT 			= 8;
         // 证书
-        public static final int CERTIFICATE = 9;
+        public static final int CERTIFICATE 		= 9;
         // usb证书
-        public static final int USBKEY = 10;
+        public static final int USBKEY 				= 10;
 
     }
 
     public static class EMPLOYMENTSTATUS {
         // 在册人员
-        public static final int ACTIVE = 1;
+        public static final int ACTIVE 				= 1;
         // 离职人员
-        public static final int WITHDRAWN = 2;
+        public static final int WITHDRAWN 			= 2;
         // 停薪留职人员
-        public static final int INACTIVE = 3;
+        public static final int INACTIVE 			= 3;
         // 退休人员
-        public static final int RETIREE = 4;
+        public static final int RETIREE 			= 4;
 
     }
 
@@ -1324,10 +1323,6 @@ public class UserInfo extends JpaBaseEntity {
 		builder.append(gender);
 		builder.append(", birthDate=");
 		builder.append(birthDate);
-		builder.append(", picture=");
-		builder.append(Arrays.toString(picture));
-		builder.append(", pictureFile=");
-		builder.append(pictureFile);
 		builder.append(", idType=");
 		builder.append(idType);
 		builder.append(", idCardNo=");

BIN
maxkey-lib/maxkey-client-sdk-2.0.0.RELEASE.jar


+ 9 - 12
maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiCndnsApiMailAdapter.java

@@ -20,14 +20,13 @@ package org.maxkey.authz.exapi.endpoint.adapter;
 import java.time.Instant;
 import java.util.HashMap;
 import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
-import org.maxkey.client.http.HttpVerb;
-import org.maxkey.client.oauth.OAuthClient;
 import org.maxkey.crypto.DigestUtils;
 import org.maxkey.entity.Accounts;
 import org.maxkey.entity.ExtraAttrs;
 import org.maxkey.entity.apps.Apps;
 import org.maxkey.util.HttpsTrusts;
 import org.maxkey.util.JsonUtils;
+import org.maxkey.web.HttpRequestAdapter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.servlet.ModelAndView;
@@ -88,7 +87,7 @@ public class ExtendApiCndnsApiMailAdapter extends AbstractAuthorizeAdapter {
 		String timestamp  = ""+Instant.now().getEpochSecond();
 		
 		String tokenMd5 =DigestUtils.md5Hex(details.getCredentials());
-		HashMap<String,String > requestParamenter =new HashMap<String,String >();
+		HashMap<String,Object > requestParamenter =new HashMap<String,Object >();
 		String redirect_uri = "";
 		if(action.equalsIgnoreCase("getDomailUrl")) {
 			String sign =DigestUtils.md5Hex
@@ -96,12 +95,11 @@ public class ExtendApiCndnsApiMailAdapter extends AbstractAuthorizeAdapter {
 							SIGN_STRING,
 							details.getPrincipal(),timestamp,tokenMd5));
 			requestParamenter.put("domain", domain);
-			OAuthClient authkeyRestClient=new OAuthClient(
-					String.format(ADMIN_AUTHKEY_URI,details.getPrincipal(),sign,timestamp),HttpVerb.POST);
-			authkeyRestClient.addRestObject(requestParamenter);
+			String responseBody = new HttpRequestAdapter().post(
+					String.format(ADMIN_AUTHKEY_URI,details.getPrincipal(),sign,timestamp),requestParamenter);
 			
-			HashMap<String, String> authKey=JsonUtils.gson2Object(authkeyRestClient.execute().getBody(), HashMap.class);
-			redirect_uri=authKey.get("adminUrl");
+			HashMap<String, String> authKey=JsonUtils.gson2Object(responseBody, HashMap.class);
+			redirect_uri = authKey.get("adminUrl");
 			
 		}else {
 			String sign =DigestUtils.md5Hex
@@ -109,11 +107,10 @@ public class ExtendApiCndnsApiMailAdapter extends AbstractAuthorizeAdapter {
 							SIGN_EMAIL_STRING,
 							details.getPrincipal(),userInfo.getEmail(),timestamp,tokenMd5));
 			requestParamenter.put("email", userInfo.getWorkEmail());
-			OAuthClient authkeyRestClient=new OAuthClient(
-					String.format(AUTHKEY_URI,details.getPrincipal(),sign,timestamp),HttpVerb.POST);
-			authkeyRestClient.addRestObject(requestParamenter);
+			String responseBody = new HttpRequestAdapter().post(
+					String.format(AUTHKEY_URI,details.getPrincipal(),sign,timestamp),requestParamenter);
 			
-			HashMap<String, String> authKey=JsonUtils.gson2Object(authkeyRestClient.execute().getBody(), HashMap.class);
+			HashMap<String, String> authKey=JsonUtils.gson2Object(responseBody, HashMap.class);
 			redirect_uri=authKey.get("webmailUrl");
 		}
 		

+ 104 - 18
maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiQQExmailAdapter.java

@@ -17,15 +17,15 @@
 
 package org.maxkey.authz.exapi.endpoint.adapter;
 
-import java.util.HashMap;
+import java.io.Serializable;
+
 import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
-import org.maxkey.client.oauth.OAuthClient;
-import org.maxkey.client.oauth.model.Token;
 import org.maxkey.entity.Accounts;
 import org.maxkey.entity.ExtraAttrs;
 import org.maxkey.entity.apps.Apps;
 import org.maxkey.util.HttpsTrusts;
 import org.maxkey.util.JsonUtils;
+import org.maxkey.web.HttpRequestAdapter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.servlet.ModelAndView;
@@ -38,9 +38,9 @@ import org.springframework.web.servlet.ModelAndView;
 public class ExtendApiQQExmailAdapter extends AbstractAuthorizeAdapter {
 	final static Logger _logger = LoggerFactory.getLogger(ExtendApiQQExmailAdapter.class);
 	//https://exmail.qq.com/qy_mng_logic/doc#10003
-	static String TOKEN_URI="https://api.exmail.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
+	static String TOKEN_URI		= "https://api.exmail.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
 	//https://exmail.qq.com/qy_mng_logic/doc#10036
-	static String AUTHKEY_URI="https://api.exmail.qq.com/cgi-bin/service/get_login_url?access_token=%s&userid=%s";
+	static String AUTHKEY_URI 	= "https://api.exmail.qq.com/cgi-bin/service/get_login_url?access_token=%s&userid=%s";
 	
 	Accounts account;
 	
@@ -49,8 +49,6 @@ public class ExtendApiQQExmailAdapter extends AbstractAuthorizeAdapter {
 		return null;
 	}
 
-
-	@SuppressWarnings("unchecked")
     @Override
 	public ModelAndView authorize(ModelAndView modelAndView) {
 		HttpsTrusts.beforeConnection();
@@ -62,23 +60,111 @@ public class ExtendApiQQExmailAdapter extends AbstractAuthorizeAdapter {
 			extraAttrs=new ExtraAttrs(details.getExtendAttr());
 		}
 		_logger.debug("Extra Attrs "+extraAttrs);
-		OAuthClient tokenRestClient=new OAuthClient(
-				String.format(TOKEN_URI,details.getPrincipal(),details.getCredentials()));
-		Token token =tokenRestClient.requestAccessToken();
-		_logger.debug(""+token);
+		String responseBody = new HttpRequestAdapter().get(
+				String.format(TOKEN_URI,details.getPrincipal(),details.getCredentials()),null);
+		Token token =JsonUtils.gson2Object(responseBody,Token.class);
+		_logger.debug("token {}" , token);
 		
-		OAuthClient authkeyRestClient=new OAuthClient(
-				String.format(AUTHKEY_URI,token.getAccess_token(),userInfo.getUsername()));
+		String authKeyBody = new HttpRequestAdapter().get(
+				String.format(AUTHKEY_URI,token.getAccess_token(),userInfo.getUsername()),null);
 		
-		HashMap<String, String> authKey=JsonUtils.gson2Object(authkeyRestClient.execute().getBody(), HashMap.class);
-		_logger.debug("authKey : "+authKey);
+		LoginUrl loginUrl=JsonUtils.gson2Object(authKeyBody, LoginUrl.class);
+		_logger.debug("LoginUrl {} " , loginUrl);
 		
-		String redirect_uri=authKey.get("login_url");
-		_logger.debug("redirect_uri : "+redirect_uri);
 		
-        modelAndView.addObject("redirect_uri", redirect_uri);
+        modelAndView.addObject("redirect_uri", loginUrl.getLogin_url());
         
         return modelAndView;
 	}
+    
+	class ExMailMsg{
+		
+		protected long expires_in;
+		    
+		protected String errmsg;
+		
+		protected long errcode;
+
+		public ExMailMsg() {
+		}
+
+		public long getExpires_in() {
+			return expires_in;
+		}
+
+		public void setExpires_in(long expires_in) {
+			this.expires_in = expires_in;
+		}
+
+		public String getErrmsg() {
+			return errmsg;
+		}
+
+		public void setErrmsg(String errmsg) {
+			this.errmsg = errmsg;
+		}
+
+		public long getErrcode() {
+			return errcode;
+		}
+
+		public void setErrcode(long errcode) {
+			this.errcode = errcode;
+		}
+		
+		
+	}
+	
+	class Token extends ExMailMsg implements Serializable {
+		private static final long serialVersionUID = 275756585220635542L;
+
+	    /**
+	     * access_token
+	     */
+	    private String access_token;
+	    
+		public String getAccess_token() {
+			return access_token;
+		}
+
+		public void setAccess_token(String access_token) {
+			this.access_token = access_token;
+		}
+
+		@Override
+		public String toString() {
+			StringBuilder builder = new StringBuilder();
+			builder.append("Token [access_token=");
+			builder.append(access_token);
+			builder.append("]");
+			return builder.toString();
+		}
+
+	}
+	
+	class LoginUrl extends ExMailMsg  implements Serializable {
+		private static final long serialVersionUID = 3033047757268214198L;
+		private String login_url;
+		 
+		public String getLogin_url() {
+			return login_url;
+		}
+
+		public void setLogin_url(String login_url) {
+			this.login_url = login_url;
+		}
+		
+		public LoginUrl() {
+		}
+
+		@Override
+		public String toString() {
+			StringBuilder builder = new StringBuilder();
+			builder.append("LoginUrl [login_url=");
+			builder.append(login_url);
+			builder.append("]");
+			return builder.toString();
+		}
+	}
 
 }

+ 31 - 30
maxkey-synchronizers/maxkey-synchronizer-activedirectory/src/main/java/org/maxkey/synchronizer/activedirectory/ActiveDirectoryUsersService.java

@@ -117,43 +117,44 @@ public class ActiveDirectoryUsersService extends AbstractSynchronizerService
         userInfo.setDepartmentId(deptOrg.getId());
 		try {
 		    userInfo.setId(userInfo.generateId());
-			userInfo.setFormattedName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.CN,attributeMap));//閸忋劌鎮�
-			//鐠愶附鍩�
-			userInfo.setUsername(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SAMACCOUNTNAME,attributeMap));//鐠愶箑褰�
-			userInfo.setWindowsAccount(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.USERPRINCIPALNAME,attributeMap));//閻ц缍�
+			userInfo.setFormattedName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.CN,attributeMap));//cn
+			//
+			userInfo.setUsername(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SAMACCOUNTNAME,attributeMap));//WindowsAccount
+			userInfo.setWindowsAccount(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SAMACCOUNTNAME,attributeMap));
+			//userInfo.setWindowsAccount(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.USERPRINCIPALNAME,attributeMap));//
 			
-			//鐢瓕顫�
-			userInfo.setFamilyName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SN,attributeMap));//婵拷
-			userInfo.setGivenName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.GIVENNAME,attributeMap));//閸氾拷
-			userInfo.setNickName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INITIALS,attributeMap));//閺勭數袨
-			userInfo.setNameZhShortSpell(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INITIALS,attributeMap));//閼昏鲸鏋冪紓鈺佸晸
-			userInfo.setDisplayName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DISPLAYNAME,attributeMap));//閺勫墽銇氶崥宥囆�
-			userInfo.setDescription(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DESCRIPTION,attributeMap));//閹诲繗鍫�
-			userInfo.setWorkPhoneNumber(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.TELEPHONENUMBER,attributeMap));//閻絻鐦介崣椋庣垳
-			userInfo.setWorkOfficeName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.PHYSICALDELIVERYOFFICENAME,attributeMap));//閸旂偛鍙曠�癸拷
-			userInfo.setWorkEmail(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MAIL,attributeMap));//闁喕娆�
-			userInfo.setWebSite(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.WWWHOMEPAGE,attributeMap));//缂冩垿銆�
-			//閸︽澘娼�
-			userInfo.setWorkCountry(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.CO,attributeMap));//閸ヨ棄顔�
-			userInfo.setWorkRegion(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.ST,attributeMap));//閻拷
-			userInfo.setWorkLocality(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.L,attributeMap));//閸橈拷
-			userInfo.setWorkStreetAddress(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.STREETADDRESS,attributeMap));//鐞涙浜�
-			userInfo.setWorkPostalCode(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTALCODE,attributeMap));//闁喚绱�
-			userInfo.setWorkAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTOFFICEBOX,attributeMap));//闁喗鏂傞柇顔绢唸
+			//
+			userInfo.setFamilyName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.SN,attributeMap));//Last Name/SurName
+			userInfo.setGivenName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.GIVENNAME,attributeMap));//First Name
+			userInfo.setNickName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INITIALS,attributeMap));//Initials
+			userInfo.setNameZhShortSpell(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INITIALS,attributeMap));//Initials
+			userInfo.setDisplayName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DISPLAYNAME,attributeMap));//
+			userInfo.setDescription(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DESCRIPTION,attributeMap));//
+			userInfo.setWorkPhoneNumber(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.TELEPHONENUMBER,attributeMap));//
+			userInfo.setWorkOfficeName(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.PHYSICALDELIVERYOFFICENAME,attributeMap));//
+			userInfo.setWorkEmail(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MAIL,attributeMap));//
+			userInfo.setWebSite(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.WWWHOMEPAGE,attributeMap));//
+			//
+			userInfo.setWorkCountry(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.CO,attributeMap));//
+			userInfo.setWorkRegion(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.ST,attributeMap));//
+			userInfo.setWorkLocality(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.L,attributeMap));//
+			userInfo.setWorkStreetAddress(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.STREETADDRESS,attributeMap));//
+			userInfo.setWorkPostalCode(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTALCODE,attributeMap));//
+			userInfo.setWorkAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.POSTOFFICEBOX,attributeMap));//
 			
 			if(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap).equals("")) {
 			    userInfo.setMobile(userInfo.getId());
 			}else {
-			    userInfo.setMobile(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap));//閹靛婧�
+			    userInfo.setMobile(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.MOBILE,attributeMap));//
 			}
-			userInfo.setHomePhoneNumber(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.HOMEPHONE,attributeMap));//鐎硅泛娑甸悽浣冪樈
-			userInfo.setWorkFax(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.FACSIMILETELEPHONENUMBER,attributeMap));//娴肩姷婀�
-			userInfo.setHomeAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INFO,attributeMap));//閻絻鐦芥径鍥ㄦ暈
+			userInfo.setHomePhoneNumber(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.HOMEPHONE,attributeMap));//
+			userInfo.setWorkFax(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.FACSIMILETELEPHONENUMBER,attributeMap));//
+			userInfo.setHomeAddressFormatted(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.INFO,attributeMap));//
 			
-			userInfo.setDivision(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.COMPANY,attributeMap)); //閸忣剙寰�
-			//userInfo.setDepartment(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //闁劑妫�
-			//userInfo.setDepartmentId(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //闁劑妫紓鏍у娇
-			userInfo.setJobTitle(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.TITLE,attributeMap));//閼卞苯濮�
+			userInfo.setDivision(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.COMPANY,attributeMap)); //
+			//userInfo.setDepartment(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //
+			//userInfo.setDepartmentId(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.DEPARTMENT,attributeMap)); //
+			userInfo.setJobTitle(LdapUtils.getAttributeStringValue(ActiveDirectoryUser.TITLE,attributeMap));//
 			userInfo.setUserState("RESIDENT");
 			userInfo.setUserType("EMPLOYEE");
 			userInfo.setTimeZone("Asia/Shanghai");