diff --git a/has/has-client/src/main/java/org/apache/kerby/has/client/HasClient.java b/has/has-client/src/main/java/org/apache/kerby/has/client/HasClient.java
index 3f1787a..be904f3 100755
--- a/has/has-client/src/main/java/org/apache/kerby/has/client/HasClient.java
+++ b/has/has-client/src/main/java/org/apache/kerby/has/client/HasClient.java
@@ -113,9 +113,9 @@
             if (hasClientConf == null) {
                 hasClientConf = HAS_CONFIG_DEFAULT;
             }
-            LOG.debug("has-client conf path: " + hasClientConf);
             File confFile = new File(hasClientConf);
             if (!confFile.exists()) {
+                LOG.warn("The HAS client config file: " + hasClientConf + " does not exist.");
                 throw new HasException("The HAS client config file: " + hasClientConf
                     + " does not exist.");
             }
@@ -199,14 +199,11 @@
         try {
             authToken = plugin.login(config);
         } catch (HasLoginException e) {
-            LOG.error("Plugin login failed: " + e.getMessage());
-            throw new HasException(
-                "Plugin login failed: " + e.getMessage());
+            LOG.warn(e.getMessage());
+            throw new HasException(e.getMessage());
         }
         type = plugin.getLoginType();
 
-        LOG.debug("The plugin type is: " + type);
-
         return requestTgt(authToken, type, config);
     }
 
@@ -222,9 +219,8 @@
             try {
                 PrintStream ps = new PrintStream(new FileOutputStream(krb5Conf));
                 ps.println(content);
-                LOG.debug("krb5.conf has saved in : " + krb5Conf.getAbsolutePath());
             } catch (FileNotFoundException e) {
-                LOG.error(e.getMessage());
+                LOG.error("Failed to write krb5.conf to " + e.getMessage());
                 throw new HasException(e);
             }
         }
@@ -234,7 +230,6 @@
 
     private HasClientPlugin getClientTokenPlugin(HasConfig config) throws HasException {
         String pluginName = config.getPluginName();
-        LOG.debug("The plugin name getting from config is: " + pluginName);
         HasClientPlugin clientPlugin;
         if (pluginName != null) {
             clientPlugin = HasClientPluginRegistry.createPlugin(pluginName);
@@ -244,7 +239,6 @@
         if (clientPlugin == null) {
             throw new HasException("Failed to create client plugin: " + pluginName);
         }
-        LOG.debug("The plugin class is: " + clientPlugin);
 
         return clientPlugin;
     }
@@ -265,7 +259,7 @@
         try {
             tokenString = tokenEncoder.encodeAsString(authToken);
         } catch (KrbException e) {
-            LOG.debug("Failed to decode the auth token.");
+            LOG.error("Failed to decode the auth token.");
             throw new HasException("Failed to decode the auth token." + e.getMessage());
         }
 
@@ -373,15 +367,7 @@
             }
         }
 
