diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
index 65d544c..7972ecb 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
@@ -8,7 +8,6 @@
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 @SpringBootApplication
-@EnableSwagger2
 @EnableFeignClients
 @EnableJpaAuditing(modifyOnCreate=true, auditorAwareRef="auditProvider")
 @EnableConfigurationProperties
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/api/AuthNAuthApi.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/api/AuthNAuthApi.java
index 21467a4..520575f 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/api/AuthNAuthApi.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/api/AuthNAuthApi.java
@@ -15,17 +15,30 @@
 package org.eclipse.openk.gridfailureinformation.api;
 
 
+import org.eclipse.openk.gridfailureinformation.model.JwtToken;
+import org.eclipse.openk.gridfailureinformation.model.LoginCredentials;
+import org.eclipse.openk.gridfailureinformation.viewmodel.UserModulePortalDto;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 
+import java.util.List;
+
 @FeignClient(name = "${services.authNAuth.name}")
 public interface AuthNAuthApi {
 
     @GetMapping(value= "/portal/rest/beservice/checkAuth")
     feign.Response isTokenValid(@RequestHeader("Authorization") String token);
 
+    @PostMapping( value="/portal/rest/beservice/login")
+    JwtToken login(@RequestBody LoginCredentials loginCredentials);
+
     @GetMapping( value="/portal/rest/beservice/logout")
     feign.Response logout(@RequestHeader("Authorization") String token);
 
+    @GetMapping( value="/portal/rest/beservice/userModulesForUser")
+    List<UserModulePortalDto> userModulesForUser(@RequestHeader("Authorization") String token);
+
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/LogoutController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AuthNAuthController.java
similarity index 62%
rename from gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/LogoutController.java
rename to gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AuthNAuthController.java
index cdfb5f1..e391f56 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/LogoutController.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AuthNAuthController.java
@@ -18,29 +18,41 @@
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.log4j.Log4j2;
-import org.eclipse.openk.gridfailureinformation.service.LogoutService;
+import org.eclipse.openk.gridfailureinformation.service.AuthNAuthService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.annotation.Secured;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.UUID;
+
 @Log4j2
 @RestController
-@RequestMapping("/logout")
-public class LogoutController {
+public class AuthNAuthController {
 
     @Autowired
-    private LogoutService logoutService;
+    private AuthNAuthService authNAuthService;
 
     @ApiOperation(value = "Logout vom Auth-und-Auth-Modul")
     @ApiResponses(value = {@ApiResponse(code = 204, message = "Erfolgreich durchgeführt")})
-    @GetMapping
+    @GetMapping("/logout")
     @Secured({"ROLE_GRID-FAILURE-ADMIN", "ROLE_GRID-FAILURE-READER", "ROLE_GRID-FAILURE-CREATOR", "ROLE_GRID-FAILURE-QUALIFIER", "ROLE_GRID-FAILURE-PUBLISHER"})
     public ResponseEntity logout() {
-        logoutService.logout();
+        authNAuthService.logout();
         return ResponseEntity.ok().build();
     }
 
+    @ApiOperation(value = "Test für GetDirectMeasureLink")
+    @ApiResponses(value = {@ApiResponse(code = 204, message = "Erfolgreich durchgeführt")})
+    @GetMapping("/test-directmeasurelink/{uuid}")
+    @Secured({"ROLE_GRID-FAILURE-ADMIN", "ROLE_GRID-FAILURE-READER", "ROLE_GRID-FAILURE-CREATOR", "ROLE_GRID-FAILURE-QUALIFIER", "ROLE_GRID-FAILURE-PUBLISHER"})
+    public ResponseEntity testGetDirectMeasureLink(HttpServletRequest request, @PathVariable UUID uuid) {
+        String directMeasureLink = authNAuthService.getDirectMeasureLink(uuid.toString());
+        return ResponseEntity.ok(directMeasureLink);
+    }
+
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/LoginCredentials.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/LoginCredentials.java
new file mode 100644
index 0000000..95fc662
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/LoginCredentials.java
@@ -0,0 +1,41 @@
+/**
+******************************************************************************
+* Copyright © 2017-2018 PTA GmbH.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* 
+*     http://www.eclipse.org/legal/epl-v10.html
+* 
+******************************************************************************
+*/
+package org.eclipse.openk.gridfailureinformation.model;
+
+public class LoginCredentials {
+    private String userName;
+    private String password;
+
+    public LoginCredentials() {
+    }
+
+    public LoginCredentials(String userName, String password) {
+        this.userName = userName;
+        this.password = password;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AuthNAuthService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AuthNAuthService.java
new file mode 100644
index 0000000..ab913f4
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AuthNAuthService.java
@@ -0,0 +1,110 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+package org.eclipse.openk.gridfailureinformation.service;
+
+import feign.Response;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.api.AuthNAuthApi;
+import org.eclipse.openk.gridfailureinformation.model.JwtToken;
+import org.eclipse.openk.gridfailureinformation.model.LoginCredentials;
+import org.eclipse.openk.gridfailureinformation.viewmodel.UserModulePortalDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+@Log4j2
+@Service
+public class AuthNAuthService {
+
+    @Autowired
+    AuthNAuthApi authNAuthApi;
+
+    @Value(("${portalFeLoginURL}"))
+    private String portalFeLoginUrl;
+
+    @Value(("${portalFeModulename}"))
+    private String portalFeModulename;
+
+    @Value("${services.authNAuth.technical-username}")
+    private String technicalUsername;
+
+    @Value("${services.authNAuth.technical-userpassword}")
+    private String technicalUserPassword;
+
+    private String portalFeUrl;
+
+    public List<UserModulePortalDto> getUserModulePortalList() {
+        LoginCredentials loginCredentials = new LoginCredentials(technicalUsername, technicalUserPassword);
+        JwtToken jwtToken = authNAuthApi.login(loginCredentials);
+        List<UserModulePortalDto> usemodulePortalLists = authNAuthApi.userModulesForUser(jwtToken.getAccessToken());
+        authNAuthApi.logout(jwtToken.getAccessToken());
+        return usemodulePortalLists;
+    }
+
+    public void logout() {
+        String bearerToken = (String) SecurityContextHolder.getContext().getAuthentication().getDetails();
+        authNAuthApi.logout(bearerToken);
+    }
+
+    public String getDirectMeasureLink(String gfiUUID) {
+        // Example Link old: http://localhost:4220/#/gridMeasureDetail/5/edit?fwdUrl=http%3A%2F%2Flocalhost%3A4201%2F%23%2Flogin%3FfwdUrl%3Dhttp%3A%2F%2Flocalhost%3A4220%2F%26fwdId%3D5
+        // new: http://entdockergss:4223/grid-failures/6432a9c9-0384-44af-9bb8-34f2878d7b49?fwdUrl=http%3A%2F%2Flocalhost%3A4201%2F%23%2Flogin%3FfwdUrl%3Dhttp%3A%2F%2Flocalhost%3A4220%2F%26fwdId%3D5
+
+        String stdGridmeasureURL = portalFeUrl + "/grid-failures/" + gfiUUID;
+        String fwdURL = "fwdUrl=" + portalFeUrl + "&fwdId=" + gfiUUID;
+        String fwdURLEncoded = "";
+        String finalFwdUrl = portalFeLoginUrl + "?" + fwdURL;
+        try {
+            fwdURLEncoded = URLEncoder.encode(finalFwdUrl, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            log.error("Error in getDirectMeasureLink", e);
+            return "";
+        }
+
+        return stdGridmeasureURL + "?fwdUrl=" + fwdURLEncoded;
+    }
+
+    //Startet erst nachdem die Applikation komplett geladen ist (ApplicationReadyEvent)
+    @EventListener
+    public void onApplicationEvent(ApplicationReadyEvent event) {
+        initPortalFeUrl();
+    }
+
+    public void initPortalFeUrl()  {
+                List<UserModulePortalDto> userModulePortalList = getUserModulePortalList();
+                portalFeUrl = extractPortalFE(userModulePortalList);
+    }
+
+    private String extractPortalFE(List<UserModulePortalDto> userModulePortalList ) {
+        String portalFeURL = "<PortalFE-URL>";
+        for (UserModulePortalDto userModulePortal : userModulePortalList) {
+            if (userModulePortal.getName().equalsIgnoreCase(portalFeModulename)){
+                portalFeURL = userModulePortal.getLink();
+                break;
+            }
+        }
+
+        return portalFeURL;
+    }
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
index 4d2c44a..aae6f5b 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
@@ -33,6 +33,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -88,7 +90,8 @@
     @Autowired
     private ResourceConfig resourceConfig;
 
-    private @Autowired Environment environment;
+    @Autowired
+    AuthNAuthService authNAuthService;
 
     private static final String SUBJECT_DATE_PATTERN_APPLIED = "EEEE', den' dd.MM.yy 'um' HH:mm:ss";
     protected Map<String,String> contentReplaceMap;
@@ -407,6 +410,10 @@
         if (radius != null) {
             contentReplaceMap.put(placeholderDto.getRadius(), radius.getRadius().toString());
         }
+
+        String directFailureLink = authNAuthService.getDirectMeasureLink(tblFailureInfo.getUuid().toString());
+        contentReplaceMap.put(placeholderDto.getDirectFailureLink(), directFailureLink);
+
     }
 
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/LogoutService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/LogoutService.java
deleted file mode 100644
index e6c8dcb..0000000
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/LogoutService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (c) 2019 Contributors to the Eclipse Foundation
- *
- * See the NOTICE file(s) distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *******************************************************************************
-*/
-package org.eclipse.openk.gridfailureinformation.service;
-
-import org.eclipse.openk.gridfailureinformation.api.AuthNAuthApi;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Service;
-
-@Service
-public class LogoutService {
-    @Autowired
-    AuthNAuthApi authNAuthApi;
-
-    public void logout() {
-        String bearerToken = (String) SecurityContextHolder.getContext().getAuthentication().getDetails();
-        authNAuthApi.logout(bearerToken);
-    }
-}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionTextPlaceholderDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionTextPlaceholderDto.java
index 9682d1d..e36d967 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionTextPlaceholderDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/DistributionTextPlaceholderDto.java
@@ -46,4 +46,6 @@
     private String stationDescription;
     private String radius;
 
+    private String directFailureLink;
+
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/UserModulePortalDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/UserModulePortalDto.java
new file mode 100644
index 0000000..505471a
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/UserModulePortalDto.java
@@ -0,0 +1,30 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.viewmodel;
+
+import lombok.Data;
+
+@Data
+public class UserModulePortalDto {
+
+    private String name;
+    private Integer cols;
+    private Integer rows;
+    private String color;
+    private String link;
+    private String pictureLink;
+    private String requiredRole;
+
+}
diff --git a/gfsBackendService/src/main/resources/DistributionTextPlaceholder.json b/gfsBackendService/src/main/resources/DistributionTextPlaceholder.json
index 4b42964..dcd2449 100644
--- a/gfsBackendService/src/main/resources/DistributionTextPlaceholder.json
+++ b/gfsBackendService/src/main/resources/DistributionTextPlaceholder.json
@@ -18,5 +18,7 @@
   "street": "$Straße$",
   "housenumber": "$Hausnummer$",
   "stationDescription": "$Station_Bezeichnung$",
-  "radius": "$Radius$"
+  "radius": "$Radius$",
+  "directFailureLink": "$Direkter_Link_zur_Störung$"
+
 }
diff --git a/gfsBackendService/src/main/resources/application.yml b/gfsBackendService/src/main/resources/application.yml
index 6ebc693..43020f3 100644
--- a/gfsBackendService/src/main/resources/application.yml
+++ b/gfsBackendService/src/main/resources/application.yml
@@ -69,6 +69,8 @@
 services:
   authNAuth:
     name: authNAuthService
+    technical-username: admin_technical_portal
+    technical-userpassword: admin_technical_portal
   contacts:
     name: contactService
     communicationType:
@@ -76,6 +78,8 @@
     useModuleNameForFilter: false
     moduleName: Störungsinformationstool
 
+portalFeLoginURL: http://entopkon:8880/portalFE/#/login
+portalFeModulename: SIT DEV
 authNAuthService:
   ribbon:
     listOfServers: http://entopkon:8880
@@ -295,9 +299,13 @@
   useStaticJwt: false
   staticJwt: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJIYlI3Z2pobmE2eXJRZnZJTWhUSV9tY2g3ZmtTQWVFX3hLTjBhZVl0bjdjIn0.eyJqdGkiOiJlMmQ2YjE3Zi1iMWUyLTQxMzUtOTM1YS0zOWRiMmFkMzE5MjYiLCJleHAiOjE1ODYwMTI1MzUsIm5iZiI6MCwiaWF0IjoxNTg2MDEyMjM1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvRWxvZ2Jvb2siLCJhdWQiOiJlbG9nYm9vay1iYWNrZW5kIiwic3ViIjoiMzMzMmRmOWItYmYyMy00Nzg5LThmMmQtM2JhZTM2MzA4YzNkIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZWxvZ2Jvb2stYmFja2VuZCIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjYxMzRmN2RhLTdlNjQtNDJjNy05NjYyLTY0ZGNhZTk1MjQ5YSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZ3JpZC1mYWlsdXJlLXF1YWxpZmllciIsImdyaWQtZmFpbHVyZS1jcmVhdG9yIiwiZ3JpZC1mYWlsdXJlLWFjY2VzcyIsImdyaWQtZmFpbHVyZS1hZG1pbiIsImdyaWQtZmFpbHVyZS1wdWJsaXNoZXIiXX0sInJlc291cmNlX2FjY2VzcyI6e30sIm5hbWUiOiJTdGF0aWMgSldUIiwicHJlZmVycmVkX3VzZXJuYW1lIjoidGVzdHVzZXJfZ2ZpX3N0YXRpY2p3dCIsImdpdmVuX25hbWUiOiJTdGF0aWMiLCJmYW1pbHlfbmFtZSI6IkpXVCJ9.SWpekZHxlDNWbaaZ2fHlts00c1Xi6yIb0ZMr9f8ujSI_6LVYuHx8FTt6g9tinyVcx5gQKfrooRW28Cdq1EVuexNtTtZ7ciKk4iEo_kgqUgRvHCwO7HQl2igpoGErheYD0kj3-u4Te6NPHKtXWIEfGyl0ZQBD2c4vtaCTQAy5Ilb146G7p_IcLYaZgpJPlGG0Bf2oZ0UqTQsrXxRJkXWARDz8D4lIrN84lAbqNlPlSZDN-8xp_z6mXgWpvgeZuFoYHItJMg2cjR0SXH-ycbWVXctRNQJfTWR0acIhp_nB_Xe6JlUx2vls99EVw-WUrd0hc8Y9658HdeyktvpQLDxP2g
 
+portalFeLoginURL: http://169.50.13.154/portalFE/#/login
+portalFeModulename: Störungsinformationstool
 services:
   authNAuth:
     name: authNAuthService
+    technical-username: admin_technical_portal
+    technical-userpassword: admin_technical_portal
   contacts:
     name: contactService
     communicationType:
diff --git a/gfsBackendService/src/main/resources/application_localdev.yml b/gfsBackendService/src/main/resources/application_localdev.yml
index d1933e7..a95e3dc 100644
--- a/gfsBackendService/src/main/resources/application_localdev.yml
+++ b/gfsBackendService/src/main/resources/application_localdev.yml
@@ -73,13 +73,17 @@
 services:
   authNAuth:
     name: authNAuthService
+    technical-username: admin_technical_portal
+    technical-userpassword: admin_technical_portal
   contacts:
     name: contactService
     communicationType:
       mobile: Mobil
     useModuleNameForFilter: false
-    moduleName: Störungsinformationstool DEV
+    moduleName: Störungsinformationstool
 
+portalFeLoginURL: http://entopkon:8880/portalFE/#/login
+portalFeModulename: SIT DEV
 authNAuthService:
   ribbon:
     listOfServers: http://entopkon:8880
@@ -134,6 +138,3 @@
       - name: Störungsauskunft.de
         exportQueue: sit_stoerungsauskunft_export_queue_localdev
         exportKey: sit_stoerungsauskunft_export_key_localdev
-#jwt:
-#  tokenHeader: Authorization
-#  useStaticJwt: false
\ No newline at end of file
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
index cf7525c..5d2a52c 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
@@ -16,6 +16,7 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.eclipse.openk.gridfailureinformation.GridFailureInformationApplication;
+import org.eclipse.openk.gridfailureinformation.api.AuthNAuthApi;
 import org.eclipse.openk.gridfailureinformation.api.ContactApi;
 import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiGrid;
@@ -24,6 +25,7 @@
 import org.eclipse.openk.gridfailureinformation.config.rabbitMq.RabbitMqConfig;
 import org.eclipse.openk.gridfailureinformation.config.rabbitMq.RabbitMqProperties;
 import org.eclipse.openk.gridfailureinformation.mapper.*;
+import org.eclipse.openk.gridfailureinformation.model.JwtToken;
 import org.eclipse.openk.gridfailureinformation.service.*;
 import org.eclipse.openk.gridfailureinformation.util.ImportDataValidator;
 import org.mockito.Mockito;
@@ -33,6 +35,7 @@
 import org.springframework.amqp.rabbit.core.RabbitAdmin;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer;
 import org.springframework.context.annotation.Bean;
@@ -41,6 +44,7 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.when;
 
@@ -50,6 +54,9 @@
 @TestPropertySource("spring.config.location=classpath:application.yml")
 public class TestConfiguration {
 
+    @Value("${jwt.staticJwt}")
+    private String staticJwt;
+
     @Bean
     SettingsService settingsService(){return new SettingsService();}
 
@@ -90,7 +97,17 @@
         return Mockito.mock(RabbitMqProperties.class);
     }
 
+    @Bean
+    AuthNAuthService authNAuthService(){return new AuthNAuthService();}
 
+    @Bean
+    AuthNAuthApi authNAuthApi(){
+        AuthNAuthApi authNAuthApiMock = Mockito.mock(AuthNAuthApi.class);
+        JwtToken jwtToken = new JwtToken();
+        jwtToken.setAccessToken(staticJwt);
+        when(authNAuthApiMock.login(any())).thenReturn(jwtToken);
+        return authNAuthApiMock;
+    }
 
     @Bean
     ResourceConfig resourceConfig(){return new ResourceConfig();}
