Optimalizace načítání dat z databáze. Joinované kolekce lze označit jako
lazy. Do servisní vrstvy se pak implementuje transakční metoda s anotací LazyLoader, která donačte kolekci.multitenant
parent
5b69b04264
commit
a32451167d
@ -0,0 +1,59 @@
|
||||
package info.bukova.isspst;
|
||||
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.data.User;
|
||||
import info.bukova.isspst.data.Workgroup;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class SessionData implements Serializable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -764426911263559758L;
|
||||
|
||||
private List<Workgroup> userCentres;
|
||||
private List<Workgroup> userWorkgroups;
|
||||
private User currentUser;
|
||||
private Map<Integer, List<Role>> workgroupRoles;
|
||||
|
||||
public SessionData() {
|
||||
|
||||
}
|
||||
|
||||
public List<Workgroup> getUserCentres() {
|
||||
return userCentres;
|
||||
}
|
||||
|
||||
public void setUserCentres(List<Workgroup> userCentres) {
|
||||
this.userCentres = userCentres;
|
||||
}
|
||||
|
||||
public List<Workgroup> getUserWorkgroups() {
|
||||
return userWorkgroups;
|
||||
}
|
||||
|
||||
public void setUserWorkgroups(List<Workgroup> userWorkgroups) {
|
||||
this.userWorkgroups = userWorkgroups;
|
||||
}
|
||||
|
||||
public User getCurrentUser() {
|
||||
return currentUser;
|
||||
}
|
||||
|
||||
public void setCurrentUser(User currentUser) {
|
||||
this.currentUser = currentUser;
|
||||
}
|
||||
|
||||
public Map<Integer, List<Role>> getWorkgroupRoles() {
|
||||
return workgroupRoles;
|
||||
}
|
||||
|
||||
public void setWorkgroupRoles(Map<Integer, List<Role>> workgroupRoles) {
|
||||
this.workgroupRoles = workgroupRoles;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package info.bukova.isspst.security;
|
||||
|
||||
import info.bukova.isspst.SessionData;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.data.User;
|
||||
import info.bukova.isspst.data.Workgroup;
|
||||
import info.bukova.isspst.services.users.UserService;
|
||||
import info.bukova.isspst.services.workgroups.WorkgroupService;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
|
||||
|
||||
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
|
||||
|
||||
@Autowired
|
||||
private SessionData sessionData;
|
||||
@Autowired
|
||||
private WorkgroupService workgroupService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(LoginSuccessHandler.class);
|
||||
|
||||
@Override
|
||||
public void onAuthenticationSuccess(HttpServletRequest request,
|
||||
HttpServletResponse response, Authentication auth) throws IOException,
|
||||
ServletException {
|
||||
|
||||
User u = (User) userService.loadUserByUsername(((User)auth.getPrincipal()).getUsername());
|
||||
|
||||
logger.info("User " + u.getUsername() + " logged in");
|
||||
|
||||
sessionData.setUserCentres(workgroupService.getUserCentres((User) auth.getPrincipal()));
|
||||
sessionData.setUserWorkgroups(workgroupService.getUserWorkgroups((User) auth.getPrincipal()));
|
||||
workgroupService.loadParents(u);
|
||||
sessionData.setCurrentUser(u);
|
||||
|
||||
Map<Integer, List<Role>> wgRoles = new HashMap<Integer, List<Role>>();
|
||||
for (Workgroup w : u.getParents()) {
|
||||
wgRoles.put(w.getId(), workgroupService.getUserWorkgroupRoles(w, u));
|
||||
}
|
||||
sessionData.setWorkgroupRoles(wgRoles);
|
||||
|
||||
response.sendRedirect("app/");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
|
||||
public class LazyLoadException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = -2251676786418660140L;
|
||||
|
||||
public LazyLoadException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface LazyLoader {
|
||||
String[] value() default "";
|
||||
}
|
Loading…
Reference in New Issue