Skip to content

Commit d4fca88

Browse files
authored
feat!: BeforeEvent target as extends Component (#23259)
Have the navigationTarget in BeforeEvents Be of type Class<? extends Component> instead of only Class<?> Fixes #23221
1 parent cc33f5b commit d4fca88

File tree

6 files changed

+42
-30
lines changed

6 files changed

+42
-30
lines changed

flow-server/src/main/java/com/vaadin/flow/router/BeforeEnterEvent.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.List;
1919

20+
import com.vaadin.flow.component.Component;
2021
import com.vaadin.flow.component.UI;
2122

2223
/**
@@ -39,7 +40,8 @@ public class BeforeEnterEvent extends BeforeEvent {
3940
* @param layouts
4041
* navigation layout chain, not <code>null</code>
4142
*/
42-
public BeforeEnterEvent(NavigationEvent event, Class<?> navigationTarget,
43+
public BeforeEnterEvent(NavigationEvent event,
44+
Class<? extends Component> navigationTarget,
4345
List<Class<? extends RouterLayout>> layouts) {
4446
super(event, navigationTarget, layouts);
4547
errorEvent = event instanceof ErrorNavigationEvent;
@@ -57,7 +59,8 @@ public BeforeEnterEvent(NavigationEvent event, Class<?> navigationTarget,
5759
* @param layouts
5860
* navigation layout chain, not <code>null</code>
5961
*/
60-
public BeforeEnterEvent(NavigationEvent event, Class<?> navigationTarget,
62+
public BeforeEnterEvent(NavigationEvent event,
63+
Class<? extends Component> navigationTarget,
6164
RouteParameters parameters,
6265
List<Class<? extends RouterLayout>> layouts) {
6366
super(event, navigationTarget, parameters, layouts);
@@ -83,8 +86,8 @@ public BeforeEnterEvent(NavigationEvent event, Class<?> navigationTarget,
8386
* <code>null</code>
8487
*/
8588
public BeforeEnterEvent(Router router, NavigationTrigger trigger,
86-
Location location, Class<?> navigationTarget, UI ui,
87-
List<Class<? extends RouterLayout>> layouts) {
89+
Location location, Class<? extends Component> navigationTarget,
90+
UI ui, List<Class<? extends RouterLayout>> layouts) {
8891
super(router, trigger, location, navigationTarget, ui, layouts);
8992
errorEvent = false;
9093
}
@@ -110,7 +113,7 @@ public BeforeEnterEvent(Router router, NavigationTrigger trigger,
110113
* <code>null</code>
111114
*/
112115
public BeforeEnterEvent(Router router, NavigationTrigger trigger,
113-
Location location, Class<?> navigationTarget,
116+
Location location, Class<? extends Component> navigationTarget,
114117
RouteParameters parameters, UI ui,
115118
List<Class<? extends RouterLayout>> layouts) {
116119
super(router, trigger, location, navigationTarget, parameters, ui,

flow-server/src/main/java/com/vaadin/flow/router/BeforeEvent.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public abstract class BeforeEvent extends EventObject {
4646
private NavigationHandler forwardTarget;
4747
private NavigationHandler rerouteTarget;
4848

49-
private final Class<?> navigationTarget;
49+
private final Class<? extends Component> navigationTarget;
5050
private final RouteParameters parameters;
5151
private QueryParameters redirectQueryParameters;
5252
private final List<Class<? extends RouterLayout>> layouts;
@@ -70,7 +70,8 @@ public abstract class BeforeEvent extends EventObject {
7070
* @param layouts
7171
* Navigation layout chain, not <code>null</code>
7272
*/
73-
public BeforeEvent(NavigationEvent event, Class<?> navigationTarget,
73+
public BeforeEvent(NavigationEvent event,
74+
Class<? extends Component> navigationTarget,
7475
List<Class<? extends RouterLayout>> layouts) {
7576
this(event.getSource(), event.getTrigger(), event.getLocation(),
7677
navigationTarget, event.getUI(), layouts);
@@ -88,7 +89,8 @@ public BeforeEvent(NavigationEvent event, Class<?> navigationTarget,
8889
* @param layouts
8990
* Navigation layout chain, not <code>null</code>
9091
*/
91-
public BeforeEvent(NavigationEvent event, Class<?> navigationTarget,
92+
public BeforeEvent(NavigationEvent event,
93+
Class<? extends Component> navigationTarget,
9294
RouteParameters parameters,
9395
List<Class<? extends RouterLayout>> layouts) {
9496
this(event.getSource(), event.getTrigger(), event.getLocation(),
@@ -115,8 +117,8 @@ public BeforeEvent(NavigationEvent event, Class<?> navigationTarget,
115117
* <code>null</code>
116118
*/
117119
public BeforeEvent(Router router, NavigationTrigger trigger,
118-
Location location, Class<?> navigationTarget, UI ui,
119-
List<Class<? extends RouterLayout>> layouts) {
120+
Location location, Class<? extends Component> navigationTarget,
121+
UI ui, List<Class<? extends RouterLayout>> layouts) {
120122
this(router, trigger, location, navigationTarget,
121123
RouteParameters.empty(), ui, layouts);
122124
}
@@ -142,7 +144,7 @@ public BeforeEvent(Router router, NavigationTrigger trigger,
142144
* <code>null</code>
143145
*/
144146
public BeforeEvent(Router router, NavigationTrigger trigger,
145-
Location location, Class<?> navigationTarget,
147+
Location location, Class<? extends Component> navigationTarget,
146148
RouteParameters parameters, UI ui,
147149
List<Class<? extends RouterLayout>> layouts) {
148150
super(router);
@@ -1044,7 +1046,7 @@ public String getRerouteUrl() {
10441046
*
10451047
* @return navigation target
10461048
*/
1047-
public Class<?> getNavigationTarget() {
1049+
public Class<? extends Component> getNavigationTarget() {
10481050
return navigationTarget;
10491051
}
10501052

flow-server/src/main/java/com/vaadin/flow/router/BeforeLeaveEvent.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.io.Serializable;
1919
import java.util.List;
2020

21+
import com.vaadin.flow.component.Component;
2122
import com.vaadin.flow.component.UI;
2223

2324
/**
@@ -115,7 +116,8 @@ public void cancel() {
115116
* @param layouts
116117
* navigation layout chain, not <code>null</code>
117118
*/
118-
public BeforeLeaveEvent(NavigationEvent event, Class<?> navigationTarget,
119+
public BeforeLeaveEvent(NavigationEvent event,
120+
Class<? extends Component> navigationTarget,
119121
List<Class<? extends RouterLayout>> layouts) {
120122
super(event, navigationTarget, layouts);
121123
}
@@ -132,7 +134,8 @@ public BeforeLeaveEvent(NavigationEvent event, Class<?> navigationTarget,
132134
* @param layouts
133135
* navigation layout chain, not <code>null</code>
134136
*/
135-
public BeforeLeaveEvent(NavigationEvent event, Class<?> navigationTarget,
137+
public BeforeLeaveEvent(NavigationEvent event,
138+
Class<? extends Component> navigationTarget,
136139
RouteParameters parameters,
137140
List<Class<? extends RouterLayout>> layouts) {
138141
super(event, navigationTarget, parameters, layouts);
@@ -157,8 +160,8 @@ public BeforeLeaveEvent(NavigationEvent event, Class<?> navigationTarget,
157160
* <code>null</code>
158161
*/
159162
public BeforeLeaveEvent(Router router, NavigationTrigger trigger,
160-
Location location, Class<?> navigationTarget, UI ui,
161-
List<Class<? extends RouterLayout>> layouts) {
163+
Location location, Class<? extends Component> navigationTarget,
164+
UI ui, List<Class<? extends RouterLayout>> layouts) {
162165
super(router, trigger, location, navigationTarget, ui, layouts);
163166
}
164167

@@ -183,7 +186,7 @@ public BeforeLeaveEvent(Router router, NavigationTrigger trigger,
183186
* <code>null</code>
184187
*/
185188
public BeforeLeaveEvent(Router router, NavigationTrigger trigger,
186-
Location location, Class<?> navigationTarget,
189+
Location location, Class<? extends Component> navigationTarget,
187190
RouteParameters parameters, UI ui,
188191
List<Class<? extends RouterLayout>> layouts) {
189192
super(router, trigger, location, navigationTarget, parameters, ui,

flow-server/src/test/java/com/vaadin/flow/server/auth/AccessControlTestClasses.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public static class NoAnnotationAnonymousAllowedByGrandParentView
354354
}
355355

356356
@PermitAll
357-
public static class PermitAllGrandParentView {
357+
public static class PermitAllGrandParentView extends Component {
358358
}
359359

360360
public static class PermitAllParentView extends PermitAllGrandParentView {
@@ -367,7 +367,7 @@ public static class NoAnnotationPermitAllByGrandParentView
367367

368368
@AccessDeniedErrorRouter(rerouteToError = NotFoundException.class)
369369
@RolesAllowed("user")
370-
public static class RolesAllowedUserGrandParentView {
370+
public static class RolesAllowedUserGrandParentView extends Component {
371371
}
372372

373373
public static class RolesAllowedUserParentView
@@ -380,7 +380,7 @@ public static class NoAnnotationRolesAllowedUserByGrandParentView
380380
}
381381

382382
@RolesAllowed("admin")
383-
public static class RolesAllowedAdminGrandParentView {
383+
public static class RolesAllowedAdminGrandParentView extends Component {
384384
}
385385

386386
public static class RolesAllowedAdminParentView
@@ -393,7 +393,7 @@ public static class NoAnnotationRolesAllowedAdminByGrandParentView
393393
}
394394

395395
@DenyAll
396-
public static class DenyAllGrandParentView {
396+
public static class DenyAllGrandParentView extends Component {
397397
}
398398

399399
public static class DenyAllParentView extends DenyAllGrandParentView {
@@ -410,7 +410,7 @@ public interface CustomComponent {
410410

411411
@Route("no-annotation-denyall-as-interfaces-ignored")
412412
public static class NoAnnotationDenyAllAsInterfacesIgnoredView
413-
implements CustomComponent {
413+
extends Component implements CustomComponent {
414414
}
415415

416416
@Route("no-annotation-permitall-from-parent-and-interfaces-ignored")
@@ -420,7 +420,7 @@ public static class NoAnnotationPermitAllByGrandParentAsInterfacesIgnoredView
420420

421421
@Tag(Tag.DIV)
422422
@AnonymousAllowed
423-
public static class CustomErrorView
423+
public static class CustomErrorView extends Component
424424
implements HasErrorParameter<NotFoundException> {
425425

426426
@Override
@@ -431,7 +431,7 @@ public int setErrorParameter(BeforeEnterEvent event,
431431
}
432432

433433
@Tag(Tag.DIV)
434-
public static class NotAnnotatedCustomErrorView
434+
public static class NotAnnotatedCustomErrorView extends Component
435435
implements HasErrorParameter<NotFoundException> {
436436

437437
@Override

flow-server/src/test/java/com/vaadin/flow/server/auth/AnnotatedViewAccessCheckerTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.Test;
2626
import org.mockito.Mockito;
2727

28+
import com.vaadin.flow.component.Component;
2829
import com.vaadin.flow.component.UI;
2930
import com.vaadin.flow.internal.CurrentInstance;
3031
import com.vaadin.flow.router.BeforeEnterEvent;
@@ -506,13 +507,14 @@ public void routeWithNoAnnotationsAllowed_LayoutWithAllowed_denied() {
506507
Assert.assertEquals(AccessCheckDecision.DENY, result.decision());
507508
}
508509

509-
private AccessCheckResult checkAccess(Class<?> viewClass, User user) {
510+
private AccessCheckResult checkAccess(Class<? extends Component> viewClass,
511+
User user) {
510512
NavigationContext context = setupNavigationContext(viewClass, user);
511513
return this.viewAccessChecker.check(context);
512514
}
513515

514-
static NavigationContext setupNavigationContext(Class<?> navigationTarget,
515-
User user) {
516+
static NavigationContext setupNavigationContext(
517+
Class<? extends Component> navigationTarget, User user) {
516518
CurrentInstance.clearAll();
517519

518520
Principal principal;

flow-server/src/test/java/com/vaadin/flow/server/auth/RoutePathAccessCheckerTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.junit.Test;
2828
import org.mockito.Mockito;
2929

30+
import com.vaadin.flow.component.Component;
3031
import com.vaadin.flow.component.UI;
3132
import com.vaadin.flow.internal.CurrentInstance;
3233
import com.vaadin.flow.internal.Pair;
@@ -374,13 +375,14 @@ public void rerouteToError_neutral() {
374375
Mockito.verifyNoInteractions(accessPathChecker);
375376
}
376377

377-
private AccessCheckResult checkAccess(Class<?> viewClass, User user) {
378+
private AccessCheckResult checkAccess(Class<? extends Component> viewClass,
379+
User user) {
378380
NavigationContext context = setupNavigationContext(viewClass, user);
379381
return this.routePathAccessChecker.check(context);
380382
}
381383

382-
private NavigationContext setupNavigationContext(Class<?> navigationTarget,
383-
User user) {
384+
private NavigationContext setupNavigationContext(
385+
Class<? extends Component> navigationTarget, User user) {
384386
CurrentInstance.clearAll();
385387

386388
Principal principal;

0 commit comments

Comments
 (0)