Package com.vaadin.server
Class SynchronizedRequestHandler
- java.lang.Object
-
- com.vaadin.server.SynchronizedRequestHandler
-
- All Implemented Interfaces:
RequestHandler,Serializable
- Direct Known Subclasses:
BootstrapHandler,HeartbeatHandler,UidlRequestHandler,UIInitHandler,UnsupportedBrowserHandler
public abstract class SynchronizedRequestHandler extends Object implements RequestHandler
RequestHandler which takes care of locking and unlocking of the VaadinSession automatically. The session is locked beforesynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse)is called and unlocked after it has completed.- Since:
- 7.1
- Version:
- Author:
- Vaadin Ltd
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceSynchronizedRequestHandler.ResponseWriterResponseWriter is optionally returned by request handlers which implementsynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse, String)The ResponseWriter will be executed byhandleRequest(VaadinSession, VaadinRequest, VaadinResponse)without holding Vaadin session lock.
-
Field Summary
Fields Modifier and Type Field Description static intMAX_BUFFER_SIZEMaximum capacity of request body.
-
Constructor Summary
Constructors Constructor Description SynchronizedRequestHandler()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected booleancanHandleRequest(VaadinRequest request)Check whether a request may be handled by this handler.static longgetMaxRequestBodySize(VaadinRequest request)Gets the configured maximum request body size for the given request, in characters.static StringgetRequestBody(Reader reader)Reads the entire request body from the given reader without any size limit.static StringgetRequestBody(Reader reader, long maxBodySize)Reads the request body from the given reader, rejecting it once it exceedsmaxBodySizecharacters.booleanhandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response)Called when a request needs to be handled.booleanisReadAndWriteOutsideSessionLock()Returns whether request body should be read and the response written without holdingVaadinSessionlock.abstract booleansynchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response)Identical tohandleRequest(VaadinSession, VaadinRequest, VaadinResponse)except theVaadinSessionis locked before this is called and unlocked after this has completed.Optional<SynchronizedRequestHandler.ResponseWriter>synchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response, String requestBody)Identical tosynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse)except theVaadinSessionis locked before this is called and the response requestBody has been read before locking the session and is provided as a separate parameter.
-
-
-
Field Detail
-
MAX_BUFFER_SIZE
public static final int MAX_BUFFER_SIZE
Maximum capacity of request body.- See Also:
- Constant Field Values
-
-
Method Detail
-
handleRequest
public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
Description copied from interface:RequestHandlerCalled when a request needs to be handled. If a response is written, this method should returntrueto indicate that no more request handlers should be invoked for the request.Note that request handlers by default do not lock the session. If you are using VaadinSession or anything inside the VaadinSession you must ensure the session is locked. This can be done by extending
SynchronizedRequestHandleror by usingVaadinSession.accessSynchronously(Runnable)orUI.accessSynchronously(Runnable).- Specified by:
handleRequestin interfaceRequestHandler- Parameters:
session- The session for the requestrequest- The request to handleresponse- The response object to which a response can be written.- Returns:
- true if a response has been written and no further request handlers should be called, otherwise false
- Throws:
IOException- If an IO error occurred
-
synchronizedHandleRequest
public abstract boolean synchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
Identical tohandleRequest(VaadinSession, VaadinRequest, VaadinResponse)except theVaadinSessionis locked before this is called and unlocked after this has completed.- Parameters:
session- The session for the requestrequest- The request to handleresponse- The response object to which a response can be written.- Returns:
- true if a response has been written and no further request handlers should be called, otherwise false
- Throws:
IOException- If an IO error occurred- See Also:
handleRequest(VaadinSession, VaadinRequest, VaadinResponse)
-
isReadAndWriteOutsideSessionLock
public boolean isReadAndWriteOutsideSessionLock()
Returns whether request body should be read and the response written without holdingVaadinSessionlock.- Returns:
- true if
synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse, String)should be called. Returns false ifsynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse)should be called. - Since:
-
synchronizedHandleRequest
public Optional<SynchronizedRequestHandler.ResponseWriter> synchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response, String requestBody) throws IOException, UnsupportedOperationException
Identical tosynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse)except theVaadinSessionis locked before this is called and the response requestBody has been read before locking the session and is provided as a separate parameter.- Parameters:
session- The session for the requestrequest- The request to handleresponse- The response object to which a response can be written.requestBody- Request body pre-read from the request object- Returns:
- a ResponseWriter wrapped into an Optional, if this handler will write the response and no further request handlers should be called, otherwise an empty Optional. The ResponseWriter will be executed after the VaadinSession is unlocked.
- Throws:
IOException- If an IO error occurred.UnsupportedOperationException- Since:
- See Also:
handleRequest(VaadinSession, VaadinRequest, VaadinResponse)
-
canHandleRequest
protected boolean canHandleRequest(VaadinRequest request)
Check whether a request may be handled by this handler. This can be used as an optimization to avoid locking the session just to investigate some method property. The default implementation just returnstruewhich means that all requests will be handled by callingsynchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse)with the session locked.- Parameters:
request- the request to handle- Returns:
trueif the request handling should continue once the session has been locked;falseif there's no need to lock the session since the request would still not be handled.- Since:
- 7.2
-
getRequestBody
public static String getRequestBody(Reader reader) throws IOException
Reads the entire request body from the given reader without any size limit.Prefer
getRequestBody(Reader, long)on request-handling code paths so that the configured maximum request body size is enforced.- Parameters:
reader- a Reader containing the body of the request- Returns:
- request body as a String
- Throws:
IOException- If an IO error occurred.- Since:
-
getRequestBody
public static String getRequestBody(Reader reader, long maxBodySize) throws IOException
Reads the request body from the given reader, rejecting it once it exceedsmaxBodySizecharacters.The limit is enforced on the number of characters read from the reader. For typical ASCII/UTF-8 JSON payloads this equals the number of bytes; multi-byte content makes the effective byte limit larger.
- Parameters:
reader- the reader to read the request body frommaxBodySize- the maximum number of characters to read, or a negative number to read without any limit- Returns:
- the request body as a string
- Throws:
IOException- if reading failsRequestBodyTooLargeException- if the body exceedsmaxBodySizecharacters- Since:
-
getMaxRequestBodySize
public static long getMaxRequestBodySize(VaadinRequest request)
Gets the configured maximum request body size for the given request, in characters.- Parameters:
request- the request being handled- Returns:
- the maximum request body size in characters, or a negative number if the limit is disabled
- Since:
-
-