|
@@ -63,7 +63,14 @@ import org.springframework.context.annotation.Role;
|
|
|
import org.springframework.context.event.EventListener;
|
|
|
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
|
|
import org.springframework.core.annotation.AnnotationConfigurationException;
|
|
|
-import org.springframework.core.annotation.Order;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.PageImpl;
|
|
|
+import org.springframework.data.domain.Slice;
|
|
|
+import org.springframework.data.domain.SliceImpl;
|
|
|
+import org.springframework.data.geo.Distance;
|
|
|
+import org.springframework.data.geo.GeoPage;
|
|
|
+import org.springframework.data.geo.GeoResult;
|
|
|
+import org.springframework.data.geo.GeoResults;
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.http.HttpStatusCode;
|
|
|
import org.springframework.http.MediaType;
|
|
@@ -756,6 +763,28 @@ public class PrePostMethodSecurityConfigurationTests {
|
|
|
assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(flight::getAltitude);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "airplane:read")
|
|
|
+ public void findGeoResultByIdWhenAuthorizedResultThenAuthorizes() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ GeoResult<Flight> geoResultFlight = flights.findGeoResultFlightById("1");
|
|
|
+ Flight flight = geoResultFlight.getContent();
|
|
|
+ assertThatNoException().isThrownBy(flight::getAltitude);
|
|
|
+ assertThatNoException().isThrownBy(flight::getSeats);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "seating:read")
|
|
|
+ public void findGeoResultByIdWhenUnauthorizedResultThenDenies() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ GeoResult<Flight> geoResultFlight = flights.findGeoResultFlightById("1");
|
|
|
+ Flight flight = geoResultFlight.getContent();
|
|
|
+ assertThatNoException().isThrownBy(flight::getSeats);
|
|
|
+ assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(flight::getAltitude);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
@WithMockUser(authorities = "airplane:read")
|
|
|
public void findByIdWhenAuthorizedResponseEntityThenAuthorizes() {
|
|
@@ -827,6 +856,46 @@ public class PrePostMethodSecurityConfigurationTests {
|
|
|
.doesNotContain("Kevin Mitnick"));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "airplane:read")
|
|
|
+ public void findPageWhenPostFilterThenFilters() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ flights.findPage()
|
|
|
+ .forEach((flight) -> assertThat(flight.getPassengers()).extracting(Passenger::getName)
|
|
|
+ .doesNotContain("Kevin Mitnick"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "airplane:read")
|
|
|
+ public void findSliceWhenPostFilterThenFilters() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ flights.findSlice()
|
|
|
+ .forEach((flight) -> assertThat(flight.getPassengers()).extracting(Passenger::getName)
|
|
|
+ .doesNotContain("Kevin Mitnick"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "airplane:read")
|
|
|
+ public void findGeoPageWhenPostFilterThenFilters() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ flights.findGeoPage()
|
|
|
+ .forEach((flight) -> assertThat(flight.getContent().getPassengers()).extracting(Passenger::getName)
|
|
|
+ .doesNotContain("Kevin Mitnick"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ @WithMockUser(authorities = "airplane:read")
|
|
|
+ public void findGeoResultsWhenPostFilterThenFilters() {
|
|
|
+ this.spring.register(AuthorizeResultConfig.class).autowire();
|
|
|
+ FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
|
|
|
+ flights.findGeoResults()
|
|
|
+ .forEach((flight) -> assertThat(flight.getContent().getPassengers()).extracting(Passenger::getName)
|
|
|
+ .doesNotContain("Kevin Mitnick"));
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
@WithMockUser(authorities = "airplane:read")
|
|
|
public void findAllWhenPreFilterThenFilters() {
|
|
@@ -1762,16 +1831,8 @@ public class PrePostMethodSecurityConfigurationTests {
|
|
|
|
|
|
@Bean
|
|
|
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
|
|
- @Order(1)
|
|
|
- static TargetVisitor mock() {
|
|
|
- return Mockito.mock(TargetVisitor.class);
|
|
|
- }
|
|
|
-
|
|
|
- @Bean
|
|
|
- @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
|
|
- @Order(0)
|
|
|
- static TargetVisitor skipValueTypes() {
|
|
|
- return TargetVisitor.defaultsSkipValueTypes();
|
|
|
+ static TargetVisitor customTargetVisitor() {
|
|
|
+ return TargetVisitor.of(Mockito.mock(), TargetVisitor.defaultsSkipValueTypes());
|
|
|
}
|
|
|
|
|
|
@Bean
|
|
@@ -1802,10 +1863,39 @@ public class PrePostMethodSecurityConfigurationTests {
|
|
|
return this.flights.values().iterator();
|
|
|
}
|
|
|
|
|
|
+ Page<Flight> findPage() {
|
|
|
+ return new PageImpl<>(new ArrayList<>(this.flights.values()));
|
|
|
+ }
|
|
|
+
|
|
|
+ Slice<Flight> findSlice() {
|
|
|
+ return new SliceImpl<>(new ArrayList<>(this.flights.values()));
|
|
|
+ }
|
|
|
+
|
|
|
+ GeoPage<Flight> findGeoPage() {
|
|
|
+ List<GeoResult<Flight>> results = new ArrayList<>();
|
|
|
+ for (Flight flight : this.flights.values()) {
|
|
|
+ results.add(new GeoResult<>(flight, new Distance(flight.altitude)));
|
|
|
+ }
|
|
|
+ return new GeoPage<>(new GeoResults<>(results));
|
|
|
+ }
|
|
|
+
|
|
|
+ GeoResults<Flight> findGeoResults() {
|
|
|
+ List<GeoResult<Flight>> results = new ArrayList<>();
|
|
|
+ for (Flight flight : this.flights.values()) {
|
|
|
+ results.add(new GeoResult<>(flight, new Distance(flight.altitude)));
|
|
|
+ }
|
|
|
+ return new GeoResults<>(results);
|
|
|
+ }
|
|
|
+
|
|
|
Flight findById(String id) {
|
|
|
return this.flights.get(id);
|
|
|
}
|
|
|
|
|
|
+ GeoResult<Flight> findGeoResultFlightById(String id) {
|
|
|
+ Flight flight = this.flights.get(id);
|
|
|
+ return new GeoResult<>(flight, new Distance(flight.altitude));
|
|
|
+ }
|
|
|
+
|
|
|
Flight save(Flight flight) {
|
|
|
this.flights.put(flight.getId(), flight);
|
|
|
return flight;
|