├── .circleci └── config.yml ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .idea ├── .gitignore ├── codeStyles │ └── codeStyleConfig.xml ├── compiler.xml ├── deployment.xml ├── encodings.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jarRepositories.xml ├── jfilter.iml ├── jsonignore.iml ├── misc.xml └── vcs.xml ├── .travis.yml ├── LICENSE ├── README.md ├── codecov.yml ├── jsonignore.iml ├── pom.xml ├── sonar-project.properties └── src ├── main └── java │ └── com │ └── jfilter │ ├── EnableJsonFilter.java │ ├── FileWatcherEvent.java │ ├── FilterConstantsHelper.java │ ├── FilterException.java │ ├── components │ ├── DynamicFilterProvider.java │ ├── DynamicSessionFilter.java │ ├── FileWatcher.java │ ├── FilterAdvice.java │ ├── FilterConfiguration.java │ ├── FilterConverter.java │ ├── FilterObjectMapperBuilder.java │ ├── FilterProvider.java │ ├── FilterRegister.java │ ├── ObjectMapperCache.java │ └── package-info.java │ ├── converter │ ├── FilterClassWrapper.java │ ├── MethodParameterDetails.java │ ├── MixinFilter.java │ ├── SerializationConfig.java │ └── package-info.java │ ├── filter │ ├── BaseFilter.java │ ├── DynamicFilter.java │ ├── DynamicFilterComponent.java │ ├── DynamicFilterEvent.java │ ├── FieldFilter.java │ ├── FieldFilterSetting.java │ ├── FieldFilterSettings.java │ ├── FileConfig.java │ ├── FileFilter.java │ ├── FileFilterSetting.java │ ├── FilterBehaviour.java │ ├── FilterEvent.java │ ├── FilterFactory.java │ ├── FilterFields.java │ ├── SessionStrategies.java │ ├── SessionStrategy.java │ ├── StrategyFilter.java │ └── package-info.java │ ├── mapper │ ├── FilterObjectMapper.java │ ├── FilterObjectWriter.java │ └── FilterXmlMapper.java │ ├── package-info.java │ ├── request │ ├── RequestMethodParameter.java │ ├── RequestSession.java │ └── package-info.java │ └── util │ ├── FilterUtil.java │ └── package-info.java └── test ├── java └── com │ └── jfilter │ ├── FilterConstantsHelperTest.java │ ├── FilterExceptionTest.java │ ├── TestUtils.java │ ├── components │ ├── DynamicClassFilterWSTest.java │ ├── DynamicFilterProviderITest.java │ ├── DynamicFilterWSTest.java │ ├── DynamicSessionFilterITest.java │ ├── FileRecordTest.java │ ├── FileWatcherITest.java │ ├── FileWatcherModifyITest.java │ ├── FileWatcherOverflowITest.java │ ├── FilterAdviceITest.java │ ├── FilterAdviceWSTest.java │ ├── FilterConfigurationCustomConvertersITest.java │ ├── FilterConfigurationITest.java │ ├── FilterConverterITest.java │ ├── FilterObjectMapperBuilderTest.java │ ├── FilterProviderITest.java │ ├── FilterProviderTest.java │ ├── FilterRegisterDefaultConvertersITest.java │ ├── FilterRegisterITest.java │ ├── ObjectMapperCacheITest.java │ ├── ServiceDisabledWSTest.java │ └── ServiceEnabledWSTest.java │ ├── converter │ ├── ConverterMapperITest.java │ ├── ConverterMapperWSTest.java │ └── MethodParameterDetailsTest.java │ ├── filter │ ├── BaseFilterTest.java │ ├── DynamicSessionFilterITest.java │ ├── FileConfigurationTest.java │ ├── FileFilterTest.java │ ├── FilterFactoryTest.java │ ├── FilterFieldsTest.java │ └── StrategyFilterTest.java │ ├── mapper │ ├── FilterObjectMapperITest.java │ ├── FilterObjectWriterITest.java │ ├── FilterObjectWriterTest.java │ └── FilterXmlMapperITest.java │ ├── mock │ ├── MockClassesHelper.java │ ├── MockFile.java │ ├── MockHttpRequestHelper.java │ ├── MockMethods.java │ ├── MockUser.java │ ├── MockUtils.java │ ├── config │ │ ├── MockDynamicFilter.java │ │ ├── MockDynamicNullFilter.java │ │ ├── WSConfigurationCustomConverter.java │ │ ├── WSConfigurationDisabled.java │ │ ├── WSConfigurationDisabledFiltered.java │ │ ├── WSConfigurationEnabled.java │ │ ├── WSConfigurationHelper.java │ │ └── WSUseDefaultConvertersEnabled.java │ └── webservice │ │ ├── WSClassDynamicFilter.java │ │ ├── WSClassFieldMultiple.java │ │ ├── WSClassFieldSingle.java │ │ ├── WSClassFile.java │ │ ├── WSClassStrategies.java │ │ ├── WSClassStrategyMultiple.java │ │ ├── WSClassStrategySingle.java │ │ ├── WSDynamicFilter.java │ │ └── WSMethod.java │ ├── request │ ├── RequestMethodParameterTest.java │ └── RequestSessionTest.java │ └── util │ └── FilterUtilTest.java └── resources ├── bad_config.xml ├── config.xml ├── config.yaml ├── configMockWebService.xml ├── config_class_duplicated.xml ├── config_class_not_found.xml ├── config_default_strategy.xml ├── config_dynamic.xml ├── config_io_exception.xml ├── config_no_controllers.xml ├── config_no_strategies.xml └── config_with_behaviour.xml /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Java Maven CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-java/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # specify the version you desire here 10 | - image: circleci/openjdk:9-jdk 11 | 12 | # Specify service dependencies here if necessary 13 | # CircleCI maintains a library of pre-built images 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/postgres:9.4 16 | 17 | working_directory: ~/repo 18 | 19 | environment: 20 | # Customize the JVM maximum heap limit 21 | MAVEN_OPTS: -Xmx3200m 22 | 23 | steps: 24 | - checkout 25 | 26 | # Download and cache dependencies 27 | - restore_cache: 28 | keys: 29 | - v1-dependencies-{{ checksum "pom.xml" }} 30 | # fallback to using the latest cache if no exact match is found 31 | - v1-dependencies- 32 | 33 | - run: mvn dependency:go-offline 34 | 35 | - save_cache: 36 | paths: 37 | - ~/.m2 38 | key: v1-dependencies-{{ checksum "pom.xml" }} 39 | 40 | # run tests! 41 | - run: mvn integration-test 42 | 43 | 44 | test: 45 | docker: 46 | # specify the version you desire here 47 | - image: circleci/openjdk:9-jdk 48 | 49 | # Specify service dependencies here if necessary 50 | # CircleCI maintains a library of pre-built images 51 | # documented at https://circleci.com/docs/2.0/circleci-images/ 52 | # - image: circleci/postgres:9.4 53 | 54 | working_directory: ~/repo 55 | 56 | environment: 57 | # Customize the JVM maximum heap limit 58 | MAVEN_OPTS: -Xmx3200m 59 | 60 | steps: 61 | - checkout 62 | 63 | # Download and cache dependencies 64 | - restore_cache: 65 | keys: 66 | - v1-dependencies-{{ checksum "pom.xml" }} 67 | # fallback to using the latest cache if no exact match is found 68 | - v1-dependencies- 69 | 70 | - run: mvn dependency:go-offline 71 | 72 | - save_cache: 73 | paths: 74 | - ~/.m2 75 | key: v1-dependencies-{{ checksum "pom.xml" }} 76 | 77 | # run tests! 78 | - run: mvn integration-test 79 | 80 | workflows: 81 | version: 2 82 | build_and_test: 83 | jobs: 84 | - test 85 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Spring/Spring-boot:** 24 | - Version [e.g. 22] 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/deployment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/jfilter.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.idea/jsonignore.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | jdk: 4 | - oraclejdk8 5 | dist: trusty 6 | after_success: 7 | - bash <(curl -s https://codecov.io/bash) 8 | 9 | 10 | addons: 11 | sonarcloud: 12 | organization: "rkonovalov-github" # the key of the org you chose at step #3 13 | 14 | 15 | 16 | script: 17 | - "mvn test" 18 | - "mvn jacoco:report" 19 | - sonar-scanner -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | - "/src/main/java/com/jfilter/filter/FilterFactory.java" 3 | -------------------------------------------------------------------------------- /jsonignore.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "UnusedProperty" for whole file 2 | sonar.language=java 3 | sonar.java.source=1.8 4 | sonar.sourceEncoding=UTF-8 5 | sonar.host.url=https://sonarcloud.io 6 | sonar.projectKey=jfilter 7 | sonar.login=0511fe52d3e05be75412f7adca1e4916f53bd6e9 8 | sonar.projectName=JFilter module 9 | sonar.projectVersion=1.5 10 | sonar.sources=/home/travis/build/rkonovalov/jfilter/src/main/java 11 | sonar.tests=/home/travis/build/rkonovalov/jfilter/src/test/java 12 | sonar.java.binaries=/home/travis/build/rkonovalov/jfilter/target/classes 13 | sonar.junit.reportsPath=/home/travis/build/rkonovalov/jfilter/target/surefire-reports -------------------------------------------------------------------------------- /src/main/java/com/jfilter/EnableJsonFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.ComponentScans; 5 | import org.springframework.scheduling.annotation.EnableScheduling; 6 | 7 | import java.lang.annotation.Documented; 8 | import java.lang.annotation.ElementType; 9 | import java.lang.annotation.Retention; 10 | import java.lang.annotation.RetentionPolicy; 11 | import java.lang.annotation.Target; 12 | 13 | 14 | /** 15 | * Enables json filter 16 | * 17 | *

