mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	Fixes LazyInitializationException in User entity (#1749)
Temp integration of playground dist files of pdfme as-is to investigate the result
This commit is contained in:
		
							parent
							
								
									33c7bb7e13
								
							
						
					
					
						commit
						0854a1d26e
					
				| @ -1,13 +1,5 @@ | ||||
| package stirling.software.SPDF.config.security; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.Collection; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import java.util.UUID; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.MessageSource; | ||||
| import org.springframework.context.i18n.LocaleContextHolder; | ||||
| @ -21,7 +13,6 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||||
| import org.springframework.security.crypto.password.PasswordEncoder; | ||||
| import org.springframework.security.oauth2.core.user.OAuth2User; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| import stirling.software.SPDF.config.DatabaseBackupInterface; | ||||
| import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; | ||||
| import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; | ||||
| @ -32,6 +23,10 @@ import stirling.software.SPDF.model.User; | ||||
| import stirling.software.SPDF.repository.AuthorityRepository; | ||||
| import stirling.software.SPDF.repository.UserRepository; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.*; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| @Service | ||||
| public class UserService implements UserServiceInterface { | ||||
| 
 | ||||
| @ -221,7 +216,7 @@ public class UserService implements UserServiceInterface { | ||||
| 
 | ||||
|     public void updateUserSettings(String username, Map<String, String> updates) | ||||
|             throws IOException { | ||||
|         Optional<User> userOpt = findByUsernameIgnoreCase(username); | ||||
|         Optional<User> userOpt = findByUsernameIgnoreCaseWithSettings(username); | ||||
|         if (userOpt.isPresent()) { | ||||
|             User user = userOpt.get(); | ||||
|             Map<String, String> settingsMap = user.getSettings(); | ||||
| @ -246,6 +241,10 @@ public class UserService implements UserServiceInterface { | ||||
|         return userRepository.findByUsernameIgnoreCase(username); | ||||
|     } | ||||
| 
 | ||||
|     public Optional<User> findByUsernameIgnoreCaseWithSettings(String username) { | ||||
|         return userRepository.findByUsernameIgnoreCaseWithSettings(username); | ||||
|     } | ||||
| 
 | ||||
|     public Authority findRole(User user) { | ||||
|         return authorityRepository.findByUserId(user.getId()); | ||||
|     } | ||||
|  | ||||
| @ -1,15 +1,10 @@ | ||||
| package stirling.software.SPDF.controller.web; | ||||
| 
 | ||||
| import java.time.Instant; | ||||
| import java.time.temporal.ChronoUnit; | ||||
| import java.util.Date; | ||||
| import java.util.HashMap; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| import jakarta.servlet.http.HttpServletRequest; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.security.core.Authentication; | ||||
| @ -18,27 +13,20 @@ import org.springframework.security.oauth2.core.user.OAuth2User; | ||||
| import org.springframework.stereotype.Controller; | ||||
| import org.springframework.ui.Model; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| 
 | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| 
 | ||||
| import jakarta.servlet.http.HttpServletRequest; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; | ||||
| import stirling.software.SPDF.model.ApplicationProperties; | ||||
| import stirling.software.SPDF.model.*; | ||||
| import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; | ||||
| import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client; | ||||
| import stirling.software.SPDF.model.Authority; | ||||
| import stirling.software.SPDF.model.Role; | ||||
| import stirling.software.SPDF.model.SessionEntity; | ||||
| import stirling.software.SPDF.model.User; | ||||
| import stirling.software.SPDF.model.provider.GithubProvider; | ||||
| import stirling.software.SPDF.model.provider.GoogleProvider; | ||||
| import stirling.software.SPDF.model.provider.KeycloakProvider; | ||||
| import stirling.software.SPDF.repository.UserRepository; | ||||
| 
 | ||||
| import java.time.Instant; | ||||
| import java.time.temporal.ChronoUnit; | ||||
| import java.util.*; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| @Controller | ||||
| @Slf4j | ||||
| @Tag(name = "Account Security", description = "Account Security APIs") | ||||
| @ -361,7 +349,7 @@ public class AccountWebController { | ||||
|             if (username != null) { | ||||
|                 // Fetch user details from the database | ||||
|                 Optional<User> user = | ||||
|                         userRepository.findByUsernameIgnoreCase( | ||||
|                         userRepository.findByUsernameIgnoreCaseWithSettings( | ||||
|                                 username); // Assuming findByUsername method exists | ||||
|                 if (!user.isPresent()) { | ||||
|                     return "redirect:/error"; | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| package stirling.software.SPDF.model; | ||||
| 
 | ||||
| import jakarta.persistence.*; | ||||
| 
 | ||||
| import java.io.Serializable; | ||||
| import java.util.HashMap; | ||||
| import java.util.HashSet; | ||||
| @ -7,21 +9,6 @@ import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| import jakarta.persistence.CascadeType; | ||||
| import jakarta.persistence.CollectionTable; | ||||
| import jakarta.persistence.Column; | ||||
| import jakarta.persistence.ElementCollection; | ||||
| import jakarta.persistence.Entity; | ||||
| import jakarta.persistence.FetchType; | ||||
| import jakarta.persistence.GeneratedValue; | ||||
| import jakarta.persistence.GenerationType; | ||||
| import jakarta.persistence.Id; | ||||
| import jakarta.persistence.JoinColumn; | ||||
| import jakarta.persistence.Lob; | ||||
| import jakarta.persistence.MapKeyColumn; | ||||
| import jakarta.persistence.OneToMany; | ||||
| import jakarta.persistence.Table; | ||||
| 
 | ||||
| @Entity | ||||
| @Table(name = "users") | ||||
| public class User implements Serializable { | ||||
| @ -57,7 +44,7 @@ public class User implements Serializable { | ||||
|     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user") | ||||
|     private Set<Authority> authorities = new HashSet<>(); | ||||
| 
 | ||||
|     @ElementCollection(fetch = FetchType.EAGER) | ||||
|     @ElementCollection | ||||
|     @MapKeyColumn(name = "setting_key") | ||||
|     @Lob | ||||
|     @Column(name = "setting_value", columnDefinition = "CLOB") | ||||
|  | ||||
| @ -1,16 +1,19 @@ | ||||
| package stirling.software.SPDF.repository; | ||||
| 
 | ||||
| import java.util.Optional; | ||||
| 
 | ||||
| import org.springframework.data.jpa.repository.JpaRepository; | ||||
| import org.springframework.data.jpa.repository.Query; | ||||
| import org.springframework.stereotype.Repository; | ||||
| 
 | ||||
| import stirling.software.SPDF.model.User; | ||||
| 
 | ||||
| import java.util.Optional; | ||||
| 
 | ||||
| @Repository | ||||
| public interface UserRepository extends JpaRepository<User, Long> { | ||||
|     Optional<User> findByUsernameIgnoreCase(String username); | ||||
| 
 | ||||
|     @Query("FROM User u LEFT JOIN FETCH u.settings where upper(u.username) = upper(:username)") | ||||
|     Optional<User> findByUsernameIgnoreCaseWithSettings(String username); | ||||
| 
 | ||||
|     Optional<User> findByUsername(String username); | ||||
| 
 | ||||
|     Optional<User> findByApiKey(String apiKey); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user