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