From 80cdc410c5ef6eefc25aa10b6b1726f0c1b7c04f Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Mon, 19 Feb 2024 00:31:30 +0100 Subject: [PATCH] Login display bug fixed --- .../src/main/resources/application-dev.yaml | 2 +- .../hu/user/lis/ui/auth/CurrentProfile.java | 41 +++++++++++++------ .../main/java/hu/user/lis/ui/auth/Guard.java | 2 + .../user/lis/ui/auth/LocalAuthProvider.java | 10 ++--- .../user/lis/ui/session/SessionSettings.java | 27 ++++++++++++ .../hu/user/lis/ui/view/IndexViewModel.java | 21 ++++++++++ 6 files changed, 82 insertions(+), 21 deletions(-) diff --git a/lis-app/src/main/resources/application-dev.yaml b/lis-app/src/main/resources/application-dev.yaml index 2bd643c..9586823 100644 --- a/lis-app/src/main/resources/application-dev.yaml +++ b/lis-app/src/main/resources/application-dev.yaml @@ -1,5 +1,5 @@ server: - port: 8080 + port: 8081 servlet: context-path: / zk: diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java index 22b2a77..bef741a 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java @@ -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 settings = new HashMap<>(); + @Autowired + private SessionSettings sessionSettings; + + + public Associate getAssociate() { + return (Associate) sessionSettings.getAttribute(ASSOCIATE); + } + +// @Getter +// Map settings = new HashMap<>(); public void setAssociate(Associate associate) { - this.associate = associate; + sessionSettings.setAttribute(ASSOCIATE, associate); loadSettings(); } private void loadSettings() { - List profileSettings = profileRepository.findAllByLogin(associate.getLogin()); - settings = profileSettings.stream().collect(Collectors.toMap(Profile::getType, p -> p)); + if (Objects.isNull(getAssociate())) { + return; + } + List profileSettings = profileRepository.findAllByLogin(getAssociate().getLogin()); + Map settings = profileSettings.stream().collect(Collectors.toMap(Profile::getType, p -> p)); + sessionSettings.setAttribute(SETTINGS, settings); } public Profile getSetting(String type) { + Map settings = (Map) 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 settings = (Map) sessionSettings.getAttribute(SETTINGS); + if (Objects.nonNull(settings)) { + settings.put(columnProfile.getType(), columnProfile); + profileRepository.save(columnProfile); + } } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java index c286239..52aa49f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java @@ -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 args) throws Exception { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/LocalAuthProvider.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/LocalAuthProvider.java index 7aa5944..a68eee4 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/LocalAuthProvider.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/LocalAuthProvider.java @@ -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!"); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/session/SessionSettings.java b/lis-ui/src/main/java/hu/user/lis/ui/session/SessionSettings.java index 92d28f9..efb5809 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/session/SessionSettings.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/session/SessionSettings.java @@ -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); + } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java index 92bad75..5a6228a 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java @@ -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 { @WireVariable private CurrentProfile currentProfile; + @WireVariable + private AssociateRepository associateRepository; + @WireVariable private WorkflowManagerService workflowManagerService; private String searchPhrase; @@ -98,6 +106,19 @@ public class IndexViewModel implements EventListener { 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) { -- 2.54.0