server:
- port: 8080
+ port: 8081
servlet:
context-path: /
zk:
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;
@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);
+ }
}
}
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 {
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 {
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!");
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import java.util.Objects;
@Service
@Log4j2
}
private HttpSession getNativeSession() {
+ if (Objects.isNull(Sessions.getCurrent())) {
+ return null;
+ }
return (HttpSession) Sessions.getCurrent().getNativeSession();
}
}
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);
+ }
}
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;
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;
import org.zkoss.zk.ui.util.Notification;
import java.util.Map;
+import java.util.Objects;
@Log4j2
@WireVariable
private CurrentProfile currentProfile;
+ @WireVariable
+ private AssociateRepository associateRepository;
+
@WireVariable
private WorkflowManagerService workflowManagerService;
private String searchPhrase;
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) {