diff --git a/src/main/java/org/nutricraft/Model/LogModel.java b/src/main/java/org/nutricraft/Model/LogModel.java
index 2e21036518e90c6841569939f7ec7c62be0ad2aa..cc527bc63d442e9c4ce65e644adb895b0b330fc9 100644
--- a/src/main/java/org/nutricraft/Model/LogModel.java
+++ b/src/main/java/org/nutricraft/Model/LogModel.java
@@ -10,10 +10,10 @@ public class LogModel extends Database {
         super();
     }
 
-    public String InsertLog(String desc, String endpoint, String ip) {
+    public String InsertLog(String desc, String endpoint, String ip, String requested_at) {
         try {
             Statement statement = this.connection.createStatement();
-            String query = "INSERT INTO logging (description, endpoint, ip) VALUES ('" + desc + "', '" + endpoint + "', '" + ip + "')";
+            String query = "INSERT INTO logging (description, endpoint, IP, requested_at) VALUES ('" + desc + "', '" + endpoint + "', '" + ip + "','" + requested_at +"')";
             statement.executeUpdate(query);
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/src/main/java/org/nutricraft/Services/CoinServicesImpl.java b/src/main/java/org/nutricraft/Services/CoinServicesImpl.java
index 335a8dbfbebec168efb53982c19ebb0972827d95..d433dca3a86c4258be35663ab656ae044259576b 100644
--- a/src/main/java/org/nutricraft/Services/CoinServicesImpl.java
+++ b/src/main/java/org/nutricraft/Services/CoinServicesImpl.java
@@ -2,20 +2,32 @@ package org.nutricraft.Services;
 
 import org.nutricraft.Database.Database;
 import org.nutricraft.Model.Coins;
+import org.nutricraft.Model.LogModel;
 
+import javax.annotation.Resource;
 import javax.jws.WebMethod;
 import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.Statement;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @WebService(endpointInterface = "org.nutricraft.Services.CoinServices")
 public class CoinServicesImpl implements CoinServices{
 
+    @Resource
+    private WebServiceContext wsContext;
     @WebMethod
     public List<Coins> getAllCoins() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<Coins> coins = new ArrayList<Coins>();
         try{
             Database db = new Database();
@@ -26,6 +38,7 @@ public class CoinServicesImpl implements CoinServices{
             while (result.next()) {
                 coins.add(new Coins(result.getString("id"), result.getInt("coin")));
             }
+            log("Get All Coins");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -39,6 +52,10 @@ public class CoinServicesImpl implements CoinServices{
 
     @WebMethod
     public Integer getCoins(String id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         int coin=0;
         try {
             Database db = new Database();
@@ -49,6 +66,7 @@ public class CoinServicesImpl implements CoinServices{
             if(result.next()){
                 coin = result.getInt("coin");
             }
+            log("Get Coins");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -57,12 +75,17 @@ public class CoinServicesImpl implements CoinServices{
 
     @WebMethod
     public String addCoins(String id, int coins) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE coins SET coin = coin + " + coins + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Add Coins");
             return "Successfully added coins";
         }catch (Exception e){
             e.printStackTrace();
@@ -72,12 +95,17 @@ public class CoinServicesImpl implements CoinServices{
 
     @WebMethod
     public String substractCoins(String id, int coins) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE coins SET coin = coin - " + coins + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Substract Coins");
             return "Successfully removed coins";
         }catch (Exception e){
             e.printStackTrace();
@@ -87,18 +115,51 @@ public class CoinServicesImpl implements CoinServices{
 
     @WebMethod
     public String deleteCoins(String id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "DELETE FROM coins WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Delete Coins");
             return "Successfully deleted coins";
         }catch (Exception e){
             e.printStackTrace();
         }
         return "Failed to delete coins";
     }
-
+    public Boolean validateApiKey() {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        if(keyValue.length==0 || !keyValue[0].equals("APIkey")){
+            return false;
+        }
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        if(apiKey.equals("lalala")||apiKey.equals("hahaha")){
+            return true;
+        }else{
+            return false;
+        }
+    }
+    public void log(String description) {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        String ip = "123";
+        String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
+        Timestamp timestamp = new Timestamp(new Date().getTime());
+        LogModel logModel = new LogModel();
+        logModel.InsertLog(description, endpoint, ip, timestamp.toString());
+    }
 
 }
diff --git a/src/main/java/org/nutricraft/Services/LevelCreatorServices.java b/src/main/java/org/nutricraft/Services/LevelCreatorServices.java
index 45ca463a71bc9589f4e1824940b6ac30d7221f39..fb53c40a07db4ad49d662d25cf14dcb53bbece96 100644
--- a/src/main/java/org/nutricraft/Services/LevelCreatorServices.java
+++ b/src/main/java/org/nutricraft/Services/LevelCreatorServices.java
@@ -12,7 +12,7 @@ public interface LevelCreatorServices {
     public List<CreatorLevels> getAllLevels();
 
     @WebMethod
-    public int getExp(String id);
+    public Integer getExp(String id);
 
     @WebMethod
     public String addExp(String id, int exp);
diff --git a/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java b/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java
index 77ecd50a77ae13741ea97c5b3f41d8887e56a1e8..005eb5eb1859558ba9b9f5e28bcbca3fd67bc6ce 100644
--- a/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java
+++ b/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java
@@ -3,19 +3,32 @@ package org.nutricraft.Services;
 
 import org.nutricraft.Database.Database;
 import org.nutricraft.Model.CreatorLevels;
+import org.nutricraft.Model.LogModel;
 
+import javax.annotation.Resource;
 import javax.jws.WebMethod;
 import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.Statement;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @WebService(endpointInterface = "org.nutricraft.Services.LevelCreatorServices")
 public class LevelCreatorServicesImpl implements LevelCreatorServices{
+
+    @Resource
+    private WebServiceContext wsContext;
     @WebMethod
     public List<CreatorLevels> getAllLevels(){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<CreatorLevels> creator = new ArrayList<CreatorLevels>();
         try{
             Database db = new Database();
@@ -26,6 +39,7 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
             while (result.next()){
                 creator.add(new CreatorLevels(result.getString("id"),result.getInt("exp")));
             }
+            log("Get All Levels");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -33,7 +47,11 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
     }
 
     @WebMethod
-    public int getExp(String id){
+    public Integer getExp(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         int exp=0;
         try {
             Database db = new Database();
@@ -44,6 +62,7 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
             if(result.next()){
                 exp = result.getInt("exp");
             }
+            log("Get Exp");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -52,12 +71,17 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
 
     @WebMethod
     public String addExp(String id, int exp){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE creatorlevels SET exp = exp + " + exp + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Add Exp");
             return "Successfully added exp";
         }catch (Exception e){
             e.printStackTrace();
@@ -67,12 +91,17 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
 
     @WebMethod
     public String substractExp(String id, int exp){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE creatorlevels SET exp = exp - " + exp + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Substract Exp");
             return "Successfully substract exo";
         }catch (Exception e){
             e.printStackTrace();
@@ -82,16 +111,51 @@ public class LevelCreatorServicesImpl implements LevelCreatorServices{
 
     @WebMethod
     public String deleteExp(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "DELETE FROM creatorlevels WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Delete Exp");
             return "Successfully deleted creatorlevels";
         }catch (Exception e){
             e.printStackTrace();
         }
         return "Failed to delete creatorlevels";
     }
+
+    public Boolean validateApiKey() {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        if(keyValue.length==0 || !keyValue[0].equals("APIkey")){
+            return false;
+        }
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        if(apiKey.equals("lalala")||apiKey.equals("hahaha")){
+            return true;
+        }else{
+            return false;
+        }
+    }
+    public void log(String description) {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        String ip = "123";
+        String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
+        Timestamp timestamp = new Timestamp(new Date().getTime());
+        LogModel logModel = new LogModel();
+        logModel.InsertLog(description, endpoint, ip, timestamp.toString());
+    }
 }
diff --git a/src/main/java/org/nutricraft/Services/LevelUserServices.java b/src/main/java/org/nutricraft/Services/LevelUserServices.java
index 116e3955104bea123dad6b7bbc5cdab9b5e319f8..4f8cc2844eb2662257bc00a026292451aec4f01d 100644
--- a/src/main/java/org/nutricraft/Services/LevelUserServices.java
+++ b/src/main/java/org/nutricraft/Services/LevelUserServices.java
@@ -14,7 +14,7 @@ public interface LevelUserServices {
     public List<UserLevels> getAllLevel();
 
     @WebMethod
-    public int getExp(int id);
+    public Integer getExp(int id);
 
     @WebMethod
     public String addExp(int id, int exp);
diff --git a/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java b/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java
index 22d0af29243cd294ab1c2172fded9c135a77fdac..f01711e49c836117a11b6ff7a842d08d6485606b 100644
--- a/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java
+++ b/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java
@@ -1,21 +1,33 @@
 package org.nutricraft.Services;
 
 import org.nutricraft.Database.Database;
+import org.nutricraft.Model.LogModel;
 import org.nutricraft.Model.UserLevels;
 
+import javax.annotation.Resource;
 import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.Statement;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 
 @WebService(endpointInterface = "org.nutricraft.Services.LevelUserServices")
 public class LevelUserServicesImpl implements LevelUserServices {
 
+    @Resource
+    private WebServiceContext wsContext;
     @Override
     public List<UserLevels> getAllLevel() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<UserLevels> user = new ArrayList<UserLevels>();
         try{
             Database db = new Database();
@@ -26,6 +38,7 @@ public class LevelUserServicesImpl implements LevelUserServices {
             while (result.next()){
                 user.add(new UserLevels(result.getInt("id"),result.getInt("exp")));
             }
+            log("Get All Levels User");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -33,7 +46,11 @@ public class LevelUserServicesImpl implements LevelUserServices {
     }
 
     @Override
-    public int getExp(int id) {
+    public Integer getExp(int id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         int exp=0;
         try {
             Database db = new Database();
@@ -44,6 +61,7 @@ public class LevelUserServicesImpl implements LevelUserServices {
             if(result.next()){
                 exp = result.getInt("exp");
             }
+            log("Get Exp User");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -52,12 +70,17 @@ public class LevelUserServicesImpl implements LevelUserServices {
 
     @Override
     public String addExp(int id, int exp) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE userlevels SET exp = exp + " + exp + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Add Exp User");
             return "Successfully added exp";
         }catch (Exception e){
             e.printStackTrace();
@@ -67,12 +90,17 @@ public class LevelUserServicesImpl implements LevelUserServices {
 
     @Override
     public String substractExp(int id, int exp) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "UPDATE userlevels SET exp = exp - " + exp + " WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Substract Exp User");
             return "Successfully substract exo";
         }catch (Exception e){
             e.printStackTrace();
@@ -82,16 +110,51 @@ public class LevelUserServicesImpl implements LevelUserServices {
 
     @Override
     public String deleteExp(int id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try{
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "DELETE FROM userlevels WHERE id = '" + id + "'";
             statement.executeUpdate(query);
+            log("Delete Exp User");
             return "Successfully deleted userlevels";
         }catch (Exception e){
             e.printStackTrace();
         }
         return "Failed to delete userlevels";
     }
+
+    public Boolean validateApiKey() {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        if(keyValue.length==0 || !keyValue[0].equals("APIkey")){
+            return false;
+        }
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        if(apiKey.equals("lalala")||apiKey.equals("hahaha")){
+            return true;
+        }else{
+            return false;
+        }
+    }
+    public void log(String description) {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        String ip = "123";
+        String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
+        Timestamp timestamp = new Timestamp(new Date().getTime());
+        LogModel logModel = new LogModel();
+        logModel.InsertLog(description, endpoint, ip, timestamp.toString());
+    }
 }
diff --git a/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java b/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java
index 946e267279a0af011b93555f31227370a051a76e..257d6a42fe92de62285c8588d6449d6873e6ca9d 100644
--- a/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java
+++ b/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java
@@ -8,23 +8,32 @@ import javax.annotation.Resource;
 import javax.jws.WebMethod;
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.spi.http.HttpExchange;
 import java.sql.*;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Date;
+import java.util.Map;
 
 @WebService (endpointInterface = "org.nutricraft.Services.SubscriptionServices")
 public class SubscriptionServicesImpl implements SubscriptionServices{
 
     @Resource
-    public WebServiceContext wsContext;
+    private WebServiceContext wsContext;
     @WebMethod
     public String newSubscription(String idCreator, int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try {
             Database db = new Database();
             Connection connection = db.getConn();
             Statement statement = connection.createStatement();
             String query = "INSERT INTO subscribers (id_creator, id_user) VALUES ('" + idCreator + "', '" + idSubscriber + "')";
             statement.executeUpdate(query);
+            log("New Subscription");
             return "Successfully inserted new subscription";
         } catch (Exception e) {
             e.printStackTrace();
@@ -33,6 +42,10 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
     }
     @WebMethod
     public Boolean checkSubscription(String idCreator, int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         try {
             Database db = new Database();
             Connection connection = db.getConn();
@@ -40,6 +53,7 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
             String query = "SELECT * FROM subscribers WHERE id_creator = '" + idCreator + "' AND id_user = '" + idSubscriber + "'";
             ResultSet result = statement.executeQuery(query);
             if (result.next()) {
+                log("Check Subscription");
                 return true;
             }
         }catch (Exception e){
@@ -50,6 +64,10 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
 
     @WebMethod
     public List<Integer> getSubscribers(String idCreator){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<Integer> listSubscribers = new ArrayList<Integer>();
         try {
             Database db = new Database();
@@ -62,6 +80,7 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
                 System.out.println("id: " + id);
                 listSubscribers.add(id);
             }
+            log("Get Subscribers");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -70,6 +89,10 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
 
     @WebMethod
     public List<String> getCreators(int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<String> listCreators = new ArrayList<String>();
         try {
             Database db = new Database();
@@ -82,6 +105,7 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
                 System.out.println("id: " + id);
                 listCreators.add(id);
             }
+            log("Get Creators");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -90,7 +114,12 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
 
     @WebMethod
     public List<Subscibers> getAllSubscription() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
         List<Subscibers> listSubscribers = new ArrayList<Subscibers>();
+
         try {
             Database db = new Database();
             Connection connection = db.getConn();
@@ -104,6 +133,7 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
                 int idSubscriber = result.getInt("id_user");
                 listSubscribers.add(new Subscibers(id,idCreator,idSubscriber));
             }
+            log("Get All Subscription");
 
         } catch (Exception e) {
             e.printStackTrace();
@@ -114,32 +144,36 @@ public class SubscriptionServicesImpl implements SubscriptionServices{
         }
         return listSubscribers;
     }
-
-//    public Boolean validateApiKey() {
-//        String[] API_KEYS = { "PremiumApp", "Postman", "RestClient", "RegularApp" };
-//        MessageContext mc = wsContext.getMessageContext();
-//        HttpExchange exchange = (HttpExchange) mc.get("com.sun.xml.ws.http.exchange");
-//        String apiKey = exchange.getRequestHeaders().getFirst("X-API-KEY");
-//        if (apiKey == null) {
-//            return false;
-//        } else if (apiKey.equals(API_KEYS[0]) || apiKey.equals(API_KEYS[1]) || apiKey.equals(API_KEYS[2])
-//                || apiKey.equals(API_KEYS[3])) {
-//            return true;
-//        } else {
-//            return false;
-//        }
-//    }
+    public Boolean validateApiKey() {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        if(keyValue.length==0 || !keyValue[0].equals("APIkey")){
+            return false;
+        }
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        if(apiKey.equals("lalala")||apiKey.equals("hahaha")){
+            return true;
+        }else{
+            return false;
+        }
+    }
 //
-//    public void log(String description) {
-//        MessageContext msgContext = wsContext.getMessageContext();
-//        HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.ws.http.exchange");
-//        String ip = httpExchange.getRemoteAddress().getAddress().getHostAddress();
-//        String endpoint = httpExchange.getRequestURI().toString();
-//        LogModel logModel = new LogModel();
-//        String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-KEY");
-//        String desc = apiKey + ": " + description;
-//        logModel.InsertLog(desc, endpoint, ip);
-//    }
+    public void log(String description) {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        String ip = "123";
+        String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
+        Timestamp timestamp = new Timestamp(new Date().getTime());
+        LogModel logModel = new LogModel();
+        logModel.InsertLog(description, endpoint, ip, timestamp.toString());
+    }
 }
 
 // Database db = new Database();