For enabling FilterProvider, FilterAdvice and all filter mechanisms this annotation should be specified on one of application beans, 18 | * as example on application configuration bean. 19 | */ 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Target({ElementType.TYPE}) 22 | @Documented 23 | @EnableScheduling 24 | @ComponentScans(value = @ComponentScan({"com.jfilter", "com.jfilter.components"})) 25 | public @interface EnableJsonFilter { 26 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/FileWatcherEvent.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * The event that occurs when file is modified 7 | */ 8 | public interface FileWatcherEvent { 9 | 10 | /** 11 | * Event occurs if file modified 12 | * 13 | * @param file modified file 14 | */ 15 | void onEvent(File file); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/FilterConstantsHelper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | /** 4 | * Filter constants class 5 | */ 6 | public class FilterConstantsHelper { 7 | 8 | public static final String MEDIA_TYPE_APPLICATION = "application"; 9 | public static final String MEDIA_SUB_TYPE_JSON = "json"; 10 | public static final String MEDIA_SUB_TYPE_JSON2 = "*+json"; 11 | public static final String MEDIA_SUB_TYPE_XML = "xml"; 12 | public static final String MEDIA_SUB_TYPE_XML2 = "*+xml"; 13 | 14 | private FilterConstantsHelper() { 15 | throw new IllegalStateException("FilterConstants class"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/FilterException.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | /** 4 | * Exception will throw on {@link IllegalAccessException} 5 | */ 6 | public class FilterException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = -1580361832535921569L; 9 | 10 | public FilterException(Throwable cause) { 11 | super(cause); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/DynamicFilterProvider.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.comparator.Comparator; 4 | import com.jfilter.filter.DynamicFilter; 5 | import com.jfilter.filter.DynamicFilterComponent; 6 | import com.jfilter.filter.DynamicFilterEvent; 7 | import com.jfilter.filter.FilterFields; 8 | import com.jfilter.request.RequestSession; 9 | import com.jfilter.util.FilterUtil; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.context.ApplicationContext; 12 | import org.springframework.core.MethodParameter; 13 | import org.springframework.stereotype.Component; 14 | 15 | import java.util.HashMap; 16 | import java.util.Map; 17 | 18 | /** 19 | * Dynamic filter provider 20 | * 21 | *

This component finds and provides Dynamic filters which annotated by {@link DynamicFilterComponent} annotation. 22 | * Could be used for retrieving {@link FilterFields} from {@link MethodParameter} which annotated by {@link DynamicFilter} 23 | */ 24 | @SuppressWarnings("CanBeFinal") 25 | @Component 26 | public final class DynamicFilterProvider { 27 | private ApplicationContext applicationContext; 28 | private Map, DynamicFilterEvent> dynamicFilterMap; 29 | 30 | /** 31 | * Creates a new instance of the {@link DynamicFilterProvider} class. 32 | * 33 | * @param applicationContext {@link ApplicationContext} bean 34 | */ 35 | @Autowired 36 | public DynamicFilterProvider(ApplicationContext applicationContext) { 37 | this.applicationContext = applicationContext; 38 | this.dynamicFilterMap = new HashMap<>(); 39 | findDynamicFilters(); 40 | } 41 | 42 | /** 43 | * Find dynamic filter beans 44 | * 45 | *

Attempts to find all components which annotated by {@link DynamicFilterComponent} 46 | * and inherited from {@link DynamicFilterEvent} 47 | * For example of component please see {@link DynamicSessionFilter} 48 | */ 49 | private void findDynamicFilters() { 50 | Map beans = applicationContext.getBeansWithAnnotation(DynamicFilterComponent.class); 51 | 52 | beans.forEach((k, v) -> { 53 | if (v instanceof DynamicFilterEvent) 54 | dynamicFilterMap.put(((DynamicFilterEvent) v).getClass(), (DynamicFilterEvent) v); 55 | }); 56 | } 57 | 58 | /** 59 | * Check if method has {@link DynamicFilter} annotation 60 | * 61 | * @param methodParameter method parameter 62 | * @return true if annotation is found, otherwise false 63 | */ 64 | public static boolean isAccept(MethodParameter methodParameter) { 65 | return FilterUtil.getDeclaredAnnotations(methodParameter, DynamicFilter.class).size() > 0; 66 | } 67 | 68 | /** 69 | * Returns {@link FilterFields} from annotated method 70 | * 71 | *

Attempts to find and return dynamic filter from dynamicFilterMap 72 | * 73 | * @param methodParameter method parameter 74 | * @param request service request 75 | * @return if found dynamic filter returns {@link FilterFields}, otherwise empty FilterFields 76 | */ 77 | public FilterFields getFields(MethodParameter methodParameter, RequestSession request) { 78 | FilterFields filterFields = FilterFields.EMPTY_FIELDS.get(); 79 | 80 | //Retrieve filterable fields from dynamic filters from whole class and method 81 | FilterUtil.getDeclaredAnnotations(methodParameter, DynamicFilter.class) 82 | .forEach(annotation -> filterFields.appendToMap(getFilterFields((DynamicFilter) annotation, request))); 83 | 84 | return filterFields; 85 | } 86 | 87 | public FilterFields getFilterFields(DynamicFilter dynamicFilter, RequestSession request) { 88 | if (dynamicFilter != null && dynamicFilterMap.containsKey(dynamicFilter.value())) { 89 | DynamicFilterEvent filter = dynamicFilterMap.get(dynamicFilter.value()); 90 | 91 | Comparator comparator = Comparator.of(request, FilterFields.class); 92 | filter.onRequest(comparator); 93 | 94 | //Get FilterFields from comparator or EMPTY_FIELDS if comparator not modified or conditions in compare method returned false 95 | return comparator.orElse(FilterFields.EMPTY_FIELDS.get()); 96 | } else 97 | return FilterFields.EMPTY_FIELDS.get(); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/DynamicSessionFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.comparator.Comparator; 4 | import com.jfilter.filter.DynamicFilterComponent; 5 | import com.jfilter.filter.DynamicFilterEvent; 6 | import com.jfilter.filter.FilterFields; 7 | import com.jfilter.request.RequestSession; 8 | 9 | /** 10 | * Dynamic session filter 11 | * 12 | *

13 | * This filter get FilterFields from session's or request's attributes if it exist 14 | */ 15 | @SuppressWarnings("WeakerAccess") 16 | @DynamicFilterComponent 17 | public class DynamicSessionFilter implements DynamicFilterEvent { 18 | public static final String ATTRIBUTE_FILTER_FIELDS = FilterFields.class.getName(); 19 | 20 | /** 21 | * Request event handler 22 | * 23 | *

Retrieve FilterFields object from session attributes by name ATTRIBUTE_FILTER_FIELDS if it instance of FilterFields 24 | * 25 | * @param comparator {@link Comparator} comparator object which will be used by {@link DynamicFilterProvider} for retrieve {@link FilterFields} 26 | */ 27 | @Override 28 | public void onRequest(Comparator comparator) { 29 | 30 | comparator 31 | //Check and use if FilterFields exists in request 32 | .compare((request -> FilterFields.class.isInstance(request.getRequest().getAttribute(ATTRIBUTE_FILTER_FIELDS))), 33 | (result -> (FilterFields) result.getRequest().getAttribute(ATTRIBUTE_FILTER_FIELDS))) 34 | 35 | //Check and use if FilterFields exists in session 36 | .compare((request -> FilterFields.class.isInstance(request.getSession().getAttribute(ATTRIBUTE_FILTER_FIELDS))), 37 | (result -> (FilterFields) result.getSession().getAttribute(ATTRIBUTE_FILTER_FIELDS))) 38 | ; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/FilterAdvice.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.converter.MethodParameterDetails; 4 | import com.jfilter.converter.FilterClassWrapper; 5 | import com.jfilter.filter.FilterFields; 6 | import com.jfilter.request.RequestSession; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.core.MethodParameter; 9 | import org.springframework.http.MediaType; 10 | import org.springframework.http.converter.HttpMessageConverter; 11 | import org.springframework.http.server.ServerHttpRequest; 12 | import org.springframework.http.server.ServerHttpResponse; 13 | import org.springframework.http.server.ServletServerHttpRequest; 14 | import org.springframework.web.bind.annotation.ControllerAdvice; 15 | import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; 16 | 17 | import javax.servlet.http.HttpServletRequest; 18 | import java.io.Serializable; 19 | 20 | import static com.jfilter.filter.FilterFields.EMPTY_FIELDS; 21 | 22 | /** 23 | * Class which handle all responses from web service and tries to filter it 24 | * 25 | *

This class will be detected and instantiated automatically by Spring Framework 26 | * The main task of this class is checking if response method has filter annotation and try to apply filters 27 | */ 28 | 29 | @ControllerAdvice 30 | public final class FilterAdvice implements ResponseBodyAdvice { 31 | private FilterProvider filterProvider; 32 | private DynamicFilterProvider dynamicFilterProvider; 33 | private FilterConfiguration filterConfiguration; 34 | 35 | @Autowired 36 | public void setFilterProvider(FilterProvider filterProvider) { 37 | this.filterProvider = filterProvider; 38 | } 39 | 40 | @Autowired 41 | public FilterAdvice setDynamicFilterProvider(DynamicFilterProvider dynamicFilterProvider) { 42 | this.dynamicFilterProvider = dynamicFilterProvider; 43 | return this; 44 | } 45 | 46 | @Autowired 47 | public FilterAdvice setFilterConfiguration(FilterConfiguration filterConfiguration) { 48 | this.filterConfiguration = filterConfiguration; 49 | return this; 50 | } 51 | 52 | /** 53 | * Attempt to find annotations in method and associated filter 54 | * 55 | * @param methodParameter {@link MethodParameter} 56 | * @param aClass {@link HttpMessageConverter} 57 | * @return true if found, else false 58 | */ 59 | @Override 60 | public boolean supports(MethodParameter methodParameter, Class> aClass) { 61 | return filterConfiguration.isEnabled() && 62 | (filterProvider.isAccept(methodParameter) || DynamicFilterProvider.isAccept(methodParameter)); 63 | } 64 | 65 | /** 66 | * Attempt to find filter and extract ignorable fields from methodParameter 67 | * 68 | * @param obj {@link Object} object sent from response of Spring Web Service 69 | * @param methodParameter {@link MethodParameter} 70 | * @param mediaType {@link MediaType} 71 | * @param aClass {@link HttpMessageConverter} 72 | * @param serverHttpRequest {@link ServerHttpRequest} 73 | * @param serverHttpResponse {@link ServerHttpResponse} 74 | * @return {@link FilterClassWrapper} if BaseFilter is found FilterClassWrapper contains list of ignorable fields, 75 | * else returns FilterClassWrapper with HashMap zero length 76 | */ 77 | @Override 78 | public Serializable beforeBodyWrite(Object obj, MethodParameter methodParameter, MediaType mediaType, 79 | Class> aClass, ServerHttpRequest serverHttpRequest, 80 | ServerHttpResponse serverHttpResponse) { 81 | 82 | FilterFields filterFields = EMPTY_FIELDS.get(); 83 | 84 | //Getting HttpServletRequest from serverHttpRequest 85 | HttpServletRequest servletServerHttpRequest = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest(); 86 | RequestSession requestSession = new RequestSession(servletServerHttpRequest); 87 | 88 | //Retrieve filterable fields from static filters 89 | filterProvider.getOptionalFilter(methodParameter) 90 | .ifPresent(filter -> filterFields.appendToMap(filter.getFields(obj, requestSession))); 91 | 92 | //Retrieve filterable fields from dynamic filters 93 | filterFields.appendToMap(dynamicFilterProvider.getFields(methodParameter, requestSession)); 94 | 95 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, mediaType, filterFields); 96 | 97 | return new FilterClassWrapper(obj, methodParameterDetails); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/FilterConverter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.jfilter.converter.FilterClassWrapper; 5 | import org.springframework.http.HttpInputMessage; 6 | import org.springframework.http.HttpOutputMessage; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.http.converter.AbstractHttpMessageConverter; 9 | import org.springframework.http.converter.HttpMessageNotReadableException; 10 | import org.springframework.http.converter.HttpMessageNotWritableException; 11 | 12 | import java.io.IOException; 13 | import java.util.List; 14 | import java.util.Objects; 15 | 16 | public class FilterConverter extends AbstractHttpMessageConverter { 17 | private FilterConfiguration filterConfiguration; 18 | 19 | public FilterConverter(FilterConfiguration filterConfiguration) { 20 | this.filterConfiguration = filterConfiguration; 21 | } 22 | 23 | @Override 24 | protected boolean supports(Class clazz) { 25 | return true; 26 | } 27 | 28 | @Override 29 | public List getSupportedMediaTypes() { 30 | return filterConfiguration.supportedMediaTypes(); 31 | } 32 | 33 | @Override 34 | public boolean canRead(Class clazz, MediaType mediaType) { 35 | return false; 36 | } 37 | 38 | @Override 39 | public boolean canWrite(Class clazz, MediaType mediaType) { 40 | return filterConfiguration.isEnabled() && 41 | (filterConfiguration.supportedMediaTypes().contains(mediaType) || Objects.isNull(mediaType)); 42 | } 43 | 44 | @Override 45 | protected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws HttpMessageNotReadableException { 46 | return null; 47 | } 48 | 49 | @Override 50 | protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { 51 | MediaType contentType = outputMessage.getHeaders().getContentType(); 52 | 53 | 54 | //If object is FilterClassWrapper try to serialize object using filters(if configured) 55 | if (object instanceof FilterClassWrapper) { 56 | FilterClassWrapper wrapper = (FilterClassWrapper) object; 57 | 58 | //Retrieving ObjectMapper from ObjectMapperCache 59 | ObjectMapper objectMapper = filterConfiguration.getObjectMapperCache() 60 | .findObjectMapper(wrapper.getMethodParameterDetails()); 61 | 62 | //Serialize object with ObjectMapper 63 | objectMapper.writeValue(outputMessage.getBody(), wrapper.getObject()); 64 | } else { 65 | //Otherwise try to serialize object without filters by default ObjectMapper from filterConfiguration 66 | ObjectMapper objectMapper = filterConfiguration.getMapper(contentType); 67 | objectMapper.writeValue(outputMessage.getBody(), object); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/FilterObjectMapperBuilder.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; 5 | import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; 6 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 7 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; 8 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; 9 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; 10 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; 11 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; 12 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; 13 | import com.jfilter.converter.MixinFilter; 14 | import com.jfilter.converter.SerializationConfig; 15 | import com.jfilter.filter.FilterFields; 16 | 17 | import java.time.LocalDate; 18 | import java.time.LocalDateTime; 19 | import java.time.LocalTime; 20 | 21 | /** 22 | * This class allows to add SerializerModifier to ObjectMapper 23 | */ 24 | public class FilterObjectMapperBuilder { 25 | private ObjectMapper objectMapper; 26 | private FilterFields filterFields; 27 | private SerializationConfig serializationConfig; 28 | 29 | public FilterObjectMapperBuilder(ObjectMapper objectMapper) { 30 | this.objectMapper = objectMapper; 31 | } 32 | 33 | public FilterObjectMapperBuilder withFilterFields(FilterFields filterFields) { 34 | this.filterFields = filterFields; 35 | return this; 36 | } 37 | 38 | public FilterObjectMapperBuilder withSetSerializationConfig(SerializationConfig serializationConfig) { 39 | this.serializationConfig = serializationConfig; 40 | return this; 41 | } 42 | 43 | /** 44 | * Build configured ObjectMapper 45 | * 46 | * @return {@link ObjectMapper} 47 | */ 48 | public ObjectMapper build() { 49 | 50 | //Add mixin filter if filterFields isn't null and has filterable fields 51 | if(filterFields != null && filterFields.getFieldsMap().size() > 0) { 52 | objectMapper.addMixIn(Object.class, MixinFilter.class); 53 | objectMapper.setFilterProvider(new SimpleFilterProvider() 54 | .addFilter("com.jfilter.converter.MixinFilter", new MixinFilter(filterFields))); 55 | } 56 | 57 | //Set dateTimeModule if option is enabled 58 | if (serializationConfig.isDateTimeModuleEnabled()) { 59 | //Add JavaTimeModule to fix issue with LocalDate/LocalDateTime serialization 60 | JavaTimeModule javaTimeModule = new JavaTimeModule(); 61 | javaTimeModule.addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE); 62 | javaTimeModule.addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE); 63 | javaTimeModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE); 64 | javaTimeModule.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE); 65 | javaTimeModule.addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE); 66 | javaTimeModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); 67 | objectMapper.registerModule(javaTimeModule); 68 | objectMapper.registerModule(new Jdk8Module()); 69 | objectMapper.findAndRegisterModules(); 70 | } 71 | 72 | return objectMapper; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/FilterProvider.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.EnableJsonFilter; 4 | import com.jfilter.filter.BaseFilter; 5 | import com.jfilter.filter.FilterFactory; 6 | import com.jfilter.filter.FileFilter; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.core.MethodParameter; 9 | import org.springframework.stereotype.Component; 10 | import org.springframework.web.context.WebApplicationContext; 11 | 12 | import java.lang.annotation.Annotation; 13 | import java.util.Map; 14 | import java.util.Optional; 15 | import java.util.concurrent.ConcurrentHashMap; 16 | 17 | /** 18 | * Object filter provider bean 19 | * 20 | *

This class will be detected and instantiated automatically by Spring Framework 21 | * 22 | *

The main task of this class is: getting from http request session information, getting annotations from methodParam and 23 | * trying to find filter associated with annotation. 24 | * 25 | *

This class also has cache for caching already found filter for better productivity 26 | */ 27 | @Component 28 | public final class FilterProvider { 29 | private final Map filters; 30 | private boolean enabled; 31 | private FileWatcher fileWatcher; 32 | 33 | /** 34 | * Creates a new instance of the {@link FilterProvider} class. 35 | */ 36 | public FilterProvider() { 37 | this.filters = new ConcurrentHashMap<>(); 38 | } 39 | 40 | @Autowired 41 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) { 42 | /* 43 | * Important! For enabling filtration, should be specified one of application bean with EnableJsonFilter annotation 44 | */ 45 | enabled = isFilterEnabled(webApplicationContext); 46 | } 47 | 48 | @Autowired 49 | public FilterProvider setFileWatcher(FileWatcher fileWatcher) { 50 | this.fileWatcher = fileWatcher; 51 | return this; 52 | } 53 | 54 | /** 55 | * Returns true if found EnableJsonFilter annotation in one of Spring beans 56 | * 57 | * @param webApplicationContext {@link WebApplicationContext} 58 | * @return true if found, else false 59 | */ 60 | public static boolean isFilterEnabled(WebApplicationContext webApplicationContext) { 61 | return webApplicationContext.getBeansWithAnnotation(EnableJsonFilter.class).size() > 0; 62 | } 63 | 64 | /** 65 | * Returns one of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared 66 | * 67 | * @param methodParameter {@link MethodParameter} 68 | * @return {@link BaseFilter} 69 | */ 70 | private BaseFilter getBaseFilter(MethodParameter methodParameter) { 71 | Annotation key = FilterFactory.getFilterAnnotation(methodParameter); 72 | 73 | if (key != null) { 74 | if (filters.containsKey(key)) { 75 | //Retrieve filter from cache 76 | return filters.get(key); 77 | } else { 78 | //Create and put filter in cache 79 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter); 80 | 81 | if (filter instanceof FileFilter) { 82 | ((FileFilter) filter).setFileWatcher(fileWatcher); 83 | } 84 | filters.put(key, filter); 85 | return filter; 86 | } 87 | } 88 | return null; 89 | } 90 | 91 | /** 92 | * Check if provider supports processing method 93 | *

94 | * Condition checks if provider is enabled and FilterFactory accepts method, else returns false 95 | * 96 | * @param methodParameter the method parameter 97 | * @return the boolean 98 | */ 99 | public boolean isAccept(MethodParameter methodParameter) { 100 | return enabled && FilterFactory.isAccept(methodParameter); 101 | } 102 | 103 | /** 104 | * Returns one of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared 105 | * 106 | * @param methodParameter {@link MethodParameter} 107 | * @return {@link BaseFilter} 108 | */ 109 | public BaseFilter getFilter(MethodParameter methodParameter) { 110 | return getBaseFilter(methodParameter); 111 | } 112 | 113 | /** 114 | * Returns Optional of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared 115 | * 116 | * @param methodParameter {@link MethodParameter} 117 | * @return {@link BaseFilter} 118 | */ 119 | public Optional getOptionalFilter(MethodParameter methodParameter) { 120 | return Optional.ofNullable(getFilter(methodParameter)); 121 | } 122 | 123 | /** 124 | * Clear cache of filter list 125 | */ 126 | public void clearCache() { 127 | filters.clear(); 128 | } 129 | 130 | /** 131 | * Cache size int 132 | * 133 | * @return the int 134 | */ 135 | public int cacheSize() { 136 | return filters.size(); 137 | } 138 | 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/ObjectMapperCache.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.jfilter.converter.MethodParameterDetails; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.http.HttpOutputMessage; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.stereotype.Component; 9 | import java.util.concurrent.ConcurrentHashMap; 10 | import java.util.concurrent.ConcurrentMap; 11 | 12 | /** 13 | * ObjectMapper cache 14 | *

15 | * This class contains cached list of ObjectMappers which used in {@link FilterConverter#write(Object, MediaType, HttpOutputMessage)} 16 | */ 17 | @Component 18 | public class ObjectMapperCache { 19 | private ConcurrentMap items; 20 | private FilterConfiguration filterConfiguration; 21 | 22 | public ObjectMapperCache() { 23 | items = new ConcurrentHashMap<>(); 24 | } 25 | 26 | /** 27 | * Set of FilterConfiguration 28 | * 29 | * @param filterConfiguration {@link FilterConfiguration} 30 | * @return {@link ObjectMapperCache} 31 | */ 32 | @Autowired 33 | public ObjectMapperCache setFilterConfiguration(FilterConfiguration filterConfiguration) { 34 | this.filterConfiguration = filterConfiguration; 35 | return this; 36 | } 37 | 38 | /** 39 | * Find ObjectMapper by MethodParameterDetails 40 | * 41 | * @param item {@link MethodParameterDetails} 42 | * @return {@link ObjectMapper} 43 | */ 44 | public ObjectMapper findObjectMapper(MethodParameterDetails item) { 45 | 46 | ObjectMapper objectMapper = items.get(item); 47 | if (objectMapper == null) 48 | objectMapper = addNewMapper(item); 49 | return objectMapper; 50 | } 51 | 52 | 53 | /** 54 | * Add new ObjectMapper in cache 55 | *

56 | * Method creates copy of ObjectMapper by media type which listed in filterConfiguration 57 | * Also if MethodParameterDetails has filter fields method tries to set ignore modifier to ObjectMapper 58 | * 59 | * @param item {@link MethodParameterDetails} 60 | * @return {@link ObjectMapper} 61 | */ 62 | private ObjectMapper addNewMapper(MethodParameterDetails item) { 63 | 64 | //Make copy of configured ObjectMapper 65 | ObjectMapper configuredObjectMapper = filterConfiguration.getMapper(item.getMediaType()).copy(); 66 | 67 | //Build modified objectMapper 68 | ObjectMapper objectMapper = new FilterObjectMapperBuilder(configuredObjectMapper) 69 | .withFilterFields(item.getFilterFields()) 70 | .withSetSerializationConfig(filterConfiguration.getSerializationConfig()) 71 | .build(); 72 | 73 | items.put(item, objectMapper); 74 | return objectMapper; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/components/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Internal filtering classes 3 | * 4 | *

Classes used for extending od filtration features of standard Spring Web Service. 5 | */ 6 | 7 | package com.jfilter.components; -------------------------------------------------------------------------------- /src/main/java/com/jfilter/converter/FilterClassWrapper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.jfilter.components.FilterAdvice; 4 | import com.jfilter.components.FilterConverter; 5 | import org.springframework.core.MethodParameter; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.http.server.ServerHttpRequest; 8 | import org.springframework.http.server.ServerHttpResponse; 9 | 10 | import java.io.Serializable; 11 | 12 | /** 13 | * Class contains Serializable object and list of fields which should be kept or hidden 14 | * 15 | *

Class used to send additional information from {@link FilterAdvice} to {@link FilterConverter} 16 | */ 17 | public class FilterClassWrapper implements Serializable { 18 | private static final long serialVersionUID = -6250969684778521840L; 19 | private final transient Object object; 20 | private MethodParameterDetails methodParameterDetails; 21 | 22 | /** 23 | * Creates a new instance of the {@link FilterClassWrapper} class. 24 | * 25 | * @param object Serializable object 26 | * @param methodParameterDetails objectMapper item 27 | */ 28 | public FilterClassWrapper(Object object, MethodParameterDetails methodParameterDetails) { 29 | this.object = object; 30 | this.methodParameterDetails = methodParameterDetails; 31 | } 32 | 33 | /** 34 | * Serializable object retrieved from {@link FilterAdvice#beforeBodyWrite(Object, MethodParameter, MediaType, Class, ServerHttpRequest, ServerHttpResponse)} 35 | * 36 | * @return {@link Serializable} 37 | */ 38 | public Object getObject() { 39 | return object; 40 | } 41 | 42 | /** 43 | * MethodParameter details retrieved from {@link FilterAdvice#beforeBodyWrite(Object, MethodParameter, MediaType, Class, ServerHttpRequest, ServerHttpResponse)} 44 | * 45 | * @return {@link MethodParameterDetails} 46 | */ 47 | public MethodParameterDetails getMethodParameterDetails() { 48 | return methodParameterDetails; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/converter/MethodParameterDetails.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.jfilter.filter.FilterFields; 4 | import org.springframework.core.MethodParameter; 5 | import org.springframework.http.MediaType; 6 | 7 | import java.io.Serializable; 8 | import java.util.Objects; 9 | 10 | /** 11 | * This class contains details retrieved from {@link com.jfilter.components.FilterAdvice#beforeBodyWrite} 12 | */ 13 | public class MethodParameterDetails implements Serializable { 14 | private static final long serialVersionUID = 2481023447068160651L; 15 | 16 | private MethodParameter methodParameter; 17 | private int methodHashCode; 18 | private MediaType mediaType; 19 | private FilterFields filterFields; 20 | 21 | /** 22 | * Constructor 23 | * 24 | * @param methodParameter method of Spring controller 25 | * @param mediaType {@link MediaType} media type of http message 26 | * @param filterFields {@link FilterFields} fields whish should be kept or hidden 27 | */ 28 | public MethodParameterDetails(MethodParameter methodParameter, MediaType mediaType, FilterFields filterFields) { 29 | this.methodParameter = methodParameter; 30 | this.methodHashCode = methodParameter.getMethod().hashCode(); 31 | this.mediaType = mediaType; 32 | this.filterFields = filterFields; 33 | } 34 | 35 | public MethodParameter getMethodParameter() { 36 | return methodParameter; 37 | } 38 | 39 | public int getMethodHashCode() { 40 | return methodHashCode; 41 | } 42 | 43 | public MediaType getMediaType() { 44 | return mediaType; 45 | } 46 | 47 | public FilterFields getFilterFields() { 48 | return filterFields; 49 | } 50 | 51 | @Override 52 | public boolean equals(Object o) { 53 | if (this == o) return true; 54 | if (!(o instanceof MethodParameterDetails)) return false; 55 | MethodParameterDetails that = (MethodParameterDetails) o; 56 | return methodHashCode == that.methodHashCode && 57 | Objects.equals(methodParameter, that.methodParameter) && 58 | Objects.equals(mediaType, that.mediaType) && 59 | Objects.equals(filterFields, that.filterFields); 60 | } 61 | 62 | @Override 63 | public int hashCode() { 64 | return Objects.hash(methodParameter, methodHashCode, mediaType, filterFields); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/converter/MixinFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFilter; 4 | import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; 5 | import com.fasterxml.jackson.databind.ser.PropertyWriter; 6 | import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; 7 | import com.jfilter.filter.FilterFields; 8 | 9 | import java.io.Serializable; 10 | import java.util.Arrays; 11 | import java.util.List; 12 | 13 | import static com.jfilter.filter.FilterBehaviour.KEEP_FIELDS; 14 | 15 | /** 16 | * Filter used for filtering fields from object 17 | */ 18 | @JsonFilter("com.jfilter.converter.MixinFilter") 19 | public class MixinFilter extends SimpleBeanPropertyFilter implements Serializable { 20 | private static final long serialVersionUID = 1780940093765526265L; 21 | 22 | private final FilterFields filterFields; 23 | 24 | public MixinFilter(FilterFields filterFields) { 25 | this.filterFields = filterFields; 26 | } 27 | 28 | @Override 29 | protected boolean include(BeanPropertyWriter writer) { 30 | return !isFilterable(writer.getMember().getDeclaringClass(), writer.getName()); 31 | } 32 | 33 | @Override 34 | protected boolean include(PropertyWriter writer) { 35 | return !isFilterable(writer.getMember().getDeclaringClass(), writer.getName()); 36 | } 37 | 38 | private boolean fieldSpecified(List> classes, String fieldName) { 39 | return classes.stream() 40 | .anyMatch(clazz -> fieldSpecified(clazz, fieldName)); 41 | } 42 | 43 | private boolean fieldSpecified(Class clazz, String fieldName) { 44 | List classFields = filterFields.getFieldsMap().get(clazz); 45 | 46 | if (classFields != null) { 47 | return classFields.stream() 48 | .anyMatch(field -> field.equals(fieldName)); 49 | } else 50 | return false; 51 | } 52 | 53 | private boolean isFilterable(Class clazz, String fieldName) { 54 | boolean fieldFound = fieldSpecified(Arrays.asList(void.class, clazz), fieldName); 55 | return (filterFields.getFilterBehaviour() == KEEP_FIELDS) != fieldFound; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/converter/SerializationConfig.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.jfilter.components.FilterConfiguration; 4 | import com.jfilter.components.FilterObjectMapperBuilder; 5 | 6 | public class SerializationConfig { 7 | private boolean dateTimeModule; 8 | 9 | public SerializationConfig() { 10 | this.dateTimeModule = true; 11 | } 12 | 13 | /** 14 | * Get using of JavaDateTimeModule state 15 | * 16 | * @return true if using is enabled, otherwise false 17 | */ 18 | public boolean isDateTimeModuleEnabled() { 19 | return dateTimeModule; 20 | } 21 | 22 | /** 23 | * Enabling/disabling using of JavaDateTimeModule in ObjectMappers 24 | * 25 | * @param dateTimeModule if true {@link FilterObjectMapperBuilder} will add JavaTimeModule to ObjectMappers, otherwise not 26 | * @return instance of {@link FilterConfiguration} 27 | */ 28 | public SerializationConfig enableDateTimeModule(boolean dateTimeModule) { 29 | this.dateTimeModule = dateTimeModule; 30 | return this; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/converter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Converter classes 3 | * 4 | *

Classes used for 5 | *

    6 | *
  • Filter ignorable fields
  • 7 | *
  • Serialization to JSON format
  • 8 | *
  • Serialization to XML format
  • 9 | *
10 | */ 11 | 12 | package com.jfilter.converter; -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/BaseFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.request.RequestMethodParameter; 4 | import com.jfilter.request.RequestSession; 5 | import org.springframework.core.MethodParameter; 6 | 7 | /** 8 | * This class is base class of filtration mechanism 9 | */ 10 | public abstract class BaseFilter { 11 | private final RequestMethodParameter requestMethodParameter; 12 | 13 | /** 14 | * Creates a new instance of the {@link BaseFilter} class. 15 | * 16 | * @param methodParameter {@link MethodParameter} 17 | */ 18 | protected BaseFilter(MethodParameter methodParameter) { 19 | this.requestMethodParameter = new RequestMethodParameter(methodParameter); 20 | } 21 | 22 | /** 23 | * Returns RequestMethodParameter 24 | * @return {@link RequestMethodParameter} 25 | */ 26 | protected RequestMethodParameter getRequestMethodParameter() { 27 | return requestMethodParameter; 28 | } 29 | 30 | protected abstract void setConfig(MethodParameter methodParameter); 31 | 32 | /** 33 | * Returns list of ignorable fields of object 34 | * @param object {@link Object} 35 | * @param request {@link RequestSession} 36 | * @return {@link FilterFields} 37 | */ 38 | public abstract FilterFields getFields(Object object, RequestSession request); 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/DynamicFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.components.DynamicFilterProvider; 4 | 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * This annotation used for configuring of dynamic filter 13 | * 14 | *

It is typically used in combination with annotation {@link DynamicFilterComponent} annotation. 15 | * {@link DynamicFilterProvider} attempts to get FilterFields from value; 16 | * Value should be class which implements {@link DynamicFilterEvent} 17 | */ 18 | @Retention(RetentionPolicy.RUNTIME) 19 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 20 | @Documented 21 | public @interface DynamicFilter { 22 | Class value(); 23 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/DynamicFilterComponent.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * Indicates that an annotated class is a "DynamicFilterComponent" (e.g. a dynamic filter component). 13 | * 14 | *

This annotation serves as a specialization of {@link Component @Component}, 15 | * allowing for implementation classes to be autodetected through classpath scanning. 16 | * It is typically used in combination with annotated handler methods based on the 17 | * {@link DynamicFilter} annotation. 18 | */ 19 | @Retention(RetentionPolicy.RUNTIME) 20 | @Target({ElementType.TYPE}) 21 | @Documented 22 | @Component 23 | public @interface DynamicFilterComponent { 24 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/DynamicFilterEvent.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.comparator.Comparator; 4 | import com.jfilter.components.DynamicFilterProvider; 5 | import com.jfilter.request.RequestSession; 6 | 7 | /** 8 | * Dynamic filter event 9 | * 10 | *

This event calls when {@link DynamicFilterProvider} attempts to 11 | * get {@link FilterFields} from inherited class 12 | */ 13 | public interface DynamicFilterEvent { 14 | 15 | /** 16 | * Request event handler 17 | * 18 | * @param comparator {@link Comparator} comparator object which will be used by {@link DynamicFilterProvider} for retrieve {@link FilterFields} 19 | */ 20 | void onRequest(Comparator comparator); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FieldFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.request.RequestSession; 4 | import org.springframework.core.MethodParameter; 5 | import java.util.Arrays; 6 | 7 | /** 8 | * This class used for simple filtration of object's fields based on FieldFilterSetting configuration 9 | */ 10 | public class FieldFilter extends BaseFilter { 11 | 12 | /** 13 | * Array of {@link FieldFilterSetting} configuration annotations 14 | */ 15 | private FieldFilterSetting[] config; 16 | 17 | /** 18 | * Creates a new instance of the {@link FieldFilter} class. 19 | * 20 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller 21 | */ 22 | public FieldFilter(MethodParameter methodParameter) { 23 | super(methodParameter); 24 | setConfig(methodParameter); 25 | } 26 | 27 | /** 28 | * Attempt to retrieve all FieldFilterSetting annotations from method 29 | * 30 | * @param methodParameter {@link MethodParameter} method parameter 31 | */ 32 | @Override 33 | protected void setConfig(MethodParameter methodParameter) { 34 | config = getRequestMethodParameter().getSettingAnnotations(); 35 | } 36 | 37 | @Override 38 | public FilterFields getFields(Object object, RequestSession request) { 39 | FilterFields result = new FilterFields(); 40 | 41 | for (FieldFilterSetting setting : config) { 42 | result.appendToMap(setting.className(), Arrays.asList(setting.fields())); 43 | result.setFilterBehaviour(setting.behaviour()); 44 | } 45 | 46 | return result; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FieldFilterSetting.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Repeatable; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * This annotation used for configuring of field ignoring 12 | */ 13 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Repeatable(value = FieldFilterSettings.class ) 16 | public @interface FieldFilterSetting { 17 | /** 18 | * Class name of filtering object 19 | * 20 | * @return {@link Class} class name of filterable class 21 | * May be null 22 | */ 23 | Class className() default void.class; 24 | 25 | /** 26 | * 27 | * @return array of filterable items 28 | */ 29 | String[] fields() default {}; 30 | 31 | /** 32 | * 33 | * @return behaviour of filter {@link FilterBehaviour} 34 | */ 35 | FilterBehaviour behaviour() default FilterBehaviour.HIDE_FIELDS; 36 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FieldFilterSettings.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Repeatable annotation of {@link FieldFilterSetting} interface 10 | */ 11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface FieldFilterSettings { 14 | 15 | /** 16 | * Array of {@link FieldFilterSetting} 17 | * 18 | * @return array of {@link FieldFilterSetting} 19 | */ 20 | FieldFilterSetting[] value(); 21 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FileFilterSetting.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * This annotation used for loading and parsing xml file annotated configurations 10 | */ 11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface FileFilterSetting { 14 | 15 | /** 16 | * File name 17 | * 18 | * @return {@link String} file name 19 | * Default location id /resources/ 20 | */ 21 | String fileName() default ""; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FilterBehaviour.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | public enum FilterBehaviour { 4 | /** 5 | * If this option selected, JFilter will hide selected fields. 6 | */ 7 | HIDE_FIELDS, 8 | 9 | 10 | /** 11 | * If this option selected, JFilter will hide all other fields but not selected ones. 12 | */ 13 | KEEP_FIELDS 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FilterEvent.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import org.springframework.core.MethodParameter; 4 | 5 | /** 6 | * Interface used in FilterFactory for configuring list of filters 7 | */ 8 | @FunctionalInterface 9 | public interface FilterEvent { 10 | /** 11 | * Build base {@link BaseFilter} 12 | * 13 | * @param methodParameter {@link MethodParameter} method parameter 14 | * @return object instance of inherited class from {@link BaseFilter} 15 | */ 16 | BaseFilter build(MethodParameter methodParameter); 17 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/FilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import org.springframework.core.MethodParameter; 4 | import java.lang.annotation.Annotation; 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | /** 9 | * Filters factory 10 | */ 11 | public abstract class FilterFactory { 12 | /** 13 | * List of available filters 14 | */ 15 | private static final Map, FilterEvent> filterList = initFilterList(); 16 | 17 | /** 18 | * Creates a new instance of the {@link FilterFactory} class. 19 | * 20 | *

Method is private to prevent of inheritance 21 | * 22 | */ 23 | private FilterFactory() { 24 | } 25 | 26 | /** 27 | * Filter list initialization 28 | * 29 | * @return {@link HashMap} map of filters which can process specified annotations 30 | */ 31 | private static Map, FilterEvent> initFilterList() { 32 | Map, FilterEvent> items = new HashMap<>(); 33 | items.put(FieldFilterSetting.class, FieldFilter::new); 34 | items.put(FieldFilterSettings.class, FieldFilter::new); 35 | items.put(SessionStrategy.class, StrategyFilter::new); 36 | items.put(SessionStrategies.class, StrategyFilter::new); 37 | items.put(FileFilterSetting.class, FileFilter::new); 38 | return items; 39 | } 40 | 41 | /** 42 | * Attempt to find equal annotation in method and in initialized filter list 43 | * 44 | * @param methodParameter {@link MethodParameter} method 45 | * @return {@link Annotation} supported annotation, else null 46 | */ 47 | public static Annotation getFilterAnnotation(MethodParameter methodParameter) { 48 | //Search annotation in method 49 | for (Annotation annotation : methodParameter.getMethod().getDeclaredAnnotations()) { 50 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) 51 | return annotation; 52 | } 53 | 54 | //Search annotation in containing class 55 | for (Annotation annotation : methodParameter.getContainingClass().getDeclaredAnnotations()) { 56 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) 57 | return annotation; 58 | } 59 | return null; 60 | } 61 | 62 | 63 | /** 64 | * Retrieve filter from filter list by annotation defined in method 65 | * 66 | * @param methodParameter {@link MethodParameter} method 67 | * @return object instance of inherited class from {@link BaseFilter} 68 | */ 69 | public static BaseFilter getFromFactory(MethodParameter methodParameter) { 70 | Annotation annotation = getFilterAnnotation(methodParameter); 71 | 72 | if (annotation != null) { 73 | return FilterFactory.filterList 74 | .get(annotation.annotationType()) 75 | .build(methodParameter); 76 | } else 77 | return null; 78 | } 79 | 80 | /** 81 | * Check if specified annotations, which accepted in FieldFilter or StrategyFilter classes is annotated in method 82 | * 83 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller 84 | * @return true if specified annotations is found 85 | */ 86 | public static boolean isAccept(MethodParameter methodParameter) { 87 | //search annotations on method 88 | for (Annotation annotation : methodParameter.getMethod().getDeclaredAnnotations()) { 89 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) { 90 | return true; 91 | } 92 | } 93 | 94 | //search annotations on containing class 95 | for (Annotation annotation : methodParameter.getContainingClass().getDeclaredAnnotations()) { 96 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) { 97 | return true; 98 | } 99 | } 100 | return false; 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/SessionStrategies.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Repeatable annotation of {@link SessionStrategy} interface 10 | */ 11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface SessionStrategies { 14 | /** 15 | * Array of {@link SessionStrategy} 16 | * 17 | * @return array of {@link SessionStrategy} 18 | */ 19 | SessionStrategy[] value(); 20 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/SessionStrategy.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Repeatable; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * This annotation used for configuring of strategy of filtering 12 | */ 13 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE}) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Repeatable(SessionStrategies.class) 16 | public @interface SessionStrategy { 17 | /** 18 | * Session parameter attribute name 19 | * 20 | * @return {@link String} attribute name which will be find in HTTPSession attributes 21 | * May be null 22 | */ 23 | String attributeName() default ""; 24 | 25 | /** 26 | * Session parameter attribute value 27 | * 28 | * @return {@link String} attribute value 29 | * May be null 30 | */ 31 | String attributeValue() default ""; 32 | 33 | /** 34 | * Array of {@link FieldFilterSetting} 35 | * @return array of {@link FieldFilterSetting} which configures of field filtering 36 | */ 37 | FieldFilterSetting[] ignoreFields() default {}; 38 | } -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/StrategyFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.request.RequestSession; 4 | import org.springframework.core.MethodParameter; 5 | 6 | import java.util.Arrays; 7 | 8 | /** 9 | * This class used for strategy filtration of object's fields based on SessionStrategy configuration 10 | */ 11 | public class StrategyFilter extends BaseFilter { 12 | /** 13 | * Array of {@link SessionStrategy} configuration annotations 14 | */ 15 | private SessionStrategy[] config; 16 | 17 | /** 18 | * Creates a new instance of the {@link StrategyFilter} class. 19 | * 20 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller 21 | */ 22 | public StrategyFilter(MethodParameter methodParameter) { 23 | super(methodParameter); 24 | setConfig(methodParameter); 25 | } 26 | 27 | /** 28 | * Attempt to retrieve all FieldFilterSetting annotations from method 29 | * 30 | * @param methodParameter {@link MethodParameter} method parameter 31 | */ 32 | @Override 33 | protected void setConfig(MethodParameter methodParameter) { 34 | config = getRequestMethodParameter().getStrategyAnnotations(methodParameter); 35 | } 36 | 37 | @Override 38 | public FilterFields getFields(Object object, RequestSession request) { 39 | FilterFields result = new FilterFields(); 40 | 41 | for (SessionStrategy strategy : config) { 42 | if (request.isSessionPropertyExists(strategy.attributeName(), 43 | strategy.attributeValue())) { 44 | 45 | for (FieldFilterSetting setting : strategy.ignoreFields()) { 46 | result.appendToMap(setting.className(), Arrays.asList(setting.fields())); 47 | result.setFilterBehaviour(setting.behaviour()); 48 | } 49 | } 50 | } 51 | 52 | return result; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/filter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Filter classes and annotations 3 | * 4 | *

Classes used for specify and process 5 | *

    6 | *
  • Field filter annotations
  • 7 | *
  • Session strategy filter annotations
  • 8 | *
  • File configuration filter annotations
  • 9 | *
  • Dynamic filter annotations
  • 10 | *
11 | */ 12 | 13 | package com.jfilter.filter; -------------------------------------------------------------------------------- /src/main/java/com/jfilter/mapper/FilterObjectMapper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.databind.ObjectWriter; 5 | import com.fasterxml.jackson.databind.ser.FilterProvider; 6 | import com.jfilter.components.FilterConfiguration; 7 | 8 | /** 9 | * FilterObjectMapper class extends standard ObjectMapper 10 | * 11 | *

This class uses FilterObjectWriter insstead of standard ObjectWriter 12 | */ 13 | @SuppressWarnings("Duplicates") 14 | public class FilterObjectMapper extends ObjectMapper { 15 | private static final long serialVersionUID = -7353120387497261652L; 16 | private FilterConfiguration filterConfiguration; 17 | 18 | public FilterObjectMapper(FilterConfiguration filterConfiguration) { 19 | this.filterConfiguration = filterConfiguration; 20 | } 21 | 22 | @Override 23 | public ObjectWriter writer() { 24 | return FilterObjectWriter.congfiguredWriter(this, filterConfiguration); 25 | } 26 | 27 | @Override 28 | public ObjectWriter writerWithView(Class serializationView) { 29 | return FilterObjectWriter.congfiguredWriter(this, serializationView, filterConfiguration); 30 | } 31 | 32 | @Override 33 | public ObjectWriter writer(FilterProvider filterProvider) { 34 | return FilterObjectWriter.congfiguredWriter(this, filterProvider, filterConfiguration); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/mapper/FilterObjectWriter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.core.JsonGenerator; 4 | import com.fasterxml.jackson.core.PrettyPrinter; 5 | import com.fasterxml.jackson.databind.JavaType; 6 | import com.fasterxml.jackson.databind.ObjectMapper; 7 | import com.fasterxml.jackson.databind.ObjectWriter; 8 | import com.fasterxml.jackson.databind.SerializationConfig; 9 | import com.fasterxml.jackson.databind.ser.FilterProvider; 10 | import com.jfilter.components.FilterConfiguration; 11 | import com.jfilter.converter.FilterClassWrapper; 12 | 13 | import java.io.IOException; 14 | 15 | /** 16 | * FilterObjectWriter class extends ObjectWriter 17 | * 18 | *

This class allows using of field filtration features 19 | */ 20 | public class FilterObjectWriter extends ObjectWriter { 21 | private static final long serialVersionUID = -5795887415761168717L; 22 | private FilterConfiguration filterConfiguration; 23 | 24 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, FilterConfiguration filterConfiguration) { 25 | return new FilterObjectWriter(mapper, mapper.getSerializationConfig()) 26 | .setFilterConfiguration(filterConfiguration); 27 | } 28 | 29 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, SerializationConfig config, FilterConfiguration filterConfiguration) { 30 | return new FilterObjectWriter(mapper, config) 31 | .setFilterConfiguration(filterConfiguration); 32 | } 33 | 34 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, Class serializationView, FilterConfiguration filterConfiguration) { 35 | return congfiguredWriter(mapper, mapper.getSerializationConfig().withView(serializationView), filterConfiguration); 36 | } 37 | 38 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, FilterProvider filterProvider, FilterConfiguration filterConfiguration) { 39 | return congfiguredWriter(mapper, mapper.getSerializationConfig().withFilters(filterProvider), filterConfiguration); 40 | } 41 | 42 | 43 | protected FilterObjectWriter(ObjectMapper mapper, SerializationConfig config) { 44 | super(mapper, config); 45 | } 46 | 47 | protected FilterObjectWriter(ObjectWriter base, SerializationConfig config, 48 | GeneratorSettings genSettings, Prefetch prefetch) { 49 | super(base, config, genSettings, prefetch); 50 | } 51 | 52 | @Override 53 | public ObjectWriter forType(JavaType rootType) { 54 | return new FilterObjectWriter(this, _config, _generatorSettings, _prefetch.forRootType(this, rootType)); 55 | } 56 | 57 | public ObjectWriter with(PrettyPrinter pp) { 58 | return new FilterObjectWriter(this, _config, _generatorSettings.with(pp), _prefetch); 59 | } 60 | 61 | public FilterConfiguration getFilterConfiguration() { 62 | return filterConfiguration; 63 | } 64 | 65 | public FilterObjectWriter setFilterConfiguration(FilterConfiguration filterConfiguration) { 66 | this.filterConfiguration = filterConfiguration; 67 | return this; 68 | } 69 | 70 | /** 71 | * Method that can be used to serialize any Java value as 72 | * JSON output, using provided {@link JsonGenerator} 73 | * 74 | * @param gen {@link JsonGenerator} 75 | * @param value serializable object 76 | * @throws IOException exception 77 | */ 78 | @Override 79 | public void writeValue(JsonGenerator gen, Object value) throws IOException { 80 | if (value instanceof FilterClassWrapper) { 81 | FilterClassWrapper wrapper = (FilterClassWrapper) value; 82 | 83 | ObjectMapper objectMapper = filterConfiguration.getObjectMapperCache() 84 | .findObjectMapper(wrapper.getMethodParameterDetails()); 85 | 86 | objectMapper.writeValue(gen, wrapper.getObject()); 87 | } else 88 | super.writeValue(gen, value); 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/mapper/FilterXmlMapper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.databind.ObjectWriter; 4 | import com.fasterxml.jackson.databind.ser.FilterProvider; 5 | import com.fasterxml.jackson.dataformat.xml.XmlMapper; 6 | import com.jfilter.components.FilterConfiguration; 7 | 8 | /** 9 | * FilterObjectMapper class extends standard XmlMapper 10 | * 11 | *

This class uses FilterObjectWriter insstead of standard ObjectWriter 12 | */ 13 | @SuppressWarnings("Duplicates") 14 | public class FilterXmlMapper extends XmlMapper { 15 | private static final long serialVersionUID = 3983476365887537283L; 16 | private FilterConfiguration filterConfiguration; 17 | 18 | public FilterXmlMapper(FilterConfiguration filterConfiguration) { 19 | this.filterConfiguration = filterConfiguration; 20 | } 21 | 22 | @Override 23 | public ObjectWriter writer() { 24 | return FilterObjectWriter.congfiguredWriter(this, filterConfiguration); 25 | } 26 | 27 | @Override 28 | public ObjectWriter writerWithView(Class serializationView) { 29 | return FilterObjectWriter.congfiguredWriter(this, serializationView, filterConfiguration); 30 | } 31 | 32 | @Override 33 | public ObjectWriter writer(FilterProvider filterProvider) { 34 | return FilterObjectWriter.congfiguredWriter(this, getSerializationConfig().withFilters(filterProvider), filterConfiguration); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains main EnableJsonFilter annotation and exceptions 3 | * 4 | */ 5 | 6 | package com.jfilter; -------------------------------------------------------------------------------- /src/main/java/com/jfilter/request/RequestMethodParameter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.request; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.filter.FieldFilterSettings; 5 | import com.jfilter.filter.SessionStrategies; 6 | import com.jfilter.filter.SessionStrategy; 7 | import org.springframework.core.MethodParameter; 8 | import java.lang.annotation.Annotation; 9 | 10 | 11 | /** 12 | * Annotation request class 13 | *

14 | * This is request class used to help find annotations in class or method 15 | */ 16 | public class RequestMethodParameter extends MethodParameter { 17 | 18 | /** 19 | * Creates a new instance of the {@link RequestMethodParameter} class. 20 | * 21 | * @param methodParameter {@link MethodParameter} 22 | */ 23 | public RequestMethodParameter(MethodParameter methodParameter) { 24 | super(methodParameter); 25 | } 26 | 27 | /** 28 | * Search for specified type list of annotation 29 | * 30 | * @param annotationClass {@link Annotation} name of annotation to search 31 | * @param {@link Annotation} generic class 32 | * @return {@link Annotation} list of found annotations if found, else an array of length zero 33 | */ 34 | private T[] getDeclaredAnnotations(Class annotationClass) { 35 | T[] annotations = getMethod().getDeclaredAnnotationsByType(annotationClass); 36 | Class containingClass = getContainingClass(); 37 | annotations = annotations.length != 0 ? annotations : containingClass.getDeclaredAnnotationsByType(annotationClass); 38 | return annotations; 39 | } 40 | 41 | /** 42 | * Get declared annotation 43 | * 44 | *

Attempts to find filter annotations in {@link MethodParameter} or in containing class 45 | * 46 | * @param annotationClass {@link Annotation} name of annotation to search 47 | * @param {@link Annotation} generic class 48 | * @return {@link Annotation} annotation if found, else null 49 | */ 50 | public T getDeclaredAnnotation(Class annotationClass) { 51 | //Get annotation from method 52 | T annotation = getMethod().getDeclaredAnnotation(annotationClass); 53 | //If annotation is null try to get annotation from containing class 54 | annotation = annotation != null ? annotation : getContainingClass().getDeclaredAnnotation(annotationClass); 55 | 56 | return annotation; 57 | } 58 | 59 | /** 60 | * Search for {@link FieldFilterSetting} in method 61 | * 62 | * @return list of {@link FieldFilterSetting} if this type of annotation declared in method 63 | */ 64 | public FieldFilterSetting[] getSettingAnnotations() { 65 | FieldFilterSettings settings = getDeclaredAnnotation(FieldFilterSettings.class); 66 | if (settings != null) { 67 | return settings.value(); 68 | } else 69 | return getDeclaredAnnotations(FieldFilterSetting.class); 70 | } 71 | 72 | /** 73 | * Search for {@link SessionStrategy} in method 74 | * 75 | * @param methodParameter {@link MethodParameter} object's method which may have annotation 76 | * @return list of {@link SessionStrategy} if this type of annotation declared in method 77 | */ 78 | public SessionStrategy[] getStrategyAnnotations(MethodParameter methodParameter) { 79 | SessionStrategies strategies = getDeclaredAnnotation(SessionStrategies.class); 80 | if (strategies != null) { 81 | return strategies.value(); 82 | } else 83 | return getDeclaredAnnotations(SessionStrategy.class); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/request/RequestSession.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.request; 2 | 3 | import org.springframework.http.server.ServerHttpRequest; 4 | import org.springframework.util.StringUtils; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpSession; 7 | import java.util.Enumeration; 8 | import java.util.Objects; 9 | 10 | /** 11 | * Session request class 12 | *

13 | * This is request class used to help working with Http Session 14 | */ 15 | public class RequestSession { 16 | private final HttpSession session; 17 | private final HttpServletRequest request; 18 | 19 | 20 | /** 21 | * Creates a new instance of the {@link RequestSession} class. 22 | * 23 | * @param request {@link HttpServletRequest} 24 | * @throws IllegalArgumentException if request is null. 25 | */ 26 | public RequestSession(HttpServletRequest request) { 27 | if (request == null) 28 | throw new IllegalArgumentException(); 29 | this.request = request; 30 | this.session = request.getSession(); 31 | } 32 | 33 | /** 34 | * Return session extracted from {@link ServerHttpRequest} 35 | * 36 | * @return {@link HttpSession} 37 | */ 38 | public HttpSession getSession() { 39 | return session; 40 | } 41 | 42 | /** 43 | * Return initial request {@link HttpServletRequest} 44 | * 45 | * @return {@link HttpServletRequest} 46 | */ 47 | public HttpServletRequest getRequest() { 48 | return request; 49 | } 50 | 51 | private boolean hasSessionProperty(String propertyName) { 52 | Enumeration e = session.getAttributeNames(); 53 | 54 | while (e.hasMoreElements()) { 55 | String attribute = e.nextElement(); 56 | if (attribute.equals(propertyName)) 57 | return true; 58 | } 59 | return false; 60 | } 61 | 62 | /** 63 | * Get attribute value from session attributes 64 | * 65 | * @param attributeName {@link String} attribute name 66 | * @return {@link Object} attribute value if exists, else null 67 | */ 68 | public Object getSessionProperty(String attributeName) { 69 | return attributeName != null ? session.getAttribute(attributeName) : null; 70 | } 71 | 72 | /** 73 | * Check if session properties has property 74 | *

75 | * Find property with name and value specified in method params 76 | * 77 | * @param attributeName {@link String} attribute name 78 | * @param attributeValue {@link String} expected attribute value 79 | * @return {@link Boolean} true if property with name and value is exist, else false 80 | */ 81 | public boolean isSessionPropertyExists(String attributeName, String attributeValue) { 82 | if (attributeName == null && attributeValue == null) { 83 | return false; 84 | } else if (StringUtils.isEmpty(attributeName) && StringUtils.isEmpty(attributeValue)) { 85 | return true; 86 | } else if (hasSessionProperty(attributeName)) { 87 | Object sessionObject = getSessionProperty(attributeName); 88 | return Objects.equals(sessionObject, attributeValue); 89 | } else 90 | return false; 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/request/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Request method parameter classes 3 | * 4 | *

Classes used for extending standard 5 | *

    6 | *
  • {@link org.springframework.core.MethodParameter} which can contains additional filter annotations
  • 7 | *
  • {@link javax.servlet.http.HttpSession} which contains session parameters which could be used in Session Strategy filtration
  • 8 | *
9 | */ 10 | 11 | package com.jfilter.request; 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/util/FilterUtil.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.util; 2 | 3 | import com.jfilter.components.DynamicSessionFilter; 4 | import com.jfilter.filter.DynamicFilter; 5 | import com.jfilter.filter.FilterFields; 6 | import org.springframework.core.MethodParameter; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpSession; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * Filter utils class 16 | */ 17 | public class FilterUtil { 18 | 19 | private FilterUtil() { 20 | throw new IllegalStateException("FilterUtil class"); 21 | } 22 | 23 | /** 24 | * Sets filterFields object into http request ATTRIBUTE_FILTER_FIELDS attribute 25 | * 26 | * @param request {@link HttpServletRequest} http request 27 | * @param filterFields {@link FilterFields} instance of FilterFields 28 | */ 29 | public static void useFilter(HttpServletRequest request, FilterFields filterFields) { 30 | request.setAttribute(DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS, filterFields); 31 | } 32 | 33 | /** 34 | * Sets filterFields object into http session ATTRIBUTE_FILTER_FIELDS attribute 35 | * 36 | * @param session {@link HttpSession} http session 37 | * @param filterFields {@link FilterFields} instance of FilterFields 38 | */ 39 | public static void useFilter(HttpSession session, FilterFields filterFields) { 40 | session.setAttribute(DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS, filterFields); 41 | } 42 | 43 | /** 44 | * Extract DynamicFilter from class annotated with DynamicFilter annotation and containing current method 45 | * 46 | * @param methodParameter method which contains in class annotated with {@link RestController} 47 | * @param annotationClass class inherited from {@link DynamicFilter} 48 | * @param generic of {@link DynamicFilter} 49 | * @return object inherited from {@link DynamicFilter} 50 | */ 51 | @SuppressWarnings("unchecked") 52 | public static T getClassDeclaredAnnotation(MethodParameter methodParameter, Class annotationClass) { 53 | return (T) methodParameter.getContainingClass().getDeclaredAnnotation(annotationClass); 54 | } 55 | 56 | /** 57 | * Extract DynamicFilter from method annotated with DynamicFilter annotation 58 | * 59 | * @param methodParameter method which contains in class annotated with {@link RestController} 60 | * @param annotationClass class inherited from {@link DynamicFilter} 61 | * @param generic of {@link DynamicFilter} 62 | * @return object inherited from {@link DynamicFilter} 63 | */ 64 | @SuppressWarnings("unchecked") 65 | public static T getMethodDeclaredAnnotation(MethodParameter methodParameter, Class annotationClass) { 66 | return (T) methodParameter.getMethod().getDeclaredAnnotation(annotationClass); 67 | } 68 | 69 | public static List getDeclaredAnnotations(MethodParameter methodParameter, Class annotationClass) { 70 | List annotations = new ArrayList<>(); 71 | T classAnnotation = getClassDeclaredAnnotation(methodParameter, annotationClass); 72 | T methodAnnotation = getMethodDeclaredAnnotation(methodParameter, annotationClass); 73 | 74 | if (classAnnotation != null) 75 | annotations.add(classAnnotation); 76 | if (methodAnnotation != null) 77 | annotations.add(methodAnnotation); 78 | 79 | return annotations; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/main/java/com/jfilter/util/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains utility classes 3 | * 4 | */ 5 | 6 | package com.jfilter.util; -------------------------------------------------------------------------------- /src/test/java/com/jfilter/FilterConstantsHelperTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | import org.junit.Test; 4 | import java.lang.reflect.InvocationTargetException; 5 | 6 | public class FilterConstantsHelperTest { 7 | 8 | @Test(expected = InvocationTargetException.class) 9 | public void constructorTest() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { 10 | TestUtils.instantiateObject(FilterConstantsHelper.class); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/FilterExceptionTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | import org.junit.Test; 4 | import static org.junit.Assert.assertNotNull; 5 | 6 | public class FilterExceptionTest { 7 | 8 | @Test(expected = FilterException.class) 9 | public void testException() { 10 | FilterException exception =new FilterException(new IllegalAccessException()); 11 | assertNotNull(exception); 12 | 13 | throw exception; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/TestUtils.java: -------------------------------------------------------------------------------- 1 | package com.jfilter; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.InvocationTargetException; 5 | 6 | public class TestUtils { 7 | 8 | @SuppressWarnings("unchecked") 9 | public static Object instantiateObject(Class clazz) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { 10 | Constructor constructor = clazz.getDeclaredConstructor(); 11 | constructor.setAccessible(true); 12 | return constructor.newInstance(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/DynamicClassFilterWSTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.FilterFields; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationHelper; 8 | import org.junit.Test; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.stereotype.Component; 11 | import org.springframework.test.web.servlet.MockMvc; 12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 13 | import org.springframework.web.context.WebApplicationContext; 14 | 15 | import java.util.Arrays; 16 | 17 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS; 18 | import static com.jfilter.mock.webservice.WSClassDynamicFilter.MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER; 19 | import static junit.framework.TestCase.assertEquals; 20 | 21 | @Component 22 | public class DynamicClassFilterWSTest { 23 | private MockMvc mockMvc; 24 | private FilterConfiguration filterConfiguration; 25 | 26 | @Autowired 27 | public DynamicClassFilterWSTest setFilterConfiguration(FilterConfiguration filterConfiguration) { 28 | this.filterConfiguration = filterConfiguration; 29 | return this; 30 | } 31 | 32 | @Autowired 33 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) { 34 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 35 | } 36 | 37 | @Test 38 | public void testWSDynamicNotNullFilter() throws Exception { 39 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 40 | 41 | filterConfiguration.setEnabled(true); 42 | MockUser user = MockClassesHelper.getUserMock(); 43 | user.setId(null); 44 | user.setPassword(null); 45 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER, ATTRIBUTE_FILTER_FIELDS, 46 | new FilterFields(MockUser.class, Arrays.asList("id", "password"))); 47 | assertEquals(user.toString(), result); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/DynamicFilterProviderITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.DynamicFilterEvent; 4 | import com.jfilter.mock.MockHttpRequestHelper; 5 | import com.jfilter.mock.MockMethods; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationEnabled; 8 | import com.jfilter.request.RequestSession; 9 | import com.jfilter.filter.FilterFields; 10 | import org.junit.After; 11 | import org.junit.Before; 12 | import org.junit.Test; 13 | import org.junit.runner.RunWith; 14 | import org.springframework.beans.factory.annotation.Autowired; 15 | import org.springframework.core.MethodParameter; 16 | import org.springframework.test.context.ContextConfiguration; 17 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 18 | import org.springframework.test.context.web.WebAppConfiguration; 19 | 20 | import java.lang.reflect.Field; 21 | import java.lang.reflect.InvocationTargetException; 22 | import java.lang.reflect.Method; 23 | import java.util.Arrays; 24 | import java.util.Map; 25 | 26 | import static org.junit.Assert.assertEquals; 27 | import static org.junit.Assert.assertNotEquals; 28 | import static org.junit.Assert.assertNotNull; 29 | 30 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 31 | @RunWith(SpringJUnit4ClassRunner.class) 32 | @WebAppConfiguration 33 | public class DynamicFilterProviderITest { 34 | private DynamicFilterProvider dynamicFilterProvider; 35 | private FilterFields filterFields; 36 | 37 | @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") 38 | @Autowired 39 | public DynamicFilterProviderITest setDynamicFilterProvider(DynamicFilterProvider dynamicFilterProvider) { 40 | this.dynamicFilterProvider = dynamicFilterProvider; 41 | return this; 42 | } 43 | 44 | @Before 45 | public void init() { 46 | filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password")); 47 | } 48 | 49 | @After 50 | public void deInit() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { 51 | Method method = dynamicFilterProvider.getClass().getDeclaredMethod("findDynamicFilters"); 52 | method.setAccessible(true); 53 | method.invoke(dynamicFilterProvider); 54 | } 55 | 56 | @Test 57 | public void testWithAnnotation() { 58 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 59 | 60 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields)); 61 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 62 | 63 | assertEquals(filterFields, found); 64 | } 65 | 66 | @Test 67 | public void testWithoutAnnotation() { 68 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations(); 69 | 70 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields)); 71 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 72 | 73 | assertNotEquals(filterFields, found); 74 | } 75 | 76 | @Test 77 | public void testWithAnnotationWithEmptySession() { 78 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 79 | 80 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(null)); 81 | 82 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 83 | 84 | assertNotNull(found); 85 | } 86 | 87 | @Test 88 | @SuppressWarnings({"unchecked", "rawtypes"}) 89 | public void testWithAnnotationAndEmptyMap() throws NoSuchFieldException, IllegalAccessException { 90 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 91 | 92 | Field field = dynamicFilterProvider.getClass().getDeclaredField("dynamicFilterMap"); 93 | field.setAccessible(true); 94 | 95 | Map dynamicFilterMap = (Map)field.get(dynamicFilterProvider); 96 | dynamicFilterMap.clear(); 97 | 98 | 99 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields)); 100 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 101 | 102 | assertEquals(new FilterFields(), found); 103 | } 104 | 105 | @Test 106 | public void testGetFilterFieldsDynamicFilterNull() { 107 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields)); 108 | FilterFields filterFields = dynamicFilterProvider.getFilterFields(null, requestSession); 109 | assertEquals(filterFields, FilterFields.EMPTY_FIELDS.get()); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/DynamicFilterWSTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.FilterFields; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationHelper; 8 | import org.junit.Test; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.stereotype.Component; 11 | import org.springframework.test.web.servlet.MockMvc; 12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 13 | import org.springframework.web.context.WebApplicationContext; 14 | import java.util.Arrays; 15 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS; 16 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_NOT_NULL_DYNAMIC_FILTER; 17 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_NULL_DYNAMIC_FILTER; 18 | import static junit.framework.TestCase.assertEquals; 19 | 20 | @Component 21 | public class DynamicFilterWSTest { 22 | private MockMvc mockMvc; 23 | private FilterConfiguration filterConfiguration; 24 | 25 | @Autowired 26 | public DynamicFilterWSTest setFilterConfiguration(FilterConfiguration filterConfiguration) { 27 | this.filterConfiguration = filterConfiguration; 28 | return this; 29 | } 30 | 31 | @Autowired 32 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) { 33 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 34 | } 35 | 36 | @Test 37 | public void testWSDynamicNotNullFilter() throws Exception { 38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 39 | filterConfiguration.setEnabled(true); 40 | MockUser user = MockClassesHelper.getUserMock(); 41 | user.setId(null); 42 | user.setPassword(null); 43 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NOT_NULL_DYNAMIC_FILTER, ATTRIBUTE_FILTER_FIELDS, 44 | new FilterFields(MockUser.class, Arrays.asList("id", "password"))); 45 | assertEquals(user.toString(), result); 46 | } 47 | 48 | @Test 49 | public void testWSDynamicNullFilter() throws Exception { 50 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 51 | MockUser user = MockClassesHelper.getUserMock(); 52 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NULL_DYNAMIC_FILTER, ATTRIBUTE_FILTER_FIELDS, 53 | new FilterFields(MockUser.class, Arrays.asList("id", "password"))); 54 | assertEquals(user.toString(), result); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/DynamicSessionFilterITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.MockClassesHelper; 4 | import com.jfilter.mock.MockHttpRequestHelper; 5 | import com.jfilter.mock.MockUser; 6 | import com.jfilter.mock.config.WSConfigurationHelper; 7 | import com.jfilter.mock.config.WSConfigurationEnabled; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.test.context.ContextConfiguration; 12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 | import org.springframework.test.context.web.WebAppConfiguration; 14 | import org.springframework.test.web.servlet.MockMvc; 15 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 16 | import org.springframework.web.context.WebApplicationContext; 17 | 18 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS; 19 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS; 20 | import static junit.framework.TestCase.assertEquals; 21 | 22 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 23 | @RunWith(SpringJUnit4ClassRunner.class) 24 | @WebAppConfiguration 25 | public class DynamicSessionFilterITest { 26 | private MockMvc mockMvc; 27 | 28 | @Autowired 29 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) { 30 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 31 | } 32 | 33 | @Test 34 | public void testDynamicSessionAttributeFields() throws Exception { 35 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 36 | MockUser user = MockClassesHelper.getUserMock(); 37 | user.setId(null) 38 | .setEmail(null) 39 | .setPassword(null); 40 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS); 41 | assertEquals(user.toString(), result); 42 | } 43 | 44 | @Test 45 | public void testDynamicRequestAttributeFields() throws Exception { 46 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 47 | MockUser user = MockClassesHelper.getUserMock(); 48 | user.setId(null) 49 | .setEmail(null) 50 | .setPassword(null); 51 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS); 52 | assertEquals(user.toString(), result); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FileRecordTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.FileFilter; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | import java.io.File; 8 | 9 | import static org.junit.Assert.assertNotNull; 10 | import static org.junit.Assert.assertEquals; 11 | import static org.junit.Assert.assertTrue; 12 | import static org.junit.Assert.assertFalse; 13 | 14 | public class FileRecordTest { 15 | private FileWatcher.FileRecord fileRecord; 16 | private File file; 17 | private String eventResult; 18 | 19 | @Before 20 | public void init() { 21 | file = FileFilter.resourceFile("config.xml"); 22 | assertNotNull(file); 23 | 24 | fileRecord = new FileWatcher.FileRecord(file, f -> eventResult = f.getAbsoluteFile().toString()); 25 | } 26 | 27 | @Test 28 | public void testGetLastModified() { 29 | assertEquals(file.lastModified(), fileRecord.getLastModified().longValue()); 30 | } 31 | 32 | @Test 33 | public void testSetLastModified() { 34 | fileRecord.setLastModified(0L); 35 | assertEquals(0, fileRecord.getLastModified().longValue()); 36 | } 37 | 38 | @Test 39 | public void testOnEvent() { 40 | fileRecord.onEvent(); 41 | assertEquals(file.getAbsoluteFile().toString(), eventResult); 42 | } 43 | 44 | @Test 45 | public void testOnEventTrue() { 46 | boolean result = fileRecord.onEvent(); 47 | assertTrue(result); 48 | } 49 | 50 | @Test 51 | public void testOnEventFalse() { 52 | FileWatcher.FileRecord fileRecord2 = new FileWatcher.FileRecord(file, null); 53 | boolean result = fileRecord2.onEvent(); 54 | 55 | assertFalse(result); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FileWatcherITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.FileFilter; 4 | import com.jfilter.mock.MockFile; 5 | import com.jfilter.mock.config.WSConfigurationEnabled; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor; 11 | import org.springframework.test.context.ContextConfiguration; 12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 | import org.springframework.test.context.web.WebAppConfiguration; 14 | import java.io.File; 15 | import java.io.IOException; 16 | import java.util.concurrent.atomic.AtomicBoolean; 17 | import static java.util.concurrent.TimeUnit.SECONDS; 18 | import static org.awaitility.Awaitility.await; 19 | import static org.junit.Assert.assertFalse; 20 | import static org.junit.Assert.assertNotNull; 21 | import static org.junit.Assert.assertTrue; 22 | 23 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 24 | @RunWith(SpringJUnit4ClassRunner.class) 25 | @WebAppConfiguration 26 | public class FileWatcherITest { 27 | private File file; 28 | private AtomicBoolean modified; 29 | private FileWatcher fileWatcher; 30 | private ScheduledAnnotationBeanPostProcessor taskScheduler; 31 | 32 | @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") 33 | @Autowired 34 | public void setTaskScheduler(ScheduledAnnotationBeanPostProcessor taskScheduler) { 35 | this.taskScheduler = taskScheduler; 36 | } 37 | 38 | @Autowired 39 | public FileWatcherITest setFileWatcher(FileWatcher fileWatcher) { 40 | this.fileWatcher = fileWatcher; 41 | return this; 42 | } 43 | 44 | @Before 45 | public void init() { 46 | modified = new AtomicBoolean(false); 47 | assertNotNull(fileWatcher); 48 | 49 | file = FileFilter.resourceFile("config.xml"); 50 | assertNotNull(file); 51 | 52 | fileWatcher.add(file, (f) -> modified.set(true)); 53 | } 54 | 55 | @Test 56 | public void testAdd() { 57 | boolean result = fileWatcher.add(file, (f) -> modified.set(true)); 58 | assertTrue(result); 59 | } 60 | 61 | @Test 62 | public void testAddTwice() { 63 | boolean addedOne = fileWatcher.add(file, (f) -> modified.set(true)); 64 | boolean addedTwo = fileWatcher.add(file, (f) -> modified.set(true)); 65 | assertTrue(addedOne && addedTwo); 66 | } 67 | 68 | @Test 69 | public void testUnExistResourceFile() { 70 | boolean result = fileWatcher.add(FileFilter.resourceFile("un_exist_config.xml"), (f) -> modified.set(true)); 71 | assertFalse(result); 72 | } 73 | 74 | @Test 75 | public void testUnExistFile() { 76 | boolean result = fileWatcher.add(new File("un_exist_config.xml"), (f) -> modified.set(true)); 77 | assertFalse(result); 78 | } 79 | 80 | @Test 81 | public void testFileIsModifiedFalseInternally() { 82 | boolean result = fileWatcher.fileIsModified(file); 83 | assertFalse(result); 84 | } 85 | 86 | @Test 87 | public void testAfterIOException() { 88 | boolean add = fileWatcher.add(new MockFile("unknown_path"), (f) -> modified.set(true)); 89 | assertFalse(add); 90 | } 91 | 92 | @Test 93 | public void testFileIsModified() { 94 | boolean result = fileWatcher.fileIsModified(new File("")); 95 | assertFalse(result); 96 | } 97 | 98 | @Test 99 | public void testClose() throws IOException { 100 | fileWatcher.destroy(); 101 | assertTrue(fileWatcher.isClosed()); 102 | } 103 | 104 | @Test 105 | public void testWatchSchedulerInterruptedException() { 106 | taskScheduler.destroy(); 107 | await().atMost(10, SECONDS).until(() -> fileWatcher.isClosed()); 108 | try { 109 | fileWatcher.scheduleModifiedFiles(); 110 | } catch (Exception e) { 111 | e.printStackTrace(); 112 | fileWatcher.scheduleModifiedFiles(); 113 | } 114 | assertTrue(fileWatcher.isClosed()); 115 | } 116 | 117 | @Test 118 | public void testWatchSchedulerClosedException() throws IOException { 119 | fileWatcher.getWatcher().close(); 120 | await().atMost(5, SECONDS).until(() -> fileWatcher.isClosed()); 121 | fileWatcher.scheduleModifiedFiles(); 122 | assertTrue(fileWatcher.isClosed()); 123 | 124 | fileWatcher.setClosed(false); 125 | fileWatcher.scheduleModifiedFiles(); 126 | assertTrue(fileWatcher.isClosed()); 127 | } 128 | 129 | 130 | } 131 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FileWatcherOverflowITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.config.WSConfigurationHelper; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Component; 8 | import java.io.File; 9 | import java.io.IOException; 10 | import java.nio.file.Files; 11 | import java.nio.file.Path; 12 | import java.nio.file.Paths; 13 | import java.nio.file.StandardWatchEventKinds; 14 | import java.util.Date; 15 | 16 | import static java.util.concurrent.TimeUnit.SECONDS; 17 | import static org.awaitility.Awaitility.await; 18 | import static org.junit.Assert.assertTrue; 19 | 20 | @Component 21 | public class FileWatcherOverflowITest { 22 | private FileWatcher fileWatcher; 23 | 24 | @Autowired 25 | public void setFileWatcher(FileWatcher fileWatcher) { 26 | this.fileWatcher = fileWatcher; 27 | } 28 | 29 | @Before 30 | public void init() throws Exception { 31 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 32 | } 33 | 34 | @SuppressWarnings("ResultOfMethodCallIgnored") 35 | @Test 36 | public void testOverflowKey() throws IOException { 37 | int fileCount = 200; 38 | Path directory = Files.createTempDirectory("watch-service-overflow"); 39 | 40 | directory.register( 41 | fileWatcher.getWatcher(), 42 | StandardWatchEventKinds.ENTRY_CREATE, 43 | StandardWatchEventKinds.ENTRY_DELETE, 44 | StandardWatchEventKinds.ENTRY_MODIFY); 45 | final Path p = directory.resolve(Paths.get("TEMPORARY_FILE")); 46 | for (int i = 0; i < fileCount; i++) { 47 | File createdFile = Files.createFile(p).toFile(); 48 | createdFile.setLastModified(new Date().getTime() + 60); 49 | Files.delete(p); 50 | } 51 | Files.delete(directory); 52 | 53 | await().atMost(60, SECONDS).until(() -> fileWatcher.isOverflowed()); 54 | assertTrue(fileWatcher.isOverflowed()); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterAdviceITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.MockMethods; 4 | import com.jfilter.mock.config.WSConfigurationHelper; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Component; 9 | 10 | import static org.junit.Assert.assertFalse; 11 | import static org.junit.Assert.assertNotNull; 12 | import static org.junit.Assert.assertTrue; 13 | 14 | @Component 15 | public class FilterAdviceITest { 16 | private FilterAdvice filterAdvice; 17 | private FilterConfiguration filterConfiguration; 18 | 19 | @Autowired 20 | public FilterAdviceITest setFilterAdvice(FilterAdvice filterAdvice) { 21 | this.filterAdvice = filterAdvice; 22 | return this; 23 | } 24 | 25 | @Autowired 26 | public FilterAdviceITest setFilterConfiguration(FilterConfiguration filterConfiguration) { 27 | this.filterConfiguration = filterConfiguration; 28 | return this; 29 | } 30 | 31 | @Before 32 | public void init() throws Exception { 33 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this); 34 | filterConfiguration.setEnabled(true); 35 | } 36 | 37 | @Test 38 | public void testNotNull() { 39 | assertNotNull(filterAdvice); 40 | } 41 | 42 | @Test 43 | public void testSupports() { 44 | boolean supports = filterAdvice.supports(MockMethods.singleAnnotation(), null); 45 | assertTrue(supports); 46 | } 47 | 48 | @Test 49 | public void testNotSupports() { 50 | filterConfiguration.setEnabled(false); 51 | boolean supports = filterAdvice.supports(MockMethods.singleAnnotation(), null); 52 | assertFalse(supports); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterConfigurationCustomConvertersITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | 4 | import com.jfilter.mock.config.WSConfigurationHelper; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Component; 9 | import static junit.framework.TestCase.assertEquals; 10 | 11 | @Component 12 | public class FilterConfigurationCustomConvertersITest { 13 | private FilterConfiguration filterConfiguration; 14 | 15 | @Autowired(required = false) 16 | public FilterConfigurationCustomConvertersITest setFilterProvider(FilterConfiguration filterConfiguration) { 17 | this.filterConfiguration = filterConfiguration; 18 | return this; 19 | } 20 | 21 | @Before 22 | public void init() throws Exception { 23 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_USE_CUSTOM_CONVERTERS, this); 24 | } 25 | 26 | @Test 27 | public void testCustomControllersSize() { 28 | assertEquals(2, filterConfiguration.getCustomConverters().size()); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterConverterITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.converter.FilterClassWrapper; 4 | import com.jfilter.filter.FilterFields; 5 | import com.jfilter.mock.config.WSConfigurationHelper; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.http.MediaType; 10 | import org.springframework.mock.http.MockHttpInputMessage; 11 | import org.springframework.stereotype.Component; 12 | 13 | import java.io.IOException; 14 | 15 | import static org.junit.Assert.assertFalse; 16 | import static org.junit.Assert.assertNull; 17 | import static org.junit.Assert.assertTrue; 18 | 19 | @Component 20 | public class FilterConverterITest { 21 | private FilterConfiguration filterConfiguration; 22 | private FilterConverter filterConverter; 23 | 24 | @Autowired 25 | public FilterConverterITest setFilterConfiguration(FilterConfiguration filterConfiguration) { 26 | this.filterConfiguration = filterConfiguration; 27 | return this; 28 | } 29 | 30 | @Before 31 | public void init() throws Exception { 32 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this); 33 | filterConfiguration.setEnabled(true); 34 | 35 | filterConverter = new FilterConverter(filterConfiguration); 36 | } 37 | 38 | @Test 39 | public void testCanRead() { 40 | boolean canRead = filterConverter.canRead(null, MediaType.APPLICATION_JSON); 41 | assertFalse(canRead); 42 | } 43 | 44 | @Test 45 | public void testRead() throws IOException { 46 | FilterClassWrapper wrapper = (FilterClassWrapper) filterConverter.read(null, new MockHttpInputMessage("test".getBytes())); 47 | assertNull(wrapper); 48 | } 49 | 50 | @Test 51 | public void testCanWrite() { 52 | boolean canWrite = filterConverter.canWrite(null, MediaType.APPLICATION_JSON); 53 | assertTrue(canWrite); 54 | } 55 | 56 | @Test 57 | public void testCanWriteFalse() { 58 | boolean canWrite = filterConverter.canWrite(null, new MediaType("application", "test2")); 59 | assertFalse(canWrite); 60 | } 61 | 62 | @Test 63 | public void testCanWriteDisabled() { 64 | filterConfiguration.setEnabled(false); 65 | boolean canWrite = filterConverter.canWrite(null, MediaType.APPLICATION_JSON); 66 | assertFalse(canWrite); 67 | } 68 | 69 | @Test 70 | public void testSupportsTrue() { 71 | filterConfiguration.setEnabled(true); 72 | boolean supports = filterConverter.supports(FilterFields.class); 73 | assertTrue(supports); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterObjectMapperBuilderTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig; 5 | import com.fasterxml.jackson.databind.module.SimpleSerializers; 6 | import com.fasterxml.jackson.databind.ser.BasicSerializerFactory; 7 | import com.fasterxml.jackson.databind.ser.Serializers; 8 | import com.fasterxml.jackson.datatype.jdk8.Jdk8Serializers; 9 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 10 | import com.jfilter.converter.SerializationConfig; 11 | import com.jfilter.filter.FilterFields; 12 | import org.junit.Before; 13 | import org.junit.Test; 14 | 15 | import static org.junit.Assert.assertFalse; 16 | import static org.junit.Assert.assertTrue; 17 | 18 | public class FilterObjectMapperBuilderTest { 19 | private ObjectMapper filterObjectMapperTrue; 20 | private ObjectMapper filterObjectMapperFalse; 21 | 22 | private boolean serializerExist(Iterable serializers, Class serializer) { 23 | while (serializers.iterator().hasNext()) { 24 | if (serializers.iterator().next().getClass().equals(serializer)) 25 | return true; 26 | } 27 | return false; 28 | } 29 | 30 | @Before 31 | public void init() { 32 | SerializationConfig configTrue = new SerializationConfig(); 33 | SerializationConfig configFalse = new SerializationConfig() 34 | .enableDateTimeModule(false); 35 | 36 | filterObjectMapperTrue = new FilterObjectMapperBuilder(new ObjectMapper()) 37 | .withFilterFields(new FilterFields()) 38 | .withSetSerializationConfig(configTrue) 39 | .build(); 40 | 41 | filterObjectMapperFalse = new FilterObjectMapperBuilder(new ObjectMapper()) 42 | .withFilterFields(null) 43 | .withSetSerializationConfig(configFalse) 44 | .build(); 45 | } 46 | 47 | private SerializerFactoryConfig getFactoryConfig(ObjectMapper objectMapper) { 48 | BasicSerializerFactory serializationConfig = (BasicSerializerFactory) objectMapper.getSerializerFactory(); 49 | return serializationConfig.getFactoryConfig(); 50 | } 51 | 52 | private boolean registeredModule(ObjectMapper objectMapper, String moduleName) { 53 | try { 54 | return objectMapper.getRegisteredModuleIds().stream().anyMatch(m -> ((String) m).contains(moduleName)); 55 | } catch (NullPointerException e) { 56 | return false; 57 | } 58 | } 59 | 60 | @Test 61 | public void testConfigureSerializersTrue() { 62 | SerializerFactoryConfig serializerFactoryConfig = getFactoryConfig(filterObjectMapperTrue); 63 | 64 | boolean jdk8SerializerExist = serializerExist(serializerFactoryConfig.serializers(), Jdk8Serializers.class); 65 | assertTrue(jdk8SerializerExist); 66 | 67 | boolean simpleSerializerExist = serializerExist(serializerFactoryConfig.serializers(), SimpleSerializers.class); 68 | assertTrue(simpleSerializerExist); 69 | } 70 | 71 | @Test 72 | public void testRegisteredModulesTrue() { 73 | boolean timeModuleExist = registeredModule(filterObjectMapperTrue, JavaTimeModule.class.getName()); 74 | assertTrue(timeModuleExist); 75 | } 76 | 77 | @Test 78 | public void testConfigureSerializersFalse() { 79 | SerializerFactoryConfig serializerFactoryConfig = getFactoryConfig(filterObjectMapperFalse); 80 | 81 | boolean jdk8SerializerExist = serializerExist(serializerFactoryConfig.serializers(), Jdk8Serializers.class); 82 | assertFalse(jdk8SerializerExist); 83 | 84 | boolean simpleSerializerExist = serializerExist(serializerFactoryConfig.serializers(), SimpleSerializers.class); 85 | assertFalse(simpleSerializerExist); 86 | } 87 | 88 | @Test 89 | public void testRegisteredModulesFalse() { 90 | boolean timeModuleExist = registeredModule(filterObjectMapperFalse, JavaTimeModule.class.getName()); 91 | assertFalse(timeModuleExist); 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterProviderITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.BaseFilter; 4 | import com.jfilter.mock.MockMethods; 5 | import com.jfilter.mock.config.WSConfigurationHelper; 6 | import org.junit.Test; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.context.annotation.Configuration; 9 | import org.springframework.core.MethodParameter; 10 | import org.springframework.web.context.WebApplicationContext; 11 | 12 | import static org.junit.Assert.assertTrue; 13 | import static org.junit.Assert.assertFalse; 14 | import static org.junit.Assert.assertNotNull; 15 | import static org.junit.Assert.assertNull; 16 | 17 | @Configuration 18 | public class FilterProviderITest { 19 | @Autowired 20 | private WebApplicationContext webApplicationContext; 21 | 22 | private FilterProvider filterProvider; 23 | 24 | @Autowired(required = false) 25 | public FilterProviderITest setFilterProvider(FilterProvider filterProvider) { 26 | this.filterProvider = filterProvider; 27 | return this; 28 | } 29 | 30 | @Test 31 | public void testIsEnabledTrue() throws Exception { 32 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 33 | 34 | boolean result = FilterProvider.isFilterEnabled(webApplicationContext); 35 | 36 | assertTrue(result); 37 | } 38 | 39 | @Test 40 | public void testIsEnabledFalse() throws Exception { 41 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_DISABLED, this); 42 | boolean result = FilterProvider.isFilterEnabled(webApplicationContext); 43 | 44 | assertFalse(result); 45 | } 46 | 47 | @Test 48 | public void testGetFilter() throws Exception { 49 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 50 | MethodParameter methodParameter = MockMethods.singleAnnotation(); 51 | 52 | BaseFilter filter = filterProvider.getFilter(methodParameter); 53 | 54 | assertNotNull(filter); 55 | } 56 | 57 | @Test 58 | public void testGetFilterNull() throws Exception { 59 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 60 | MethodParameter methodParameter = MockMethods.methodWithLazyAnnotation(); 61 | 62 | BaseFilter filter = filterProvider.getFilter(methodParameter); 63 | 64 | assertNull(filter); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterProviderTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.filter.BaseFilter; 4 | import com.jfilter.mock.MockMethods; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | import org.springframework.core.MethodParameter; 8 | import static org.junit.Assert.assertNotNull; 9 | import static org.junit.Assert.assertFalse; 10 | import static org.junit.Assert.assertTrue; 11 | import static org.junit.Assert.assertEquals; 12 | 13 | public class FilterProviderTest { 14 | private FilterProvider filterProvider; 15 | private MethodParameter fileAnnotationMethod; 16 | private MethodParameter fileAnnotationYamlMethod; 17 | private MethodParameter methodWithoutAnnotationsMethod; 18 | 19 | @Before 20 | public void init() { 21 | filterProvider = new FilterProvider(); 22 | 23 | fileAnnotationMethod = MockMethods.fileAnnotation(); 24 | fileAnnotationYamlMethod = MockMethods.fileAnnotationYaml(); 25 | assertNotNull(fileAnnotationMethod); 26 | assertNotNull(fileAnnotationYamlMethod); 27 | 28 | methodWithoutAnnotationsMethod = MockMethods.methodWithoutAnnotations(); 29 | assertNotNull(methodWithoutAnnotationsMethod); 30 | } 31 | 32 | @Test 33 | public void testIsAcceptFalse() { 34 | boolean result = filterProvider.isAccept(methodWithoutAnnotationsMethod); 35 | assertFalse(result); 36 | } 37 | 38 | @Test 39 | public void testCacheSizeGreaterZero() { 40 | BaseFilter filter = filterProvider.getFilter(fileAnnotationMethod); 41 | assertNotNull(filter); 42 | 43 | assertTrue(filterProvider.cacheSize() > 0); 44 | } 45 | 46 | @Test 47 | public void testCacheSizeZero() { 48 | BaseFilter filter = filterProvider.getFilter(fileAnnotationMethod); 49 | assertNotNull(filter); 50 | 51 | filterProvider.clearCache(); 52 | assertEquals(0, filterProvider.cacheSize()); 53 | } 54 | 55 | @Test 56 | public void testCacheSizeGreaterZeroYaml() { 57 | BaseFilter filter = filterProvider.getFilter(fileAnnotationYamlMethod); 58 | assertNotNull(filter); 59 | 60 | assertTrue(filterProvider.cacheSize() > 0); 61 | } 62 | 63 | @Test 64 | public void testCacheSizeZeroYaml() { 65 | BaseFilter filter = filterProvider.getFilter(fileAnnotationYamlMethod); 66 | assertNotNull(filter); 67 | 68 | filterProvider.clearCache(); 69 | assertEquals(0, filterProvider.cacheSize()); 70 | } 71 | 72 | 73 | } 74 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterRegisterDefaultConvertersITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.MockUtils; 4 | import com.jfilter.mock.config.WSConfigurationHelper; 5 | import org.junit.Test; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.context.event.ContextRefreshedEvent; 8 | import org.springframework.context.event.EventListener; 9 | import org.springframework.stereotype.Component; 10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | import java.util.concurrent.TimeUnit; 15 | import java.util.concurrent.atomic.AtomicBoolean; 16 | 17 | import static org.awaitility.Awaitility.await; 18 | import static org.junit.Assert.assertTrue; 19 | 20 | @Component 21 | public class FilterRegisterDefaultConvertersITest { 22 | private RequestMappingHandlerAdapter handlerAdapter; 23 | private static final List registeredConverters = new ArrayList<>(); 24 | private static final AtomicBoolean changed = new AtomicBoolean(false); 25 | 26 | @Autowired(required = false) 27 | public FilterRegisterDefaultConvertersITest setHandlerAdapter(RequestMappingHandlerAdapter handlerAdapter) { 28 | this.handlerAdapter = handlerAdapter; 29 | return this; 30 | } 31 | 32 | @EventListener 33 | public void handleContextRefresh(ContextRefreshedEvent event) { 34 | MockUtils.copyConverters(FilterRegisterDefaultConvertersITest.registeredConverters, handlerAdapter); 35 | FilterRegisterDefaultConvertersITest.changed.set(true); 36 | } 37 | 38 | @Test 39 | public void testConfigureMessageConvertersEnabled() throws Exception { 40 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_USE_DEFAULT_CONVERTERS, this); 41 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterDefaultConvertersITest.changed); 42 | boolean contain = FilterRegisterDefaultConvertersITest.registeredConverters.size() >= 2 && 43 | MockUtils.beanFilterConverterLoaded(FilterRegisterDefaultConvertersITest.registeredConverters); 44 | assertTrue(contain); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/FilterRegisterITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.MockUtils; 4 | import com.jfilter.mock.config.WSConfigurationHelper; 5 | import org.junit.Test; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.context.event.ContextRefreshedEvent; 8 | import org.springframework.context.event.EventListener; 9 | import org.springframework.stereotype.Component; 10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | import java.util.concurrent.TimeUnit; 15 | import java.util.concurrent.atomic.AtomicBoolean; 16 | 17 | import static org.awaitility.Awaitility.await; 18 | import static org.junit.Assert.assertFalse; 19 | import static org.junit.Assert.assertTrue; 20 | 21 | @Component 22 | public class FilterRegisterITest { 23 | private FilterRegister filterRegister; 24 | private RequestMappingHandlerAdapter handlerAdapter; 25 | private static final List registeredConverters = new ArrayList<>(); 26 | private static final AtomicBoolean changed = new AtomicBoolean(false); 27 | 28 | @Autowired(required = false) 29 | public FilterRegisterITest setFilterRegister(FilterRegister filterRegister) { 30 | this.filterRegister = filterRegister; 31 | return this; 32 | } 33 | 34 | @Autowired(required = false) 35 | public FilterRegisterITest setHandlerAdapter(RequestMappingHandlerAdapter handlerAdapter) { 36 | this.handlerAdapter = handlerAdapter; 37 | return this; 38 | } 39 | 40 | @EventListener 41 | public void handleContextRefresh(ContextRefreshedEvent event) { 42 | MockUtils.copyConverters(FilterRegisterITest.registeredConverters, handlerAdapter); 43 | FilterRegisterITest.changed.set(true); 44 | } 45 | 46 | @Test 47 | public void testConfigureMessageConvertersEnabled() throws Exception { 48 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 49 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterITest.changed); 50 | boolean contain = FilterRegisterITest.registeredConverters.size() >= 2 && 51 | MockUtils.beanFilterConverterLoaded(FilterRegisterITest.registeredConverters); 52 | assertTrue(contain); 53 | } 54 | 55 | @Test 56 | public void testConfigureMessageConvertersDisabled() throws Exception { 57 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_DISABLED_FILTERED, this); 58 | filterRegister.configureMessageConverters(new ArrayList<>()); 59 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterITest.changed); 60 | boolean contain = MockUtils.beanFilterConverterLoaded(FilterRegisterITest.registeredConverters); 61 | assertFalse(contain); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/ObjectMapperCacheITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.jfilter.converter.MethodParameterDetails; 5 | import com.jfilter.filter.FilterFields; 6 | import com.jfilter.mock.MockMethods; 7 | import com.jfilter.mock.config.WSConfigurationHelper; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.core.MethodParameter; 12 | import org.springframework.http.MediaType; 13 | import org.springframework.stereotype.Component; 14 | 15 | import static org.junit.Assert.assertEquals; 16 | import static org.junit.Assert.assertNotNull; 17 | 18 | @Component 19 | public class ObjectMapperCacheITest { 20 | private ObjectMapperCache objectMapperCache; 21 | private FilterConfiguration filterConfiguration; 22 | private MethodParameter methodParameter; 23 | 24 | @Autowired 25 | public ObjectMapperCacheITest setObjectMapperCache(ObjectMapperCache objectMapperCache) { 26 | this.objectMapperCache = objectMapperCache; 27 | return this; 28 | } 29 | 30 | @Autowired 31 | public ObjectMapperCacheITest setFilterConfiguration(FilterConfiguration filterConfiguration) { 32 | this.filterConfiguration = filterConfiguration; 33 | return this; 34 | } 35 | 36 | @Before 37 | public void init() throws Exception { 38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this); 39 | filterConfiguration.setEnabled(true); 40 | methodParameter = MockMethods.mockIgnoreSettingsMethod(); 41 | } 42 | 43 | @Test 44 | public void testNotNull() { 45 | assertNotNull(objectMapperCache); 46 | } 47 | 48 | @Test 49 | public void testFindObjectMapper() { 50 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields()); 51 | ObjectMapper objectMapper = objectMapperCache.findObjectMapper(methodParameterDetails); 52 | assertNotNull(objectMapper); 53 | } 54 | 55 | @Test 56 | public void testFindObjectMapperAlreadyCreated() { 57 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields()); 58 | MethodParameterDetails methodParameterDetails2 = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields()); 59 | ObjectMapper objectMapper = objectMapperCache.findObjectMapper(methodParameterDetails); 60 | ObjectMapper objectMapper2 = objectMapperCache.findObjectMapper(methodParameterDetails2); 61 | 62 | assertEquals(objectMapper, objectMapper2); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/ServiceDisabledWSTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.webservice.WSClassFieldSingle; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationDisabled; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | import org.junit.runner.RunWith; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.test.context.ContextConfiguration; 13 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 14 | import org.springframework.test.context.web.WebAppConfiguration; 15 | import org.springframework.test.web.servlet.MockMvc; 16 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 17 | import org.springframework.web.context.WebApplicationContext; 18 | 19 | import static org.junit.Assert.assertNotEquals; 20 | 21 | @ContextConfiguration(classes = WSConfigurationDisabled.class) 22 | @RunWith(SpringJUnit4ClassRunner.class) 23 | @WebAppConfiguration 24 | public class ServiceDisabledWSTest { 25 | private MockMvc mockMvc; 26 | private WebApplicationContext webApplicationContext; 27 | 28 | @Autowired 29 | public ServiceDisabledWSTest setWebApplicationContext(WebApplicationContext webApplicationContext) { 30 | this.webApplicationContext = webApplicationContext; 31 | return this; 32 | } 33 | 34 | @Before 35 | public void init() { 36 | this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build(); 37 | } 38 | 39 | @Test 40 | public void testWSClassFieldSingle() { 41 | MockUser user = MockClassesHelper.getUserMock(); 42 | user.setId(null); 43 | 44 | String result = MockHttpRequestHelper.doRequest(mockMvc, WSClassFieldSingle.MAPPING_SIGN_IN_FIELD_SINGLE, "ROLE", "ADMIN"); 45 | 46 | assertNotEquals(user.toString(), result); 47 | } 48 | 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/components/ServiceEnabledWSTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.components; 2 | 3 | import com.jfilter.mock.webservice.WSClassFieldSingle; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationEnabled; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | import org.junit.runner.RunWith; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.test.context.ContextConfiguration; 13 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 14 | import org.springframework.test.context.web.WebAppConfiguration; 15 | import org.springframework.test.web.servlet.MockMvc; 16 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 17 | import org.springframework.web.context.WebApplicationContext; 18 | import static com.jfilter.mock.webservice.WSClassFieldMultiple.MAPPING_SIGN_IN_FIELD_MULTIPLE; 19 | import static com.jfilter.mock.webservice.WSClassStrategies.MAPPING_SIGN_IN_STRATEGIES; 20 | import static com.jfilter.mock.webservice.WSClassStrategyMultiple.MAPPING_SIGN_IN_STRATEGY_MULTIPLE; 21 | import static com.jfilter.mock.webservice.WSClassStrategySingle.MAPPING_SIGN_IN_STRATEGY_SINGLE; 22 | import static com.jfilter.mock.webservice.WSMethod.MAPPING_SIGN_IN_DEFAULT; 23 | import static junit.framework.TestCase.assertEquals; 24 | 25 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 26 | @RunWith(SpringJUnit4ClassRunner.class) 27 | @WebAppConfiguration 28 | public class ServiceEnabledWSTest { 29 | private MockMvc mockMvc; 30 | private WebApplicationContext webApplicationContext; 31 | 32 | @Autowired 33 | public ServiceEnabledWSTest setWebApplicationContext(WebApplicationContext webApplicationContext) { 34 | this.webApplicationContext = webApplicationContext; 35 | return this; 36 | } 37 | 38 | @Before 39 | public void init() { 40 | this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build(); 41 | } 42 | 43 | @Test 44 | public void testWSClassFieldSingle() { 45 | MockUser user = MockClassesHelper.getUserMock(); 46 | user.setId(null); 47 | 48 | String result = MockHttpRequestHelper.doRequest(mockMvc, WSClassFieldSingle.MAPPING_SIGN_IN_FIELD_SINGLE, "ROLE", "ADMIN"); 49 | 50 | assertEquals(user.toString(), result); 51 | } 52 | 53 | @Test 54 | public void testWSClassFieldMultiple() { 55 | MockUser user = MockClassesHelper.getUserMock(); 56 | user.setId(null) 57 | .setPassword(null); 58 | 59 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_FIELD_MULTIPLE, "ROLE", "ADMIN"); 60 | 61 | assertEquals(user.toString(), result); 62 | } 63 | 64 | @Test 65 | public void testWSClassStrategySingle() { 66 | MockUser user = MockClassesHelper.getUserMock(); 67 | user.setId(null) 68 | .setPassword(null); 69 | 70 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGY_SINGLE, "ROLE", "ADMIN"); 71 | 72 | assertEquals(user.toString(), result); 73 | } 74 | 75 | @Test 76 | public void testWSClassStrategyMultiple() { 77 | MockUser user = MockClassesHelper.getUserMock(); 78 | user.setId(null) 79 | .setPassword(null) 80 | .setEmail(null); 81 | 82 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGY_MULTIPLE, "ROLE", "ADMIN"); 83 | 84 | assertEquals(user.toString(), result); 85 | } 86 | 87 | @Test 88 | public void testWSClassStrategies() { 89 | MockUser user = MockClassesHelper.getUserMock(); 90 | user.setId(null) 91 | .setPassword(null) 92 | .setEmail(null); 93 | 94 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGIES, "ROLE", "ADMIN"); 95 | 96 | assertEquals(user.toString(), result); 97 | } 98 | 99 | @Test 100 | public void testWSSignInDefault() { 101 | MockUser user = MockClassesHelper.getUserMock(); 102 | 103 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DEFAULT, "ROLE", "ADMIN"); 104 | 105 | assertEquals(user.toString(), result); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/converter/ConverterMapperITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.jfilter.components.DynamicFilterProvider; 4 | import com.jfilter.filter.FilterFields; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockMethods; 7 | import com.jfilter.mock.MockUser; 8 | import com.jfilter.mock.config.WSConfigurationHelper; 9 | import com.jfilter.request.RequestSession; 10 | import org.junit.Test; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.core.MethodParameter; 13 | import org.springframework.stereotype.Component; 14 | 15 | import javax.servlet.http.HttpServletRequest; 16 | import java.util.Arrays; 17 | import static org.junit.Assert.assertEquals; 18 | 19 | @Component 20 | public class ConverterMapperITest { 21 | 22 | @Autowired 23 | private DynamicFilterProvider dynamicFilterProvider; 24 | 25 | @Test 26 | public void testOnGetFilterFieldsTrue() throws Exception { 27 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 28 | 29 | FilterFields filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password")); 30 | 31 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 32 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields); 33 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request)); 34 | 35 | assertEquals(filterFields, found); 36 | } 37 | 38 | @Test 39 | public void testOnGetFilterFieldsEmpty() throws Exception { 40 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 41 | 42 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations(); 43 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(null); 44 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request)); 45 | 46 | assertEquals(0, found.getFieldsMap().size()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/converter/ConverterMapperWSTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.converter; 2 | 3 | import com.jfilter.filter.FilterFields; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationEnabled; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.test.context.ContextConfiguration; 12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 | import org.springframework.test.context.web.WebAppConfiguration; 14 | import org.springframework.test.web.servlet.MockMvc; 15 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 16 | import org.springframework.web.context.WebApplicationContext; 17 | import java.util.Arrays; 18 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS; 19 | import static com.jfilter.mock.webservice.WSMethod.MAPPING_SIGN_IN_DYNAMIC; 20 | import static org.junit.Assert.assertEquals; 21 | 22 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 23 | @RunWith(SpringJUnit4ClassRunner.class) 24 | @WebAppConfiguration 25 | public class ConverterMapperWSTest { 26 | private MockMvc mockMvc; 27 | 28 | @Autowired 29 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) { 30 | mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 31 | } 32 | 33 | @Test 34 | public void testSetFilterFields() { 35 | MockUser user = MockClassesHelper.getUserMock(); 36 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DYNAMIC); 37 | assertEquals(user.toString(), result); 38 | } 39 | 40 | @Test 41 | public void testNotSetFilterFields() { 42 | MockUser user = MockClassesHelper.getUserMock(); 43 | user.setId(null); 44 | user.setPassword(null); 45 | 46 | FilterFields filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password")); 47 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DYNAMIC, ATTRIBUTE_FILTER_FIELDS, filterFields); 48 | assertEquals(user.toString(), result); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/BaseFilterTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import org.junit.Test; 4 | import static org.junit.Assert.assertNotNull; 5 | 6 | public class BaseFilterTest { 7 | 8 | @Test(expected = IllegalArgumentException.class) 9 | public void testNullMethod() { 10 | BaseFilter baseFilter = new FieldFilter(null); 11 | assertNotNull(baseFilter); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/DynamicSessionFilterITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.components.DynamicFilterProvider; 4 | import com.jfilter.mock.MockHttpRequestHelper; 5 | import com.jfilter.mock.MockMethods; 6 | import com.jfilter.mock.MockUser; 7 | import com.jfilter.mock.config.WSConfigurationHelper; 8 | import com.jfilter.request.RequestSession; 9 | import org.junit.Test; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.core.MethodParameter; 12 | import org.springframework.stereotype.Component; 13 | 14 | import javax.servlet.http.HttpServletRequest; 15 | import java.util.Arrays; 16 | 17 | import static org.junit.Assert.assertNotNull; 18 | import static org.junit.Assert.assertEquals; 19 | 20 | @Component 21 | public class DynamicSessionFilterITest { 22 | 23 | @Autowired 24 | private DynamicFilterProvider dynamicFilterProvider; 25 | 26 | @Test 27 | public void testOnGetFilterFieldsNotNull() throws Exception { 28 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 29 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 30 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(null); 31 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request)); 32 | 33 | assertNotNull(found); 34 | } 35 | 36 | @Test 37 | public void testMockDynamicNullFilter() throws Exception { 38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 39 | MethodParameter methodParameter = MockMethods.mockDynamicNullFilter(); 40 | 41 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(new FilterFields(MockUser.class, Arrays.asList("id", "password")))); 42 | 43 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 44 | 45 | assertEquals(FilterFields.EMPTY_FIELDS.get(), found); 46 | } 47 | 48 | @Test 49 | public void testDynamicSessionFilter() throws Exception { 50 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this); 51 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter(); 52 | 53 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(new FilterFields(MockUser.class, Arrays.asList("id", "password")))); 54 | 55 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession); 56 | 57 | assertNotNull(found); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/FileConfigurationTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.mock.MockClassesHelper; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | import static org.junit.Assert.assertEquals; 8 | import static org.junit.Assert.assertNotNull; 9 | 10 | public class FileConfigurationTest { 11 | private FileConfig mockConfig; 12 | 13 | @Before 14 | public void init() { 15 | mockConfig = MockClassesHelper.getMockAdminFileConfig(); 16 | assertNotNull(mockConfig); 17 | } 18 | 19 | @Test 20 | public void testControllerClassName() { 21 | FileConfig.Controller controller = mockConfig.getControllers().get(0); 22 | assertEquals("com.jfilter.filter.FileConfigurationTest", controller.getClassName()); 23 | } 24 | 25 | @Test 26 | public void testStrategy() { 27 | FileConfig.Controller controller = mockConfig.getControllers().get(0); 28 | FileConfig.Strategy strategy = controller.getStrategies().get(0); 29 | assertEquals("ROLE", strategy.getAttributeName()); 30 | assertEquals("ADMIN", strategy.getAttributeValue()); 31 | } 32 | 33 | @Test 34 | public void testFilter() { 35 | FileConfig.Controller controller = mockConfig.getControllers().get(0); 36 | FileConfig.Strategy strategy = controller.getStrategies().get(0); 37 | FileConfig.Filter filter = strategy.getFilters().get(0); 38 | assertEquals("com.jfilter.filter.FileConfigurationTest", filter.getClassName()); 39 | } 40 | 41 | @Test 42 | public void testField() { 43 | FileConfig.Controller controller = mockConfig.getControllers().get(0); 44 | FileConfig.Strategy strategy = controller.getStrategies().get(0); 45 | FileConfig.Filter filter = strategy.getFilters().get(0); 46 | FileConfig.Field field = filter.getFields().get(0); 47 | assertEquals("id", field.getName()); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/FileFilterTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.FilterException; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockHttpRequestHelper; 6 | import com.jfilter.mock.MockMethods; 7 | import com.jfilter.request.RequestSession; 8 | import org.junit.Assert; 9 | import org.junit.Test; 10 | import java.io.IOException; 11 | import java.io.File; 12 | import java.io.FileOutputStream; 13 | import java.util.Arrays; 14 | 15 | public class FileFilterTest { 16 | 17 | @Test 18 | public void testMethodWithoutAnnotations() { 19 | FileFilter fileFilter = new FileFilter(MockMethods.methodWithoutAnnotations()); 20 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 21 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 22 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 23 | } 24 | 25 | @Test 26 | public void testMethodNotExistFile() { 27 | FileFilter fileFilter = new FileFilter(MockMethods.fileNotExist()); 28 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 29 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 30 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 31 | } 32 | 33 | @Test 34 | public void testMethodBadConfig() { 35 | FileFilter fileFilter = new FileFilter(MockMethods.fileBadConfig()); 36 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 37 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 38 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 39 | } 40 | 41 | @Test 42 | public void testFileAnnotationClassNotFound() { 43 | FileFilter fileFilter = new FileFilter(MockMethods.fileAnnotationClassNotFound()); 44 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 45 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 46 | Assert.assertEquals(Arrays.asList("id", "password"), filterFields.getFieldsMap().get(null)); 47 | } 48 | 49 | @Test 50 | public void testFileAnnotationEmpty() { 51 | FileFilter fileFilter = new FileFilter(MockMethods.fileAnnotationEmpty()); 52 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 53 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 54 | 55 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 56 | } 57 | 58 | @Test(expected = FilterException.class) 59 | public void testIOException() throws IOException { 60 | String fileName = FileFilter.getFileName("config_io_exception.xml"); 61 | File file = new File(fileName); 62 | 63 | try (FileOutputStream in = new FileOutputStream(file)) { 64 | java.nio.channels.FileLock lock = in.getChannel().lock(); 65 | try { 66 | FileFilter fileFilter = new FileFilter(MockMethods.fileLocked()); 67 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(), 68 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest())); 69 | 70 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 71 | } finally { 72 | lock.release(); 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/FilterFactoryTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.mock.MockMethods; 4 | import org.junit.Test; 5 | import org.springframework.core.MethodParameter; 6 | 7 | import static org.junit.Assert.assertNotNull; 8 | import static org.junit.Assert.assertTrue; 9 | import static org.junit.Assert.assertFalse; 10 | import static org.junit.Assert.assertEquals; 11 | import static org.junit.Assert.assertNull; 12 | 13 | public class FilterFactoryTest { 14 | 15 | @Test(expected = IllegalAccessException.class) 16 | public void testInit() throws IllegalAccessException, InstantiationException { 17 | FilterFactory filterFactory = FilterFactory.class.newInstance(); 18 | assertNotNull(filterFactory); 19 | } 20 | 21 | @Test 22 | public void testIgnoreSettingMethod() { 23 | MethodParameter methodParameter = MockMethods.mockIgnoreSettingsMethod(); 24 | assertTrue(FilterFactory.isAccept(methodParameter)); 25 | } 26 | 27 | @Test 28 | public void testIgnoreWithoutAnnotations() { 29 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations(); 30 | assertFalse(FilterFactory.isAccept(methodParameter)); 31 | } 32 | 33 | @Test 34 | public void testStrategiesMethod() { 35 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategiesMethod(); 36 | assertTrue(FilterFactory.isAccept(methodParameter)); 37 | } 38 | 39 | @Test 40 | public void testFactoryFieldIgnore() { 41 | MethodParameter methodParameter = MockMethods.mockIgnoreSettingsMethod(); 42 | assertNotNull(methodParameter); 43 | 44 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter); 45 | assertNotNull(filter); 46 | 47 | assertEquals(filter.getClass(), FieldFilter.class); 48 | } 49 | 50 | @Test 51 | public void testFactoryStrategyFilter() { 52 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategiesMethod(); 53 | assertNotNull(methodParameter); 54 | 55 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter); 56 | assertNotNull(filter); 57 | 58 | assertEquals(filter.getClass(), StrategyFilter.class); 59 | } 60 | 61 | @Test 62 | public void testFactoryNull() { 63 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations(); 64 | assertNotNull(methodParameter); 65 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter); 66 | assertNull(filter); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/FilterFieldsTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | import java.util.Arrays; 6 | import static org.junit.Assert.assertTrue; 7 | import static org.junit.Assert.assertFalse; 8 | import static org.junit.Assert.assertNotSame; 9 | import static org.junit.Assert.assertEquals; 10 | import static org.junit.Assert.assertNotEquals; 11 | 12 | public class FilterFieldsTest { 13 | private FilterFields filterFields; 14 | private FilterFields filterFieldsNull; 15 | 16 | @Before 17 | public void init() { 18 | filterFields = new FilterFields(String.class, Arrays.asList("id", "password")); 19 | filterFieldsNull = new FilterFields(void.class, Arrays.asList("id", "password")); 20 | } 21 | 22 | @Test 23 | public void testEqualsTrue() { 24 | FilterFields filterFields = new FilterFields(); 25 | boolean result = filterFields.equals(new FilterFields()); 26 | 27 | assertTrue(result); 28 | } 29 | 30 | @SuppressWarnings("EqualsBetweenInconvertibleTypes") 31 | @Test 32 | public void testEqualsFalse() { 33 | FilterFields filterFields = new FilterFields(); 34 | boolean result = filterFields.equals(1); 35 | 36 | assertFalse(result); 37 | } 38 | 39 | @Test 40 | public void testHashCodeEquals() { 41 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password")); 42 | 43 | assertNotSame(filterFields, filterFields2); 44 | assertEquals(filterFields.hashCode(), filterFields2.hashCode()); 45 | } 46 | 47 | @Test 48 | public void testHashCodeNotEquals() { 49 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("some_id", "some_password")); 50 | 51 | assertNotSame(filterFields, filterFields2); 52 | assertNotEquals(filterFields.hashCode(), filterFields2.hashCode()); 53 | } 54 | 55 | @Test 56 | public void testEquals() { 57 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password")); 58 | assertEquals(filterFields, filterFields2); 59 | } 60 | 61 | @Test 62 | public void testNotEquals() { 63 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("some_id", "some_password")); 64 | assertNotEquals(filterFields, filterFields2); 65 | } 66 | 67 | @Test 68 | public void testEqualsBehaviour() { 69 | filterFields.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS); 70 | 71 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password")); 72 | filterFields2.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS); 73 | assertEquals(filterFields, filterFields2); 74 | } 75 | 76 | @Test 77 | public void testNotEqualsBehaviour() { 78 | filterFields.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS); 79 | 80 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password")); 81 | filterFields2.setFilterBehaviour(FilterBehaviour.HIDE_FIELDS); 82 | assertNotEquals(filterFields, filterFields2); 83 | } 84 | 85 | @Test 86 | public void testGetFieldsByClassAndList() { 87 | FilterFields filterFields2 = FilterFields.getFieldsBy(String.class, Arrays.asList("id", "password")); 88 | 89 | assertEquals(filterFields, filterFields2); 90 | } 91 | 92 | @Test 93 | public void testGetFieldsByList() { 94 | FilterFields filterFields2 = FilterFields.getFieldsBy(Arrays.asList("id", "password")); 95 | 96 | assertEquals(filterFieldsNull, filterFields2); 97 | } 98 | 99 | @Test 100 | public void testGetFieldsByClassAndArray() { 101 | FilterFields filterFields2 = FilterFields.getFieldsBy(String.class, new String[]{"id", "password"}); 102 | 103 | assertEquals(filterFields, filterFields2); 104 | } 105 | 106 | @Test 107 | public void testGetFieldsByArray() { 108 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"}); 109 | 110 | assertEquals(filterFieldsNull, filterFields2); 111 | } 112 | 113 | @Test 114 | public void testAppendFieldsNull() { 115 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"}); 116 | filterFields2.appendToMap(null); 117 | 118 | assertEquals(filterFieldsNull, filterFields2); 119 | } 120 | 121 | @Test 122 | public void testAppendFieldsSizeZero() { 123 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"}); 124 | filterFields2.appendToMap(FilterFields.EMPTY_FIELDS.get()); 125 | 126 | assertEquals(filterFieldsNull, filterFields2); 127 | } 128 | 129 | @Test 130 | public void testEqualsSameObject() { 131 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"}); 132 | assertTrue(filterFields2.equals(filterFields2)); 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/filter/StrategyFilterTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.filter; 2 | 3 | import com.jfilter.mock.MockClassesHelper; 4 | import com.jfilter.mock.MockHttpRequestHelper; 5 | import com.jfilter.mock.MockMethods; 6 | import com.jfilter.request.RequestSession; 7 | import org.junit.Assert; 8 | import org.junit.Before; 9 | import org.junit.Test; 10 | import org.springframework.core.MethodParameter; 11 | 12 | public class StrategyFilterTest { 13 | private StrategyFilter strategyFilter; 14 | 15 | @Before 16 | public void init() { 17 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategyMethod(); 18 | strategyFilter = new StrategyFilter(methodParameter); 19 | } 20 | 21 | @Test 22 | public void testUserSession() { 23 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockUserRequest()); 24 | FilterFields filterFields = strategyFilter.getFields(MockClassesHelper.getUserMock(), requestSession); 25 | Assert.assertEquals(1, filterFields.getFieldsMap().size()); 26 | } 27 | 28 | @Test 29 | public void testClearSession() { 30 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockClearRequest()); 31 | FilterFields filterFields = strategyFilter.getFields(MockClassesHelper.getUserMock(), requestSession); 32 | Assert.assertEquals(0, filterFields.getFieldsMap().size()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mapper/FilterObjectMapperITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.jfilter.components.FilterConfiguration; 4 | import com.jfilter.mock.config.WSConfigurationEnabled; 5 | import static org.junit.Assert.assertNotNull; 6 | 7 | import org.junit.Before; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.test.context.ContextConfiguration; 12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 | import org.springframework.test.context.web.WebAppConfiguration; 14 | import com.fasterxml.jackson.databind.ser.FilterProvider; 15 | 16 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 17 | @RunWith(SpringJUnit4ClassRunner.class) 18 | @WebAppConfiguration 19 | public class FilterObjectMapperITest { 20 | private FilterObjectMapper objectMapper; 21 | 22 | @Autowired 23 | private FilterConfiguration filterConfiguration; 24 | 25 | @Before 26 | public void init() { 27 | objectMapper = new FilterObjectMapper(filterConfiguration); 28 | } 29 | 30 | @Test 31 | public void testWriterNotNull() { 32 | assertNotNull(objectMapper.writer()); 33 | } 34 | 35 | @Test 36 | public void testWriterWithViewNotNull() { 37 | assertNotNull(objectMapper.writerWithView(null)); 38 | } 39 | 40 | @Test 41 | public void testWriterWithfilterProviderNotNull() { 42 | assertNotNull(objectMapper.writer((FilterProvider) null)); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mapper/FilterObjectWriterITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.core.JsonEncoding; 4 | import com.fasterxml.jackson.core.JsonGenerator; 5 | import com.jfilter.components.FilterConfiguration; 6 | import com.jfilter.components.FilterProvider; 7 | import com.jfilter.converter.FilterClassWrapper; 8 | import com.jfilter.converter.MethodParameterDetails; 9 | import com.jfilter.filter.BaseFilter; 10 | import com.jfilter.mock.MockMethods; 11 | import com.jfilter.mock.MockUser; 12 | import com.jfilter.mock.config.WSConfigurationEnabled; 13 | import org.junit.Before; 14 | import org.junit.Test; 15 | import org.junit.runner.RunWith; 16 | import org.springframework.beans.factory.annotation.Autowired; 17 | import org.springframework.core.MethodParameter; 18 | import org.springframework.http.MediaType; 19 | import org.springframework.test.context.ContextConfiguration; 20 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 21 | import org.springframework.test.context.web.WebAppConfiguration; 22 | 23 | 24 | import java.io.ByteArrayOutputStream; 25 | import java.io.IOException; 26 | 27 | import static org.junit.Assert.assertEquals; 28 | import static org.junit.Assert.assertNotNull; 29 | 30 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 31 | @RunWith(SpringJUnit4ClassRunner.class) 32 | @WebAppConfiguration 33 | public class FilterObjectWriterITest { 34 | private FilterObjectWriter writer; 35 | private MockUser user; 36 | private ByteArrayOutputStream out; 37 | private JsonGenerator generator; 38 | 39 | @Autowired 40 | private FilterConfiguration filterConfiguration; 41 | 42 | @Autowired 43 | private FilterProvider filterProvider; 44 | 45 | @Before 46 | public void init() throws IOException { 47 | FilterObjectMapper objectMapper = new FilterObjectMapper(filterConfiguration); 48 | writer = (FilterObjectWriter) objectMapper.writer(); 49 | user = new MockUser(); 50 | 51 | out = new ByteArrayOutputStream(); 52 | generator = objectMapper.getFactory().createGenerator(out, JsonEncoding.UTF8); 53 | } 54 | 55 | @Test 56 | public void testWriteValue() throws IOException { 57 | writer.writeValue(generator, user); 58 | assertNotNull(out.toString()); 59 | } 60 | 61 | @Test(expected = NullPointerException.class) 62 | public void testWriteValueFilterClassWrapperNull() throws IOException { 63 | FilterClassWrapper filterClassWrapper = new FilterClassWrapper(user, null); 64 | writer.writeValue(generator, filterClassWrapper); 65 | } 66 | 67 | @Test 68 | public void testWriteValueFilterClassWrapperNotNull() throws IOException { 69 | 70 | MethodParameter methodParameter = MockMethods.singleAnnotation(); 71 | 72 | BaseFilter filter = filterProvider.getFilter(methodParameter); 73 | 74 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, 75 | MediaType.APPLICATION_JSON, filter.getFields(user, null)); 76 | 77 | FilterClassWrapper filterClassWrapper = new FilterClassWrapper(user, methodParameterDetails); 78 | writer.writeValue(generator, filterClassWrapper); 79 | 80 | String output = out.toString(); 81 | 82 | assertEquals(-1, output.indexOf("\"id\"")); 83 | } 84 | 85 | @Test 86 | public void testGetFilterConfiguration() { 87 | assertEquals(filterConfiguration, writer.getFilterConfiguration()); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mapper/FilterObjectWriterTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; 4 | import com.fasterxml.jackson.databind.JavaType; 5 | import com.fasterxml.jackson.databind.ObjectMapper; 6 | import com.fasterxml.jackson.databind.ObjectWriter; 7 | import org.junit.Before; 8 | import org.junit.Test; 9 | 10 | import static org.junit.Assert.assertNotNull; 11 | 12 | public class FilterObjectWriterTest { 13 | private FilterObjectWriter filterObjectWriter; 14 | private ObjectMapper objectMapper; 15 | 16 | @Before 17 | public void init() { 18 | objectMapper = new ObjectMapper(); 19 | filterObjectWriter = new FilterObjectWriter(objectMapper, objectMapper.getSerializationConfig()); 20 | } 21 | 22 | @Test 23 | public void testForTypeNull() { 24 | FilterObjectWriter filterObjectWriter = new FilterObjectWriter(objectMapper, null); 25 | JavaType javaType = null; 26 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType); 27 | assertNotNull(objectWriter); 28 | } 29 | 30 | @Test(expected = NullPointerException.class) 31 | public void testForTypeNullNullPointerException() { 32 | FilterObjectWriter filterObjectWriter = new FilterObjectWriter(objectMapper, null); 33 | JavaType javaType = objectMapper.constructType(void.class); 34 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType); 35 | assertNotNull(objectWriter); 36 | } 37 | 38 | @Test 39 | public void testForTypeNotNull() { 40 | JavaType javaType = objectMapper.constructType(void.class); 41 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType); 42 | assertNotNull(objectWriter); 43 | } 44 | 45 | @Test 46 | public void testWithNotNull() { 47 | ObjectWriter objectWriter = filterObjectWriter.with(new DefaultPrettyPrinter()); 48 | assertNotNull(objectWriter); 49 | } 50 | 51 | @Test 52 | public void testWithNull() { 53 | DefaultPrettyPrinter prettyPrinter = null; 54 | ObjectWriter objectWriter = filterObjectWriter.with(prettyPrinter); 55 | assertNotNull(objectWriter); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mapper/FilterXmlMapperITest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mapper; 2 | 3 | import com.fasterxml.jackson.databind.ser.FilterProvider; 4 | import com.jfilter.components.FilterConfiguration; 5 | import com.jfilter.mock.config.WSConfigurationEnabled; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.test.context.ContextConfiguration; 11 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 12 | import org.springframework.test.context.web.WebAppConfiguration; 13 | 14 | import static org.junit.Assert.assertNotNull; 15 | 16 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 17 | @RunWith(SpringJUnit4ClassRunner.class) 18 | @WebAppConfiguration 19 | public class FilterXmlMapperITest { 20 | private FilterXmlMapper objectMapper; 21 | 22 | @Autowired 23 | private FilterConfiguration filterConfiguration; 24 | 25 | @Before 26 | public void init() { 27 | objectMapper = new FilterXmlMapper(filterConfiguration); 28 | } 29 | 30 | @Test 31 | public void testWriterNotNull() { 32 | assertNotNull(objectMapper.writer()); 33 | } 34 | 35 | @Test 36 | public void testWriterWithViewNotNull() { 37 | assertNotNull(objectMapper.writerWithView(null)); 38 | } 39 | 40 | @Test 41 | public void testWriterWithfilterProviderNotNull() { 42 | assertNotNull(objectMapper.writer((FilterProvider) null)); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/MockClassesHelper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock; 2 | 3 | import com.jfilter.filter.FileConfig; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.Arrays; 10 | 11 | 12 | public class MockClassesHelper { 13 | 14 | public static MockUser getUserMock() { 15 | MockUser mockUser = new MockUser(); 16 | 17 | Map values = new HashMap<>(); 18 | values.put("name", "value"); 19 | 20 | List collection = new ArrayList<>(Arrays.asList("Hello", "World")); 21 | 22 | mockUser.setId(100) 23 | .setEmail("mail@mail.com") 24 | .setFullName("Jane Doe") 25 | .setPassword("1234567") 26 | .setId(100) 27 | .setCollectionValue(collection) 28 | .setMapValue(values) 29 | .setBoolValue(true) 30 | .setByteValue((byte) 100) 31 | .setCharValue('c') 32 | .setDoubleValue(5.5) 33 | .setFloatValue(5.5f) 34 | .setLongValue(100500) 35 | .setShortValue((short) 15); 36 | 37 | return mockUser; 38 | } 39 | 40 | public static FileConfig getMockAdminFileConfig() { 41 | 42 | FileConfig.Filter filter = new FileConfig.Filter(); 43 | filter.setClassName("com.jfilter.filter.FileConfigurationTest"); 44 | filter.getFields().add(new FileConfig.Field().setName("id")); 45 | filter.getFields().add(new FileConfig.Field().setName("password")); 46 | 47 | FileConfig.Strategy strategy = new FileConfig.Strategy(); 48 | strategy.setAttributeName("ROLE") 49 | .setAttributeValue("ADMIN") 50 | .getFilters() 51 | .add(filter); 52 | 53 | FileConfig.Controller controller = new FileConfig.Controller(); 54 | controller.setClassName("com.jfilter.filter.FileConfigurationTest") 55 | .getStrategies() 56 | .add(strategy); 57 | 58 | FileConfig fileConfig = new FileConfig(); 59 | fileConfig.getControllers() 60 | .add(controller); 61 | return fileConfig; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/MockFile.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock; 2 | 3 | import java.io.File; 4 | 5 | public class MockFile extends File { 6 | private static final long serialVersionUID = -8702456483666584628L; 7 | 8 | public MockFile(String pathname) { 9 | super(pathname); 10 | } 11 | 12 | @Override 13 | public boolean exists() { 14 | return true; 15 | } 16 | 17 | @Override 18 | public boolean isDirectory() { 19 | return true; 20 | } 21 | 22 | @Override 23 | public boolean isHidden() { 24 | return true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/MockHttpRequestHelper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock; 2 | 3 | import com.jfilter.filter.FilterFields; 4 | import org.springframework.http.MediaType; 5 | import org.springframework.mock.web.MockHttpServletRequest; 6 | import org.springframework.test.web.servlet.MockMvc; 7 | import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | 11 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS; 12 | import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; 13 | import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; 14 | 15 | public class MockHttpRequestHelper { 16 | 17 | private static HttpServletRequest getMockRequest(String attributeName, Object attributeValue) { 18 | MockHttpServletRequest request = new MockHttpServletRequest("GET", ""); 19 | if (attributeName != null && !attributeName.isEmpty()) 20 | request.getSession().setAttribute(attributeName, attributeValue); 21 | return request; 22 | } 23 | 24 | public static HttpServletRequest getMockAdminRequest() { 25 | return getMockRequest("ROLE", "ADMIN"); 26 | } 27 | 28 | public static HttpServletRequest getMockUserRequest() { 29 | return getMockRequest("ROLE", "USER"); 30 | } 31 | 32 | public static HttpServletRequest getMockClearRequest() { 33 | return getMockRequest("", ""); 34 | } 35 | 36 | public static HttpServletRequest getMockDynamicFilterRequest(FilterFields filterFields) { 37 | return getMockRequest(ATTRIBUTE_FILTER_FIELDS, filterFields); 38 | } 39 | 40 | private static String getContent(MockMvc mockMvc, MockHttpServletRequestBuilder requestBuilder) { 41 | final StringBuilder result = new StringBuilder(); 42 | try { 43 | mockMvc.perform(requestBuilder) 44 | .andDo(print()) 45 | .andExpect(mvcResult -> result.append(mvcResult.getResponse().getContentAsString())); 46 | } catch (Exception e) { 47 | return result.toString(); 48 | } 49 | return result.toString(); 50 | } 51 | 52 | public static String doRequest(MockMvc mockMvc, String url, String attributeName, Object attributeValue) { 53 | MockHttpServletRequestBuilder requestBuilder = post(url); 54 | requestBuilder 55 | .param("email", "email") 56 | .param("password", "password") 57 | .contentType(MediaType.APPLICATION_FORM_URLENCODED); 58 | 59 | if (attributeName != null && attributeValue != null) 60 | requestBuilder.sessionAttr(attributeName, attributeValue); 61 | return MockHttpRequestHelper.getContent(mockMvc, requestBuilder); 62 | } 63 | 64 | public static String doRequest(MockMvc mockMvc, String url) { 65 | return doRequest(mockMvc, url, null, null); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/MockUtils.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock; 2 | 3 | import com.jfilter.components.FilterConverter; 4 | import com.jfilter.filter.FileFilter; 5 | import com.jfilter.mapper.FilterObjectMapper; 6 | import com.jfilter.mapper.FilterXmlMapper; 7 | import org.awaitility.core.ConditionTimeoutException; 8 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 9 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; 10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; 11 | 12 | import java.io.File; 13 | import java.io.IOException; 14 | import java.nio.file.Files; 15 | import java.util.List; 16 | import java.util.concurrent.TimeUnit; 17 | import java.util.concurrent.atomic.AtomicBoolean; 18 | 19 | import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; 20 | import static java.nio.file.StandardOpenOption.WRITE; 21 | import static org.awaitility.Awaitility.await; 22 | 23 | public class MockUtils { 24 | 25 | @SuppressWarnings("UnusedReturnValue") 26 | public static boolean sleep(Integer timeout) { 27 | try { 28 | await().atMost(timeout, TimeUnit.SECONDS) 29 | .untilTrue(new AtomicBoolean(false)); 30 | return true; 31 | } catch (ConditionTimeoutException e) { 32 | return false; 33 | } 34 | } 35 | 36 | public static boolean fileCopy(String sourceName, String destinationName) { 37 | File sourceFile = FileFilter.resourceFile(sourceName); 38 | File destinationFile = FileFilter.resourceFile(destinationName); 39 | if (sourceFile == null || destinationFile == null) 40 | return false; 41 | 42 | if (sourceFile.exists() && destinationFile.exists()) { 43 | try { 44 | Files.copy(sourceFile.toPath(), destinationFile.toPath(), REPLACE_EXISTING); 45 | } catch (IOException e) { 46 | return false; 47 | } 48 | return true; 49 | } 50 | return false; 51 | } 52 | 53 | @SuppressWarnings("UnusedReturnValue") 54 | public static boolean fileWrite(File file, String content) { 55 | try { 56 | if (file != null && file.exists()) { 57 | Files.write(file.toPath(), content.getBytes(), WRITE); 58 | return true; 59 | } else 60 | return false; 61 | } catch (IOException e) { 62 | return false; 63 | } 64 | } 65 | 66 | public static boolean beanFilterConverterLoaded(List registeredConverters) { 67 | final AtomicBoolean result = new AtomicBoolean(false); 68 | registeredConverters.forEach(i -> { 69 | if (i instanceof FilterConverter) { 70 | result.set(true); 71 | } else if (i instanceof MappingJackson2HttpMessageConverter && 72 | ((MappingJackson2HttpMessageConverter) i).getObjectMapper() instanceof FilterObjectMapper) { 73 | result.set(true); 74 | } else if (i instanceof MappingJackson2XmlHttpMessageConverter && 75 | ((MappingJackson2XmlHttpMessageConverter) i).getObjectMapper() instanceof FilterXmlMapper) { 76 | result.set(true); 77 | } 78 | }); 79 | return result.get(); 80 | } 81 | 82 | public static void copyConverters(List registeredConverters, RequestMappingHandlerAdapter handlerAdapter) { 83 | registeredConverters.clear(); 84 | registeredConverters.addAll(handlerAdapter.getMessageConverters()); 85 | } 86 | 87 | 88 | } 89 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/MockDynamicFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.jfilter.filter.DynamicFilterComponent; 4 | 5 | @DynamicFilterComponent 6 | public class MockDynamicFilter { 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/MockDynamicNullFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.comparator.Comparator; 4 | import com.jfilter.filter.DynamicFilterComponent; 5 | import com.jfilter.filter.DynamicFilterEvent; 6 | import com.jfilter.filter.FilterFields; 7 | import com.jfilter.request.RequestSession; 8 | 9 | @DynamicFilterComponent 10 | public class MockDynamicNullFilter implements DynamicFilterEvent { 11 | 12 | @Override 13 | public void onRequest(Comparator comparator) { 14 | //Do nothing 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSConfigurationCustomConverter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import com.jfilter.EnableJsonFilter; 5 | import com.jfilter.components.FilterConfiguration; 6 | import com.jfilter.mapper.FilterObjectMapper; 7 | import com.jfilter.mapper.FilterXmlMapper; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.context.annotation.ComponentScan; 10 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 11 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; 12 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 13 | 14 | @EnableJsonFilter 15 | @ComponentScan({"com.jfilter.mock.webservice"}) 16 | public class WSConfigurationCustomConverter extends WebMvcConfigurerAdapter { 17 | 18 | public class CustomJsonConverter extends MappingJackson2HttpMessageConverter { 19 | public CustomJsonConverter(ObjectMapper objectMapper) { 20 | super(objectMapper); 21 | } 22 | } 23 | 24 | public class CustomXmlConverter extends MappingJackson2XmlHttpMessageConverter { 25 | public CustomXmlConverter(ObjectMapper objectMapper) { 26 | super(objectMapper); 27 | } 28 | } 29 | 30 | @Autowired 31 | public void configure(FilterConfiguration filterConfiguration) { 32 | //Add custom message converters 33 | filterConfiguration.withCustomConverter(new CustomJsonConverter(new FilterObjectMapper(filterConfiguration))); 34 | filterConfiguration.withCustomConverter(new CustomXmlConverter(new FilterXmlMapper(filterConfiguration))); 35 | } 36 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSConfigurationDisabled.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 7 | 8 | @SuppressWarnings("ALL") 9 | @Configuration 10 | @ComponentScan({"com.jfilter.mock.webservice"}) 11 | @EnableWebMvc 12 | public class WSConfigurationDisabled extends WebMvcConfigurerAdapter { 13 | 14 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSConfigurationDisabledFiltered.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import org.springframework.context.annotation.ComponentScan; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.context.annotation.FilterType; 6 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 8 | 9 | @Configuration 10 | @ComponentScan(basePackages ={"com.jfilter", "com.jfilter.components", "com.jfilter.mock.webservice"}, 11 | excludeFilters = {@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value = WSConfigurationEnabled.class)}) 12 | @EnableWebMvc 13 | public class WSConfigurationDisabledFiltered extends WebMvcConfigurerAdapter { 14 | 15 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSConfigurationEnabled.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.jfilter.EnableJsonFilter; 4 | import com.jfilter.components.FilterRegister; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.context.annotation.ComponentScan; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.http.converter.HttpMessageConverter; 9 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 10 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; 11 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 12 | import java.util.List; 13 | 14 | @Configuration 15 | @EnableJsonFilter 16 | @ComponentScan({"com.jfilter.mock.webservice"}) 17 | public class WSConfigurationEnabled extends WebMvcConfigurerAdapter { 18 | @Autowired 19 | private FilterRegister filterRegister; 20 | 21 | @Override 22 | public void configureMessageConverters(List> converters) { 23 | if (filterRegister != null) 24 | filterRegister.configureMessageConverters(converters); 25 | converters.add(new MappingJackson2HttpMessageConverter()); 26 | converters.add(new MappingJackson2XmlHttpMessageConverter()); 27 | super.configureMessageConverters(converters); 28 | } 29 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSConfigurationHelper.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.jfilter.EnableJsonFilter; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.test.context.ContextConfiguration; 6 | import org.springframework.test.context.TestContextManager; 7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 8 | import org.springframework.test.context.web.WebAppConfiguration; 9 | 10 | public class WSConfigurationHelper { 11 | 12 | public enum Instance { 13 | FILTER_ENABLED(Enabled.class), 14 | FILTER_ENABLED2(Enabled2.class), 15 | FILTER_DISABLED(Disabled.class), 16 | FILTER_DISABLED_FILTERED(DisabledFiltered .class), 17 | FILTER_USE_DEFAULT_CONVERTERS(UseDefaultConverters .class), 18 | FILTER_USE_CUSTOM_CONVERTERS(UseCustomConverters .class); 19 | 20 | private final Class className; 21 | 22 | Instance(Class clazz) { 23 | this.className = clazz; 24 | } 25 | } 26 | 27 | public static void instance(Instance testClass, Object testInstance) throws Exception { 28 | TestContextManager testContextManager = new TestContextManager(testClass.className); 29 | testContextManager.prepareTestInstance(testInstance); 30 | } 31 | 32 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 33 | @WebAppConfiguration 34 | @RunWith(SpringJUnit4ClassRunner.class) 35 | @EnableJsonFilter 36 | private class Enabled { 37 | 38 | } 39 | 40 | @ContextConfiguration(classes = WSConfigurationEnabled.class) 41 | @WebAppConfiguration 42 | @RunWith(SpringJUnit4ClassRunner.class) 43 | @EnableJsonFilter 44 | private class Enabled2 { 45 | 46 | } 47 | 48 | @ContextConfiguration(classes = WSConfigurationDisabled.class) 49 | @WebAppConfiguration 50 | @RunWith(SpringJUnit4ClassRunner.class) 51 | private class Disabled { 52 | 53 | } 54 | 55 | @ContextConfiguration(classes = WSConfigurationDisabledFiltered.class) 56 | @WebAppConfiguration 57 | @RunWith(SpringJUnit4ClassRunner.class) 58 | private class DisabledFiltered { 59 | 60 | } 61 | 62 | @ContextConfiguration(classes = WSUseDefaultConvertersEnabled.class) 63 | @WebAppConfiguration 64 | @RunWith(SpringJUnit4ClassRunner.class) 65 | private class UseDefaultConverters { 66 | 67 | } 68 | 69 | @ContextConfiguration(classes = WSConfigurationCustomConverter.class) 70 | @WebAppConfiguration 71 | @RunWith(SpringJUnit4ClassRunner.class) 72 | private class UseCustomConverters { 73 | 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/config/WSUseDefaultConvertersEnabled.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.config; 2 | 3 | import com.jfilter.EnableJsonFilter; 4 | import com.jfilter.components.FilterConfiguration; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.context.annotation.ComponentScan; 7 | import org.springframework.http.converter.HttpMessageConverter; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 | 10 | import java.util.List; 11 | 12 | @EnableJsonFilter 13 | @ComponentScan({"com.jfilter.mock.webservice"}) 14 | public class WSUseDefaultConvertersEnabled extends WebMvcConfigurerAdapter { 15 | 16 | @Override 17 | public void configureMessageConverters(List> converters) { 18 | super.configureMessageConverters(converters); 19 | } 20 | 21 | @SuppressWarnings("SpringJavaAutowiredMembersInspection") 22 | @Autowired 23 | public void configure(FilterConfiguration filterConfiguration) { 24 | filterConfiguration.setUseDefaultConverters(true); 25 | } 26 | 27 | 28 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassDynamicFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.components.DynamicSessionFilter; 4 | import com.jfilter.filter.DynamicFilter; 5 | import com.jfilter.filter.FilterFields; 6 | import com.jfilter.mock.MockClassesHelper; 7 | import com.jfilter.mock.MockUser; 8 | import com.jfilter.util.FilterUtil; 9 | import org.springframework.http.MediaType; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RequestMethod; 12 | import org.springframework.web.bind.annotation.RequestParam; 13 | import org.springframework.web.bind.annotation.RestController; 14 | 15 | import javax.servlet.http.HttpSession; 16 | import java.util.Arrays; 17 | 18 | @RestController 19 | @DynamicFilter(DynamicSessionFilter.class) 20 | public class WSClassDynamicFilter { 21 | public static final String MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER = "/dynamic-class/notNullFilter"; 22 | public static final String MAPPING_DYNAMIC_CLASS_SESSION_ATTRIBUTE_FIELDS = "/dynamic-class/sessionAttributeFields"; 23 | 24 | @RequestMapping(value = MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER, 25 | params = {"email", "password"}, method = RequestMethod.POST, 26 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 27 | produces = {MediaType.APPLICATION_JSON_VALUE}) 28 | public MockUser notNullFilter(@RequestParam("email") String email, @RequestParam("password") String password) { 29 | return MockClassesHelper.getUserMock(); 30 | } 31 | 32 | @RequestMapping(value = MAPPING_DYNAMIC_CLASS_SESSION_ATTRIBUTE_FIELDS, 33 | params = {"email", "password"}, method = RequestMethod.POST, 34 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 35 | produces = {MediaType.APPLICATION_JSON_VALUE}) 36 | public MockUser sessionAttributeFields(HttpSession session, @RequestParam("email") String email, @RequestParam("password") String password) { 37 | 38 | FilterUtil.useFilter(session, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email"))); 39 | return MockClassesHelper.getUserMock(); 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassFieldMultiple.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockUser; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | @FieldFilterSetting(fields = {"id"}) 14 | @FieldFilterSetting(fields = {"password"}) 15 | public class WSClassFieldMultiple { 16 | public static final String MAPPING_SIGN_IN_FIELD_MULTIPLE = "/field-multiple/customers/signIn"; 17 | 18 | 19 | @RequestMapping(value = MAPPING_SIGN_IN_FIELD_MULTIPLE, 20 | params = {"email", "password"}, method = RequestMethod.POST, 21 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 22 | produces = {MediaType.APPLICATION_JSON_VALUE}) 23 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) { 24 | return MockClassesHelper.getUserMock(); 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassFieldSingle.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.mock.MockUser; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | @FieldFilterSetting(fields = {"id"}) 14 | public class WSClassFieldSingle { 15 | public static final String MAPPING_SIGN_IN_FIELD_SINGLE = "/field-single/customers/signIn"; 16 | 17 | @RequestMapping(value = MAPPING_SIGN_IN_FIELD_SINGLE, 18 | params = {"email", "password"}, method = RequestMethod.POST, 19 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 20 | produces = {MediaType.APPLICATION_JSON_VALUE}) 21 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) { 22 | return MockClassesHelper.getUserMock(); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassFile.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.mock.MockClassesHelper; 4 | import com.jfilter.filter.FileFilterSetting; 5 | import com.jfilter.mock.MockUser; 6 | import org.springframework.http.MediaType; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | @FileFilterSetting(fileName = "configMockWebService.xml") 14 | public class WSClassFile { 15 | public static final String MAPPING_SIGN_IN_FILE = "/file/customers/signIn"; 16 | 17 | @RequestMapping(value = MAPPING_SIGN_IN_FILE, 18 | params = {"email", "password"}, method = RequestMethod.POST, 19 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 20 | produces = {MediaType.APPLICATION_JSON_VALUE}) 21 | public MockUser signIn(@RequestParam("email") String email, @RequestParam("password") String password) { 22 | return MockClassesHelper.getUserMock(); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassStrategies.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.filter.SessionStrategies; 5 | import com.jfilter.filter.SessionStrategy; 6 | import com.jfilter.mock.MockClassesHelper; 7 | import com.jfilter.mock.MockUser; 8 | import org.springframework.http.MediaType; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RequestMethod; 11 | import org.springframework.web.bind.annotation.RequestParam; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | @RestController 15 | 16 | @SessionStrategies({ 17 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = { 18 | @FieldFilterSetting(fields = {"id", "password"}) 19 | }), 20 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = { 21 | @FieldFilterSetting(fields = {"email"}) 22 | }) 23 | }) 24 | 25 | public class WSClassStrategies { 26 | public static final String MAPPING_SIGN_IN_STRATEGIES = "/strategies/customers/signIn"; 27 | 28 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGIES, 29 | params = {"email", "password"}, method = RequestMethod.POST, 30 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 31 | produces = {MediaType.APPLICATION_JSON_VALUE}) 32 | public MockUser signIn(@RequestParam("email") String email, @RequestParam("password") String password) { 33 | return MockClassesHelper.getUserMock(); 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassStrategyMultiple.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.filter.SessionStrategy; 5 | import com.jfilter.mock.MockClassesHelper; 6 | import com.jfilter.mock.MockUser; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RequestParam; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | @RestController 14 | 15 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = { 16 | @FieldFilterSetting(fields = {"id", "password"}) 17 | }) 18 | 19 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = { 20 | @FieldFilterSetting(fields = {"email"}) 21 | }) 22 | public class WSClassStrategyMultiple { 23 | public static final String MAPPING_SIGN_IN_STRATEGY_MULTIPLE = "/strategy-multiple/customers/signIn"; 24 | 25 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGY_MULTIPLE, 26 | params = {"email", "password"}, method = RequestMethod.POST, 27 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 28 | produces = {MediaType.APPLICATION_JSON_VALUE}) 29 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) { 30 | return MockClassesHelper.getUserMock(); 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSClassStrategySingle.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.filter.FieldFilterSetting; 4 | import com.jfilter.filter.SessionStrategy; 5 | import com.jfilter.mock.MockClassesHelper; 6 | import com.jfilter.mock.MockUser; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RequestParam; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | @RestController 14 | 15 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = { 16 | @FieldFilterSetting(fields = {"id", "password"}) 17 | }) 18 | public class WSClassStrategySingle { 19 | public static final String MAPPING_SIGN_IN_STRATEGY_SINGLE = "/strategy-single/customers/signIn"; 20 | 21 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGY_SINGLE, 22 | params = {"email", "password"}, method = RequestMethod.POST, 23 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 24 | produces = {MediaType.APPLICATION_JSON_VALUE}) 25 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) { 26 | return MockClassesHelper.getUserMock(); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/mock/webservice/WSDynamicFilter.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.mock.webservice; 2 | 3 | import com.jfilter.components.DynamicSessionFilter; 4 | import com.jfilter.filter.DynamicFilter; 5 | import com.jfilter.filter.FilterFields; 6 | import com.jfilter.mock.MockClassesHelper; 7 | import com.jfilter.mock.MockUser; 8 | import com.jfilter.mock.config.MockDynamicNullFilter; 9 | import com.jfilter.util.FilterUtil; 10 | import org.springframework.http.MediaType; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestMethod; 13 | import org.springframework.web.bind.annotation.RequestParam; 14 | import org.springframework.web.bind.annotation.RestController; 15 | 16 | import javax.servlet.http.HttpServletRequest; 17 | import javax.servlet.http.HttpSession; 18 | import java.util.Arrays; 19 | 20 | @RestController 21 | public class WSDynamicFilter { 22 | public static final String MAPPING_NOT_NULL_DYNAMIC_FILTER = "/dynamic/notNullFilter"; 23 | public static final String MAPPING_NULL_DYNAMIC_FILTER = "/dynamic/nullFilter"; 24 | public static final String MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS = "/dynamic/sessionAttributeFields"; 25 | public static final String MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS = "/dynamic/requestAttributeFields"; 26 | 27 | @DynamicFilter(DynamicSessionFilter.class) 28 | @RequestMapping(value = MAPPING_NOT_NULL_DYNAMIC_FILTER, 29 | params = {"email", "password"}, method = RequestMethod.POST, 30 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 31 | produces = {MediaType.APPLICATION_JSON_VALUE}) 32 | public MockUser notNullFilter(@RequestParam("email") String email, @RequestParam("password") String password) { 33 | return MockClassesHelper.getUserMock(); 34 | } 35 | 36 | @DynamicFilter(MockDynamicNullFilter.class) 37 | @RequestMapping(value = MAPPING_NULL_DYNAMIC_FILTER, 38 | params = {"email", "password"}, method = RequestMethod.POST, 39 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 40 | produces = {MediaType.APPLICATION_JSON_VALUE}) 41 | public MockUser nullFilter(@RequestParam("email") String email, @RequestParam("password") String password) { 42 | return MockClassesHelper.getUserMock(); 43 | } 44 | 45 | @DynamicFilter(DynamicSessionFilter.class) 46 | @RequestMapping(value = MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS, 47 | params = {"email", "password"}, method = RequestMethod.POST, 48 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 49 | produces = {MediaType.APPLICATION_JSON_VALUE}) 50 | public MockUser sessionAttributeFields(HttpSession session, @RequestParam("email") String email, @RequestParam("password") String password) { 51 | 52 | FilterUtil.useFilter(session, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email"))); 53 | return MockClassesHelper.getUserMock(); 54 | } 55 | 56 | @DynamicFilter(DynamicSessionFilter.class) 57 | @RequestMapping(value = MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS, 58 | params = {"email", "password"}, method = RequestMethod.POST, 59 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, 60 | produces = {MediaType.APPLICATION_JSON_VALUE}) 61 | public MockUser sessionAttributeFields(HttpServletRequest request, @RequestParam("email") String email, @RequestParam("password") String password) { 62 | 63 | FilterUtil.useFilter(request, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email"))); 64 | return MockClassesHelper.getUserMock(); 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /src/test/java/com/jfilter/request/RequestMethodParameterTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.request; 2 | 3 | import com.jfilter.filter.FileConfigurationTest; 4 | import com.jfilter.mock.MockClassesHelper; 5 | import com.jfilter.filter.FilterFields; 6 | import com.jfilter.filter.FileConfig; 7 | import org.junit.Test; 8 | 9 | import static org.junit.Assert.assertNotNull; 10 | import static org.junit.Assert.assertTrue; 11 | import static org.junit.Assert.assertEquals; 12 | 13 | public class RequestMethodParameterTest { 14 | 15 | @Test 16 | public void testGetStrategyFieldsNotNull() { 17 | FileConfig config = MockClassesHelper.getMockAdminFileConfig(); 18 | assertNotNull(config); 19 | 20 | FileConfig.Strategy strategy = config.getControllers().get(0).getStrategies().get(0); 21 | assertNotNull(strategy); 22 | 23 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields()); 24 | assertTrue(filterFields.getFieldsMap().keySet().size() > 0); 25 | } 26 | 27 | @Test 28 | public void testGetStrategyFieldsEmptyStrategy() { 29 | FileConfig.Strategy strategy = new FileConfig.Strategy(); 30 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields()); 31 | assertEquals(0, filterFields.getFieldsMap().keySet().size()); 32 | } 33 | 34 | @Test 35 | public void testGetStrategyFieldsNull() { 36 | FileConfig.Strategy strategy = new FileConfig.Strategy(); 37 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields()); 38 | assertEquals(0, filterFields.getFieldsMap().keySet().size()); 39 | } 40 | 41 | @Test 42 | public void testGetStrategyFieldsMultiple() { 43 | FileConfig mockConfig = MockClassesHelper.getMockAdminFileConfig(); 44 | 45 | FileConfig.Strategy strategy = mockConfig.getControllers().get(0).getStrategies().get(0); 46 | 47 | FileConfig.Filter filter = new FileConfig.Filter(); 48 | filter.setClassName(strategy.getFilters().get(0).getClassName()); 49 | filter.getFields().add(new FileConfig.Field().setName("password")); 50 | filter.getFields().add(new FileConfig.Field().setName("email")); 51 | filter.getFields().add(new FileConfig.Field().setName("email")); 52 | 53 | 54 | strategy.getFilters().add(filter); 55 | strategy.getFilters().add(filter); 56 | 57 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields()); 58 | assertEquals(3, filterFields.getFields(FileConfigurationTest.class).size()); 59 | } 60 | 61 | 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/request/RequestSessionTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.request; 2 | 3 | import com.jfilter.mock.MockHttpRequestHelper; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | import javax.servlet.http.HttpServletRequest; 8 | 9 | import static org.junit.Assert.assertEquals; 10 | import static org.junit.Assert.assertNull; 11 | import static org.junit.Assert.assertNotNull; 12 | import static org.junit.Assert.assertTrue; 13 | import static org.junit.Assert.assertFalse; 14 | 15 | public class RequestSessionTest { 16 | private RequestSession requestSession; 17 | 18 | @Before 19 | public void init() { 20 | this.requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 21 | } 22 | 23 | @Test 24 | public void testClassExists() { 25 | Object object = requestSession.getSessionProperty("ROLE"); 26 | assertEquals("ADMIN", object); 27 | } 28 | 29 | @Test 30 | public void testClassExistsFalse() { 31 | Object object = requestSession.getSessionProperty("SOME_FIELD"); 32 | assertNull(object); 33 | } 34 | 35 | @Test(expected = IllegalArgumentException.class) 36 | public void testNullSession() { 37 | RequestSession requestSession = new RequestSession(null); 38 | assertNotNull(requestSession); 39 | } 40 | 41 | @Test 42 | public void testGetSession() { 43 | assertNotNull(requestSession.getSession()); 44 | } 45 | 46 | @Test 47 | public void testPropertyExist() { 48 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 49 | boolean result = requestSession.isSessionPropertyExists("ROLE", "ADMIN"); 50 | 51 | assertTrue(result); 52 | } 53 | 54 | @Test 55 | public void testPropertyNotExist() { 56 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 57 | boolean result = requestSession.isSessionPropertyExists("UN_EXIST", "UN_EXIST"); 58 | 59 | assertFalse(result); 60 | } 61 | 62 | @Test 63 | public void testPropertyNotExistNullProperty() { 64 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 65 | boolean result = requestSession.isSessionPropertyExists(null, "UN_EXIST"); 66 | assertFalse(result); 67 | } 68 | 69 | @Test 70 | public void testPropertyNotExistNullValue() { 71 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 72 | boolean result = requestSession.isSessionPropertyExists("UN_EXIST", null); 73 | assertFalse(result); 74 | } 75 | 76 | @Test 77 | public void testPropertyNotExistNulls() { 78 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 79 | boolean result = requestSession.isSessionPropertyExists(null, null); 80 | assertFalse(result); 81 | } 82 | 83 | @Test 84 | public void testGetSessionProperty() { 85 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 86 | Object result = requestSession.getSessionProperty("ROLE"); 87 | assertNotNull(result); 88 | } 89 | 90 | @Test 91 | public void testGetSessionPropertyFalse() { 92 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 93 | Object result = requestSession.getSessionProperty("UN_EXIST"); 94 | assertNull(result); 95 | } 96 | 97 | @Test 98 | public void testGetSessionPropertyNull() { 99 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 100 | Object result = requestSession.getSessionProperty(null); 101 | assertNull(result); 102 | } 103 | 104 | @Test 105 | public void testRequestNotNull() { 106 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest()); 107 | HttpServletRequest request = requestSession.getRequest(); 108 | assertNotNull(request); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/test/java/com/jfilter/util/FilterUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.jfilter.util; 2 | 3 | import com.jfilter.TestUtils; 4 | import org.junit.Test; 5 | import java.lang.reflect.InvocationTargetException; 6 | 7 | public class FilterUtilTest { 8 | 9 | @Test(expected = InvocationTargetException.class) 10 | public void constructorTest() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { 11 | TestUtils.instantiateObject(FilterUtil.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/test/resources/bad_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/test/resources/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/test/resources/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | controllers: 3 | - className: "com.jfilter.mock.MockMethods" 4 | strategies: 5 | - attributeName: "ROLE" 6 | attributeValue: "ADMIN" 7 | filters: 8 | - className: "com.jfilter.mock.MockUser" 9 | fields: 10 | - name: "id" 11 | filterBehaviour: "HIDE_FIELDS" 12 | - attributeName: "ROLE" 13 | attributeValue: "USER" 14 | filters: 15 | - className: "com.jfilter.mock.MockUser" 16 | fields: 17 | - name: "id" 18 | - name: "password" 19 | filterBehaviour: "HIDE_FIELDS" 20 | -------------------------------------------------------------------------------- /src/test/resources/configMockWebService.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/test/resources/config_class_duplicated.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/test/resources/config_class_not_found.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/test/resources/config_default_strategy.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/test/resources/config_dynamic.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/test/resources/config_io_exception.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/test/resources/config_no_controllers.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/test/resources/config_no_strategies.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/test/resources/config_with_behaviour.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | --------------------------------------------------------------------------------