Login display bug fixed
authorVásáry Dániel <vasary@elgekko.net>
Sun, 18 Feb 2024 23:31:30 +0000 (00:31 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Sun, 18 Feb 2024 23:31:30 +0000 (00:31 +0100)
lis-app/src/main/resources/application-dev.yaml
lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java
lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java
lis-ui/src/main/java/hu/user/lis/ui/auth/LocalAuthProvider.java
lis-ui/src/main/java/hu/user/lis/ui/session/SessionSettings.java
lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java

index 2bd643cdf0659c8314f82edb8bbccf53915d642b..958682345c47edb77dfff3bacf7269158fab9e46 100644 (file)
@@ -1,5 +1,5 @@
 server:
-  port: 8080
+  port: 8081
   servlet:
     context-path: /
 zk:
index 22b2a77e159b30b8e2416945b6bc6fd5eece78f7..bef741a0f8e0015576dc39e8becebdb2da0ec10a 100644 (file)
@@ -3,11 +3,10 @@ package hu.user.lis.ui.auth;
 import hu.user.lis.db.Associate;
 import hu.user.lis.db.Profile;
 import hu.user.lis.db.repository.ProfileRepository;
-import lombok.Getter;
+import hu.user.lis.ui.session.SessionSettings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -16,34 +15,50 @@ import java.util.stream.Collectors;
 @Service
 public class CurrentProfile {
 
+    public static final String ASSOCIATE = "ASSOCIATE";
+    public static final String SETTINGS = "SETTINGS";
     @Autowired
-    ProfileRepository profileRepository;
-    @Getter
-    Associate associate;
+    private ProfileRepository profileRepository;
 
-    @Getter
-    Map<String, Profile> settings = new HashMap<>();
+    @Autowired
+    private SessionSettings sessionSettings;
+
+
+    public Associate getAssociate() {
+        return (Associate) sessionSettings.getAttribute(ASSOCIATE);
+    }
+
+//    @Getter
+//    Map<String, Profile> settings = new HashMap<>();
 
     public void setAssociate(Associate associate) {
-        this.associate = associate;
+        sessionSettings.setAttribute(ASSOCIATE, associate);
         loadSettings();
     }
 
     private void loadSettings() {
-        List<Profile> profileSettings = profileRepository.findAllByLogin(associate.getLogin());
-        settings = profileSettings.stream().collect(Collectors.toMap(Profile::getType, p -> p));
+        if (Objects.isNull(getAssociate())) {
+            return;
+        }
+        List<Profile> profileSettings = profileRepository.findAllByLogin(getAssociate().getLogin());
+        Map<String, Profile> settings = profileSettings.stream().collect(Collectors.toMap(Profile::getType, p -> p));
+        sessionSettings.setAttribute(SETTINGS, settings);
     }
 
     public Profile getSetting(String type) {
+        Map<String, Profile> settings = (Map<String, Profile>) sessionSettings.getAttribute(SETTINGS);
         return settings.get(type);
     }
 
     public void persistSetting(Profile columnProfile) {
-        Profile existing = settings.get(columnProfile.getType());
+        Profile existing = getSetting(columnProfile.getType());
         if (Objects.nonNull(existing)) {
             columnProfile.setId(existing.getId());
         }
-        settings.put(columnProfile.getType(), columnProfile);
-        profileRepository.save(columnProfile);
+        Map<String, Profile> settings = (Map<String, Profile>) sessionSettings.getAttribute(SETTINGS);
+        if (Objects.nonNull(settings)) {
+            settings.put(columnProfile.getType(), columnProfile);
+            profileRepository.save(columnProfile);
+        }
     }
 }
index c286239f463222652f130d8d546f676175737494..52aa49fb649c592fd88f70620dfb3e05f17d4846 100644 (file)
@@ -7,11 +7,13 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.zkoss.zk.ui.Executions;
 import org.zkoss.zk.ui.Page;
+import org.zkoss.zk.ui.select.annotation.VariableResolver;
 import org.zkoss.zk.ui.util.Initiator;
 
 import java.util.Map;
 
 @Log4j2
+@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
 public class Guard implements Initiator {
     @Override
     public void doInit(Page page, Map<String, Object> args) throws Exception {
index 7aa5944506c129e165f105fb1f42ccecd4643089..a68eee48edf2de1444c09dcdc343b2442372573f 100644 (file)
@@ -11,16 +11,13 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.Objects;
 
 @Component
 public class LocalAuthProvider implements AuthenticationProvider {
     @Autowired
-    AssociateRepository associateRepository;
-
-    @Autowired
-    CurrentProfile currentProfile;
+    private AssociateRepository associateRepository;
 
     @Override
     public Authentication authenticate(Authentication authentication) throws AuthenticationException {
@@ -33,8 +30,7 @@ public class LocalAuthProvider implements AuthenticationProvider {
             associate = associateRepository.findByLoginAndPassword(name, password);
         }
         if (Objects.nonNull(associate)) {
-            result = new UsernamePasswordAuthenticationToken(name, password, Arrays.asList());
-            currentProfile.setAssociate(associate);
+            result = new UsernamePasswordAuthenticationToken(name, password, Collections.emptyList());
         } else {
             throw new BadCredentialsException("Local authentication failed!");
         }
index 92d28f92b8426a0d9db47ac503285c4b50421371..efb580967b5d8d9f5c2c5ce3104db9206c9d058c 100644 (file)
@@ -7,6 +7,7 @@ import org.zkoss.zk.ui.Sessions;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import java.util.Objects;
 
 @Service
 @Log4j2
@@ -21,6 +22,9 @@ public class SessionSettings {
     }
 
     private HttpSession getNativeSession() {
+        if (Objects.isNull(Sessions.getCurrent())) {
+            return null;
+        }
         return (HttpSession) Sessions.getCurrent().getNativeSession();
     }
 
@@ -30,10 +34,33 @@ public class SessionSettings {
     }
 
     public RuntimeException getLastSecurityException() {
+        if (Objects.isNull(getNativeSession())) {
+            return null;
+        }
         return (RuntimeException) getNativeSession().getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
     }
 
     public String getSessionId() {
+        if (Objects.isNull(getNativeSession())) {
+            return null;
+        }
         return getNativeSession().getId();
     }
+
+
+    public void setAttribute(String name, Object obj) {
+        HttpSession session = getNativeSession();
+        if (Objects.isNull(session)) {
+            return;
+        }
+        session.setAttribute(name, obj);
+    }
+
+    public Object getAttribute(String name) {
+        HttpSession session = getNativeSession();
+        if (Objects.isNull(session)) {
+            return null;
+        }
+        return session.getAttribute(name);
+    }
 }
index 92bad7577e96c80ede68d193eb6b973b0e60918b..5a6228aecd801c8fa65febae79de44dadeda5391 100644 (file)
@@ -1,6 +1,8 @@
 package hu.user.lis.ui.view;
 
 import com.google.common.collect.ImmutableMap;
+import hu.user.lis.db.Associate;
+import hu.user.lis.db.repository.AssociateRepository;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.auth.CurrentProfile;
 import hu.user.lis.ui.editor.common.Editors;
@@ -11,6 +13,8 @@ import hu.user.lis.workflow.invoice.service.WorkflowManagerService;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.zkoss.bind.BindUtils;
 import org.zkoss.bind.annotation.BindingParam;
 import org.zkoss.bind.annotation.Command;
@@ -24,6 +28,7 @@ import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zk.ui.util.Notification;
 
 import java.util.Map;
+import java.util.Objects;
 
 
 @Log4j2
@@ -69,6 +74,9 @@ public class IndexViewModel implements EventListener<Event> {
     @WireVariable
     private CurrentProfile currentProfile;
 
+    @WireVariable
+    private AssociateRepository associateRepository;
+
     @WireVariable
     private WorkflowManagerService workflowManagerService;
     private String searchPhrase;
@@ -98,6 +106,19 @@ public class IndexViewModel implements EventListener<Event> {
         log.info("2. Current session is {} path {}", sessionSettings.getSessionId(), path);
         route(path);
         updateImportInvoiceMenus(null);
+
+        loadUserSettings();
+    }
+
+    private void loadUserSettings() {
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        Associate associate = currentProfile.getAssociate();
+        if (Objects.isNull(associate)) {
+            associate = associateRepository.findByLogin((String) authentication.getPrincipal());
+        }
+        if (Objects.nonNull(associate)) {
+            currentProfile.setAssociate(associate);
+        }
     }
 
     private void route(String path) {