-        LOG.debug("Return from Server .... \n");
-
-        try {
-            return handleResponse(json, (String) authToken.getAttributes().get("passPhrase"));
-        } catch (HasException e) {
-            LOG.debug("Failed to handle response when requesting tgt ticket in client."
-                + e.getMessage());
-            throw new HasException(e);
-        }
+        return handleResponse(json, (String) authToken.getAttributes().get("passPhrase"));
     }
 
     private File loadSslClientConf(HasConfig config, String sslClientConfPath) throws HasException {
@@ -390,11 +376,11 @@
             String httpHost = config.getHttpHost();
             String httpPort = config.getHttpPort();
             if (httpHost == null) {
-                LOG.warn("Can't find the http host in config, the https host will be used.");
+                // Can't find the http host in config, the https host will be used.
                 httpHost = config.getHttpsHost();
             }
             if (httpPort == null) {
-                LOG.warn("Can't find the http port in config, the default http port will be used.");
+                // Can't find the http port in config, the default http port will be used.;
                 httpPort = HAS_HTTP_PORT_DEFAULT;
             }
             X509Certificate certificate = getCertificate(httpHost, httpPort);
@@ -410,15 +396,14 @@
 
     public KrbMessage getKrbMessage(JSONObject json) throws HasException {
 
-        LOG.debug("Starting to get the message from has server.");
-
         try {
             boolean success = json.getBoolean("success");
             if (!success) {
-                throw new HasException("Failed: " + json.getString("krbMessage"));
+                LOG.error(json.getString("krbMessage"));
+                throw new HasException(json.getString("krbMessage"));
             }
         } catch (JSONException e) {
-            LOG.debug("Failed to get message." + e);
+            LOG.error("Failed to get message." + e);
             throw new HasException("Failed to get message." + e);
         }
 
@@ -426,17 +411,16 @@
         try {
             typeString = json.getString("type");
         } catch (JSONException e) {
-            LOG.debug("Failed to get message." + e);
+            LOG.error("Failed to get message." + e);
             throw new HasException("Failed to get message." + e);
         }
 
         if (typeString != null && typeString.equals(type)) {
-            LOG.debug("The message type is " + type);
             String krbMessageString = null;
             try {
                 krbMessageString = json.getString("krbMessage");
             } catch (JSONException e) {
-                LOG.debug("Failed to get the krbMessage. " + e);
+                LOG.error("Failed to get the krbMessage. " + e);
             }
             Base64 base64 = new Base64(0);
             byte[] krbMessage = base64.decode(krbMessageString);
@@ -462,7 +446,7 @@
             return processResponse((KdcRep) kdcRep, passPhrase);
         } else if (messageType == KrbMessageType.KRB_ERROR) {
             KrbError error = (KrbError) kdcRep;
-            LOG.error("KDC server response with message: "
+            LOG.error("HAS server response with message: "
                 + error.getErrorCode().getMessage());
 
             throw new HasException(error.getEtext());
@@ -528,7 +512,6 @@
 //        }
 
         TgtTicket tgtTicket = getTicket(kdcRep);
-        LOG.debug("Ticket expire time: " + tgtTicket.getEncKdcRepPart().getEndTime());
         return tgtTicket;
 
     }
diff --git a/has/has-client/src/main/java/org/apache/kerby/has/client/HasLoginModule.java b/has/has-client/src/main/java/org/apache/kerby/has/client/HasLoginModule.java
index 91f3e35..d67962d 100644
--- a/has/has-client/src/main/java/org/apache/kerby/has/client/HasLoginModule.java
+++ b/has/has-client/src/main/java/org/apache/kerby/has/client/HasLoginModule.java
@@ -235,7 +235,7 @@
                 }
 
                 HasClient hasClient = new HasClient(hadoopSecurityHas);
-                TgtTicket tgtTicket = null;
+                TgtTicket tgtTicket;
                 try {
                     tgtTicket = hasClient.requestTgt();
                 } catch (HasException e) {
diff --git a/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/client/mysql/MySQLHasClientPlugin.java b/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/client/mysql/MySQLHasClientPlugin.java
index 5f98375..83b31e9 100644
--- a/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/client/mysql/MySQLHasClientPlugin.java
+++ b/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/client/mysql/MySQLHasClientPlugin.java
@@ -18,6 +18,7 @@
 package org.apache.kerby.has.plugins.client.mysql;
 
 import org.apache.kerby.has.client.AbstractHasClientPlugin;
+import org.apache.kerby.has.client.HasLoginException;
 import org.apache.kerby.kerberos.kerb.type.base.AuthToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,11 +37,17 @@
     }
 
     @Override
-    protected void doLogin(AuthToken authToken) {
+    protected void doLogin(AuthToken authToken) throws HasLoginException {
 
         // Get the user info from env
         String userName = System.getenv("userName");
+        if (userName == null || userName.isEmpty()) {
+            throw new HasLoginException("Please set the userName.");
+        }
         String password = System.getenv("password");
+        if (password == null || password.isEmpty()) {
+            throw new HasLoginException("Please set the password.");
+        }
 
         LOG.debug("Get the user info successfully.");
 
diff --git a/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/server/mysql/MySQLHasServerPlugin.java b/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/server/mysql/MySQLHasServerPlugin.java
index 1c53a8f..9ffc468 100644
--- a/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/server/mysql/MySQLHasServerPlugin.java
+++ b/has/has-plugins/src/main/java/org/apache/kerby/has/plugins/server/mysql/MySQLHasServerPlugin.java
@@ -33,7 +33,7 @@
 public class MySQLHasServerPlugin extends AbstractHasServerPlugin {
     private static final Logger LOG = LoggerFactory.getLogger(MySQLHasServerPlugin.class);
 
-     /**
+    /**
      * {@inheritDoc}
      */
     @Override
@@ -51,9 +51,18 @@
         String secret = (String) userToken.getAttributes().get("secret");
 
         String mysqlUrl = System.getenv("mysqlUrl");
+        if (mysqlUrl == null || mysqlUrl.isEmpty()) {
+            throw new HasAuthenException("Please set the mysqlUrl.");
+        }
         mysqlUrl = mysqlUrl.replace("jdbc:mysql:", "jdbc:mysql:thin:");
         String mysqlUser = System.getenv("mysqlUser");
+        if (mysqlUser == null || mysqlUser.isEmpty()) {
+            throw new HasAuthenException("Please set the mysqlUser.");
+        }
         String mysqlPasswd = System.getenv("mysqlPasswd");
+        if (mysqlPasswd == null || mysqlPasswd.isEmpty()) {
+            throw new HasAuthenException("Please set the mysqlPasswd.");
+        }
         Connection connection = startConnection(mysqlUrl, mysqlUser, mysqlPasswd);
 
         ResultSet res = null;
@@ -68,8 +77,21 @@
             if (res.next() && res.getInt(1) > 0) {
               LOG.debug("UserName: {}", user);
             } else {
-                LOG.error("Authentication failed.");
-                throw new HasAuthenException("Authentication failed.");
+
+                String sql = "SELECT COUNT(*) FROM `has_user` WHERE user_name = ?";
+                preStm = connection.prepareStatement(sql);
+                preStm.setString(1, user);
+                res = preStm.executeQuery();
+                if (res.next() && res.getInt(1) > 0) {
+                    throw new HasAuthenException("Authentication failed. "
+                            + "Incorrect password.");
+                } else if (!res.next()) {
+                    throw new HasAuthenException("Authentication failed. "
+                            + "Incorrect userName.");
+                } else {
+                    throw new HasAuthenException("Authentication failed. "
+                            + "Please check your userName and password.");
+                }
             }
         } catch (SQLException e) {
             LOG.error("Failed.");
@@ -105,7 +127,8 @@
         } catch (ClassNotFoundException e) {
             throw new HasAuthenException("JDBC Driver Class not found. ", e);
         } catch (SQLException e) {
-            throw new HasAuthenException("Failed to connecting to MySQL. ", e);
+            throw new HasAuthenException("Failed to connecting to MySQL."
+                    + "Please check MySQL URL, username and password. ", e);
         }
 
         return connection;
diff --git a/has/has-server/src/main/java/org/apache/kerby/has/server/web/rest/HasApi.java b/has/has-server/src/main/java/org/apache/kerby/has/server/web/rest/HasApi.java
index 9e73211..b2c7a48 100644
--- a/has/has-server/src/main/java/org/apache/kerby/has/server/web/rest/HasApi.java
+++ b/has/has-server/src/main/java/org/apache/kerby/has/server/web/rest/HasApi.java
@@ -288,14 +288,14 @@
                 try {
                     tokenPlugin = HasServerPluginRegistry.createPlugin(type);
                 } catch (HasException e) {
-                    errMessage = "Fail to get the plugin: " + type + ". " + e.getMessage();
+                    errMessage = "Failed to get the plugin: " + type + ". " + e.getMessage();
                     WebServer.LOG.error(errMessage);
                 }
                 AuthToken verifiedAuthToken;
                 try {
                     verifiedAuthToken = tokenPlugin.authenticate(authToken);
                 } catch (HasAuthenException e) {
-                    errMessage = "Failed to verify auth token: " + e.getMessage();
+                    errMessage = "Failed to verify auth token. " + e.getMessage();
                     WebServer.LOG.error(errMessage);
                     verifiedAuthToken = null;
                 }
