16
16
17
17
package com .vaadin .flow .server ;
18
18
19
- import java .io .BufferedWriter ;
20
- import java .io .IOException ;
21
- import java .io .InputStream ;
22
- import java .io .OutputStream ;
23
- import java .io .OutputStreamWriter ;
24
- import java .io .PrintWriter ;
25
- import java .io .Serializable ;
26
- import java .lang .reflect .Constructor ;
27
- import java .net .URL ;
28
- import java .nio .charset .StandardCharsets ;
29
- import java .security .MessageDigest ;
30
- import java .util .ArrayList ;
31
- import java .util .Collection ;
32
- import java .util .Collections ;
33
- import java .util .HashMap ;
34
- import java .util .List ;
35
- import java .util .Locale ;
36
- import java .util .Map ;
37
- import java .util .Map .Entry ;
38
- import java .util .Optional ;
39
- import java .util .ServiceLoader ;
40
- import java .util .Set ;
41
- import java .util .concurrent .CancellationException ;
42
- import java .util .concurrent .ConcurrentHashMap ;
43
- import java .util .concurrent .CopyOnWriteArrayList ;
44
- import java .util .concurrent .Future ;
45
- import java .util .concurrent .TimeUnit ;
46
- import java .util .concurrent .locks .Lock ;
47
- import java .util .concurrent .locks .ReentrantLock ;
48
- import java .util .stream .Collectors ;
49
- import java .util .stream .StreamSupport ;
50
-
51
- import org .slf4j .Logger ;
52
- import org .slf4j .LoggerFactory ;
53
-
54
19
import com .vaadin .flow .component .UI ;
55
20
import com .vaadin .flow .di .DefaultInstantiator ;
56
21
import com .vaadin .flow .di .Instantiator ;
64
29
import com .vaadin .flow .router .RouteData ;
65
30
import com .vaadin .flow .router .Router ;
66
31
import com .vaadin .flow .server .HandlerHelper .RequestType ;
67
- import com .vaadin .flow .server .communication .AtmospherePushConnection ;
68
- import com .vaadin .flow .server .communication .HeartbeatHandler ;
69
- import com .vaadin .flow .server .communication .IndexHtmlRequestListener ;
70
- import com .vaadin .flow .server .communication .IndexHtmlResponse ;
71
- import com .vaadin .flow .server .communication .JavaScriptBootstrapHandler ;
72
- import com .vaadin .flow .server .communication .PwaHandler ;
73
- import com .vaadin .flow .server .communication .SessionRequestHandler ;
74
- import com .vaadin .flow .server .communication .StreamRequestHandler ;
75
- import com .vaadin .flow .server .communication .UidlRequestHandler ;
76
- import com .vaadin .flow .server .communication .WebComponentBootstrapHandler ;
77
- import com .vaadin .flow .server .communication .WebComponentProvider ;
32
+ import com .vaadin .flow .server .communication .*;
78
33
import com .vaadin .flow .shared .ApplicationConstants ;
79
34
import com .vaadin .flow .shared .JsonConstants ;
80
35
import com .vaadin .flow .shared .Registration ;
81
36
import com .vaadin .flow .shared .communication .PushMode ;
82
-
83
37
import elemental .json .Json ;
84
38
import elemental .json .JsonException ;
85
39
import elemental .json .JsonObject ;
86
40
import elemental .json .impl .JsonUtil ;
41
+ import org .slf4j .Logger ;
42
+ import org .slf4j .LoggerFactory ;
43
+
44
+ import java .io .*;
45
+ import java .lang .reflect .Constructor ;
46
+ import java .net .URL ;
47
+ import java .nio .charset .StandardCharsets ;
48
+ import java .security .MessageDigest ;
49
+ import java .util .*;
50
+ import java .util .Map .Entry ;
51
+ import java .util .concurrent .*;
52
+ import java .util .concurrent .locks .Lock ;
53
+ import java .util .concurrent .locks .ReentrantLock ;
54
+ import java .util .stream .Collectors ;
55
+ import java .util .stream .StreamSupport ;
87
56
88
57
import static java .nio .charset .StandardCharsets .UTF_8 ;
89
58
@@ -114,6 +83,8 @@ public abstract class VaadinService implements Serializable {
114
83
+ PushMode .class .getSimpleName () + "." + PushMode .DISABLED .name ()
115
84
+ "." + SEPARATOR ;
116
85
86
+ private List <VaadinFilter > vaadinFilters = new ArrayList <>();
87
+
117
88
/**
118
89
* Attribute name for telling
119
90
* {@link VaadinSession#valueUnbound(jakarta.servlet.http.HttpSessionBindingEvent)}
@@ -1433,6 +1404,7 @@ public void requestStart(VaadinRequest request, VaadinResponse response) {
1433
1404
}
1434
1405
setCurrentInstances (request , response );
1435
1406
request .setAttribute (REQUEST_START_TIME_ATTRIBUTE , System .nanoTime ());
1407
+ vaadinFilters .forEach (vaadinFilter -> vaadinFilter .requestStart (request , response ));
1436
1408
}
1437
1409
1438
1410
/**
@@ -1449,6 +1421,7 @@ public void requestStart(VaadinRequest request, VaadinResponse response) {
1449
1421
*/
1450
1422
public void requestEnd (VaadinRequest request , VaadinResponse response ,
1451
1423
VaadinSession session ) {
1424
+ vaadinFilters .forEach (vaadinFilter -> vaadinFilter .requestEnd (request , response , session ));
1452
1425
if (session != null ) {
1453
1426
assert VaadinSession .getCurrent () == session ;
1454
1427
session .lock ();
@@ -1544,6 +1517,7 @@ private void handleExceptionDuringRequest(VaadinRequest request,
1544
1517
vaadinSession .lock ();
1545
1518
}
1546
1519
try {
1520
+ vaadinFilters .forEach (vaadinFilter -> vaadinFilter .handleException (request , response , vaadinSession , t ));
1547
1521
if (vaadinSession != null ) {
1548
1522
vaadinSession .getErrorHandler ().error (new ErrorEvent (t ));
1549
1523
}
@@ -2374,6 +2348,14 @@ public static String getCsrfTokenAttributeName() {
2374
2348
+ ApplicationConstants .CSRF_TOKEN ;
2375
2349
}
2376
2350
2351
+ public List <VaadinFilter > getVaadinFilters () {
2352
+ return vaadinFilters ;
2353
+ }
2354
+
2355
+ public void setVaadinFilters (List <VaadinFilter > vaadinFilters ) {
2356
+ this .vaadinFilters = vaadinFilters ;
2357
+ }
2358
+
2377
2359
private void doSetClassLoader () {
2378
2360
final String classLoaderName = getDeploymentConfiguration () == null
2379
2361
? null
0 commit comments