diff --git a/pom.xml b/pom.xml index 52f316f..8ee1fee 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ucles.weblab weblab-spring-boot pom - 0.5-SNAPSHOT + 2.0.0-SNAPSHOT weblab-spring-boot-starter @@ -18,8 +18,9 @@ - 0.5-SNAPSHOT - 1.5.3.RELEASE + 2.0.0-SNAPSHOT + 2.0.2.RELEASE + 1.0.9.RELEASE 5.19.0.1 1.8 UTF-8 diff --git a/weblab-spring-boot-autoconfiguration/pom.xml b/weblab-spring-boot-autoconfiguration/pom.xml index d2df88d..a79db72 100644 --- a/weblab-spring-boot-autoconfiguration/pom.xml +++ b/weblab-spring-boot-autoconfiguration/pom.xml @@ -5,7 +5,7 @@ weblab-spring-boot ucles.weblab - 0.5-SNAPSHOT + 2.0.0-SNAPSHOT 4.0.0 @@ -36,11 +36,6 @@ hibernate-entitymanager true - - ucles.weblab - weblab-files - true - ucles.weblab weblab-audit diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/feedback/FeedbackAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/feedback/FeedbackAutoConfiguration.java index 8a4406a..8ae9689 100644 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/feedback/FeedbackAutoConfiguration.java +++ b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/feedback/FeedbackAutoConfiguration.java @@ -8,8 +8,8 @@ import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters; diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesAutoConfiguration.java deleted file mode 100644 index db52b57..0000000 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesAutoConfiguration.java +++ /dev/null @@ -1,54 +0,0 @@ -package ucles.weblab.common.config.files; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import ucles.weblab.common.files.domain.AesGcmEncryptionStrategy; -import ucles.weblab.common.files.domain.AutoPurgeSecureFileCollectionServiceImpl; -import ucles.weblab.common.files.domain.DummyEncryptionStrategy; -import ucles.weblab.common.files.domain.EncryptionService; -import ucles.weblab.common.files.domain.EncryptionServiceImpl; -import ucles.weblab.common.files.domain.FilesBuilders; -import ucles.weblab.common.files.domain.SecureFileCollectionRepository; -import ucles.weblab.common.files.domain.SecureFileCollectionService; -import ucles.weblab.common.files.domain.SecureFileRepository; -import ucles.weblab.common.files.webapi.FileController; -import ucles.weblab.common.files.webapi.converter.FilesConverters; - -import java.util.Arrays; - -import static java.nio.charset.StandardCharsets.UTF_8; - -/** - * Auto-configuration for the files domain. - */ -@Configuration -@ConditionalOnClass({EncryptionService.class, SecureFileCollectionRepository.class}) -//@AutoConfigureAfter({FilesJpaAutoConfiguration.class, FilesS3AutoConfiguration.class}) -@Import({FilesConverters.class, FilesBuilders.class}) -@ComponentScan(basePackageClasses = FileController.class) -public class FilesAutoConfiguration { - - /*Optional property for AesGcmEncryptionStrategy*/ - @Value("${aad.string:}") - private String aadString; - - @Bean - @ConditionalOnProperty("files.security.secretkey") - @ConditionalOnMissingBean(EncryptionService.class) - public EncryptionService encryptionService(@Value("${files.security.secretkey}") String secretKey) { - return new EncryptionServiceImpl(Arrays.asList(new AesGcmEncryptionStrategy(aadString.isEmpty() ? null : aadString), - new DummyEncryptionStrategy()), - secretKey.getBytes(UTF_8)); - } - - @Bean - public SecureFileCollectionService secureFileCollectionService(SecureFileCollectionRepository secureFileCollectionRepository, SecureFileRepository secureFileRepository) { - return new AutoPurgeSecureFileCollectionServiceImpl(secureFileCollectionRepository, secureFileRepository); - } -} diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesJpaAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesJpaAutoConfiguration.java deleted file mode 100644 index f794cc8..0000000 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesJpaAutoConfiguration.java +++ /dev/null @@ -1,39 +0,0 @@ -package ucles.weblab.common.config.files; - -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import ucles.weblab.common.files.domain.FilesFactory; -import ucles.weblab.common.files.domain.jpa.FilesFactoryJpa; -import ucles.weblab.common.files.domain.jpa.SecureFileCollectionRepositoryJpa; -import ucles.weblab.common.files.domain.jpa.SecureFileEntityJpa; - -import javax.sql.DataSource; - -/** - * Auto-configuration for JPA support for file storage. - * - * @since 19/06/15 - */ -@Configuration -@AutoConfigureAfter({DataSourceAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class}) -@ConditionalOnBean(DataSource.class) -@ConditionalOnClass({JpaRepository.class, FilesFactory.class}) -@ConditionalOnProperty(prefix = "spring.data.jpa.repositories", name = "enabled", havingValue = "true", matchIfMissing = true) -@EnableJpaRepositories(basePackageClasses = {SecureFileCollectionRepositoryJpa.class}) -@EntityScan(basePackageClasses = {SecureFileEntityJpa.class, Jsr310JpaConverters.class}) -public class FilesJpaAutoConfiguration { - @Bean - public FilesFactory filesFactoryJpa() { - return new FilesFactoryJpa(); - } -} diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesMongoAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesMongoAutoConfiguration.java deleted file mode 100644 index a51aa94..0000000 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesMongoAutoConfiguration.java +++ /dev/null @@ -1,41 +0,0 @@ -package ucles.weblab.common.config.files; - -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -import ucles.weblab.common.files.domain.EncryptionService; -import ucles.weblab.common.files.domain.FilesFactory; -import ucles.weblab.common.files.domain.SecureFileRepository; -import ucles.weblab.common.files.domain.mongodb.FilesFactoryMongo; -import ucles.weblab.common.files.domain.mongodb.SecureFileCollectionRepositoryMongo; -import ucles.weblab.common.files.domain.mongodb.SecureFileRepositoryMongo; - -/** - * Auto-configuration for MongoDB support for file storage. - * - * @since 19/06/15 - */ -@Configuration -@AutoConfigureAfter({MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) -@ConditionalOnClass(FilesFactory.class) -@ConditionalOnBean(MongoOperations.class) -@ConditionalOnProperty(prefix = "spring.data.mongodb.repositories", name = "enabled", havingValue = "true", matchIfMissing = true) -@EnableMongoRepositories(basePackageClasses = {SecureFileCollectionRepositoryMongo.class}) -public class FilesMongoAutoConfiguration { - @Bean - public FilesFactory filesFactoryMongo() { - return new FilesFactoryMongo(); - } - - @Bean - public SecureFileRepository secureFileRepositoryMongo(MongoOperations mongoOperations, EncryptionService encryptionService) { - return new SecureFileRepositoryMongo(mongoOperations, encryptionService); - } -} diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesS3AutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesS3AutoConfiguration.java deleted file mode 100644 index 640afae..0000000 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/files/FilesS3AutoConfiguration.java +++ /dev/null @@ -1,33 +0,0 @@ -package ucles.weblab.common.config.files; - -import com.amazonaws.auth.BasicAWSCredentials; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import ucles.weblab.common.files.blob.api.BlobStoreService; -import ucles.weblab.common.files.domain.s3.BlobStoreServiceS3; -import ucles.weblab.common.files.domain.s3.S3HealthCheckIndicator; - -/** - * An auto configuration class for when there is a BlobStoreServiceS3 initialised. - * - * @author Sukhraj - */ -@Configuration -@ConditionalOnBean({BlobStoreServiceS3.class}) -public class FilesS3AutoConfiguration { - - /** - * Declare health check for AWS S3 - * @param basicAWSCredentials - * @param blobStoreService - * @return - */ - @Bean - public S3HealthCheckIndicator healthCheckIndicator(BasicAWSCredentials basicAWSCredentials, - BlobStoreService blobStoreService) { - - return new S3HealthCheckIndicator(basicAWSCredentials, blobStoreService.getBucketName()); - } - -} diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/forms/FormsMongoAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/forms/FormsMongoAutoConfiguration.java index 17e4068..578058d 100644 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/forms/FormsMongoAutoConfiguration.java +++ b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/forms/FormsMongoAutoConfiguration.java @@ -8,8 +8,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -33,16 +33,16 @@ //@ConditionalOnBean(MongoOperations.class) @ConditionalOnProperty(prefix = "spring.data.mongodb.repositories", name = "enabled", havingValue = "true", matchIfMissing = true) @EnableMongoRepositories(basePackageClasses = {FormRepositoryMongo.class}) -public class FormsMongoAutoConfiguration { - - +public class FormsMongoAutoConfiguration { + + @Configuration @AutoConfigureAfter({DispatcherServletAutoConfiguration.class, WebMvcAutoConfiguration.class}) @ConditionalOnWebApplication @ConditionalOnClass({RestController.class, ResourceAssembler.class, ObjectMapper.class}) @ComponentScan(basePackageClasses = {FormController.class }) public static class FormsAutoConfigurationWeb { - + @Bean public FormResourceAssembler formResourceAssembler(ObjectMapper objectMapper) { return new FormResourceAssembler(objectMapper); @@ -55,9 +55,9 @@ public FormDelegate formDelegate(FormRepositoryMongo formRepositoryMongo, ObjectMapper objectMapper) { return new FormDelegate(formRepositoryMongo, formAssembler, formFactory, objectMapper); } - + } - + @Bean public FormFactory formFactoryMongo() { return new FormFactoryMongo(); diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/schema/SchemaCreatorAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/schema/SchemaCreatorAutoConfiguration.java index 436fecc..457e7f6 100644 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/schema/SchemaCreatorAutoConfiguration.java +++ b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/schema/SchemaCreatorAutoConfiguration.java @@ -6,12 +6,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; import org.springframework.security.core.context.SecurityContextHolder; +import ucles.weblab.common.config.xc.CrossContextAutoConfiguration; import ucles.weblab.common.i18n.service.LocalisationService; import ucles.weblab.common.schema.webapi.ControllerMethodSchemaCreator; import ucles.weblab.common.schema.webapi.EnumSchemaCreator; @@ -27,7 +28,7 @@ @Configuration @ConditionalOnBean({ ObjectMapper.class, CrossContextConversionService.class }) @ConditionalOnClass({ SecurityContextHolder.class, JsonSchemaFactory.class, SecurityChecker.class, MethodSecurityExpressionHandler.class, ResourceSchemaCreator.class }) -@AutoConfigureAfter(SecurityAutoConfiguration.class) +@AutoConfigureAfter({SecurityAutoConfiguration.class, CrossContextAutoConfiguration.class}) public class SchemaCreatorAutoConfiguration { @Bean diff --git a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/xc/CrossContextAutoConfiguration.java b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/xc/CrossContextAutoConfiguration.java index ee0ac05..ea1db94 100644 --- a/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/xc/CrossContextAutoConfiguration.java +++ b/weblab-spring-boot-autoconfiguration/src/main/java/ucles/weblab/common/config/xc/CrossContextAutoConfiguration.java @@ -9,8 +9,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; diff --git a/weblab-spring-boot-autoconfiguration/src/main/resources/META-INF/spring.factories b/weblab-spring-boot-autoconfiguration/src/main/resources/META-INF/spring.factories index 1c96add..1bec302 100644 --- a/weblab-spring-boot-autoconfiguration/src/main/resources/META-INF/spring.factories +++ b/weblab-spring-boot-autoconfiguration/src/main/resources/META-INF/spring.factories @@ -1,8 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - ucles.weblab.common.config.files.FilesAutoConfiguration,\ - ucles.weblab.common.config.files.FilesJpaAutoConfiguration,\ - ucles.weblab.common.config.files.FilesMongoAutoConfiguration,\ - ucles.weblab.common.config.files.FilesS3AutoConfiguration,\ ucles.weblab.common.config.audit.AuditAutoConfiguration,\ ucles.weblab.common.config.forms.FormsAutoConfiguration,\ ucles.weblab.common.config.feedback.FeedbackAutoConfiguration,\ diff --git a/weblab-spring-boot-starter-actions/pom.xml b/weblab-spring-boot-starter-actions/pom.xml index 2dc2d5a..61f73bd 100644 --- a/weblab-spring-boot-starter-actions/pom.xml +++ b/weblab-spring-boot-starter-actions/pom.xml @@ -5,7 +5,7 @@ weblab-spring-boot ucles.weblab - 0.5-SNAPSHOT + 2.0.0-SNAPSHOT 4.0.0 diff --git a/weblab-spring-boot-starter-actions/src/main/java/ucles/weblab/common/actions/webapi/ActionDecorator.java b/weblab-spring-boot-starter-actions/src/main/java/ucles/weblab/common/actions/webapi/ActionDecorator.java index 821b22f..132b94d 100644 --- a/weblab-spring-boot-starter-actions/src/main/java/ucles/weblab/common/actions/webapi/ActionDecorator.java +++ b/weblab-spring-boot-starter-actions/src/main/java/ucles/weblab/common/actions/webapi/ActionDecorator.java @@ -3,17 +3,18 @@ import com.fasterxml.jackson.module.jsonSchema.types.NullSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.MethodIntrospector; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.hateoas.ResourceSupport; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.method.HandlerMethodSelector; import ucles.weblab.common.i18n.service.LocalisationService; import ucles.weblab.common.schema.webapi.ResourceSchemaCreator; import ucles.weblab.common.security.SecurityChecker; @@ -172,8 +173,8 @@ private Optional processControllerAction(Actio } private Method findControllerMethod(ActionCommand actionCommand) { - final Set methods = HandlerMethodSelector.selectMethods(actionCommand.controller(), - method -> actionCommand.method().equals(method.getName())); + final Set methods = MethodIntrospector.selectMethods(actionCommand.controller(), + (ReflectionUtils.MethodFilter) method -> actionCommand.method().equals(method.getName())); if (methods.size() > 1) { log.error("More than one controller method matches "); return null; diff --git a/weblab-spring-boot-starter-test/pom.xml b/weblab-spring-boot-starter-test/pom.xml index 30533e6..b3fa0eb 100644 --- a/weblab-spring-boot-starter-test/pom.xml +++ b/weblab-spring-boot-starter-test/pom.xml @@ -5,7 +5,7 @@ weblab-spring-boot ucles.weblab - 0.5-SNAPSHOT + 2.0.0-SNAPSHOT 4.0.0 @@ -64,6 +64,7 @@ org.springframework.security spring-security-jwt + ${spring-security-jwt.version}