Class SynchronizedRequestHandler

java.lang.Object
com.vaadin.flow.server.SynchronizedRequestHandler
All Implemented Interfaces:
RequestHandler, Serializable
Direct Known Subclasses:
BootstrapHandler, HeartbeatHandler, TranslationFileRequestHandler, UidlRequestHandler, WebComponentProvider

public abstract class SynchronizedRequestHandler extends Object implements RequestHandler
RequestHandler which takes care of locking and unlocking of the VaadinSession automatically. The session is locked before synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse) is called and unlocked after it has completed.
Since:
1.0
Author:
Vaadin Ltd
See Also:
  • Field Details

  • Constructor Details

    • SynchronizedRequestHandler

      public SynchronizedRequestHandler()
  • Method Details

    • handleRequest

      public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
      Description copied from interface: RequestHandler
      Called when a request needs to be handled. If a response is written, this method should return true to 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 SynchronizedRequestHandler or by using VaadinSession.accessSynchronously(Command) or UI.accessSynchronously(Command).

      Specified by:
      handleRequest in interface RequestHandler
      Parameters:
      session - The session for the request
      request - The request to handle
      response - 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 to handleRequest(VaadinSession, VaadinRequest, VaadinResponse) except the VaadinSession is locked before this is called and unlocked after this has completed.
      Parameters:
      session - The session for the request
      request - The request to handle
      response - 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:
    • isReadAndWriteOutsideSessionLock

      public boolean isReadAndWriteOutsideSessionLock()
      Gets if request body should be read and the response written without holding VaadinSession lock
      Returns:
      true if synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse, String) should be called. Returns false if synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse) should be called.
      Since:
      24.5.6
    • synchronizedHandleRequest

      public Optional<SynchronizedRequestHandler.ResponseWriter> synchronizedHandleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response, String requestBody) throws IOException, UnsupportedOperationException
      Identical to synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse) except the VaadinSession is 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 request
      request - The request to handle
      response - 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:
      24.5.6
      See Also:
    • 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 returns true which means that all requests will be handled by calling synchronizedHandleRequest(VaadinSession, VaadinRequest, VaadinResponse) with the session locked.
      Parameters:
      request - the request to handle
      Returns:
      true if the request handling should continue once the session has been locked; false if there's no need to lock the session since the request would still not be handled.
    • 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 - the reader to read the request body from
      Returns:
      the request body as a string
      Throws:
      IOException - if reading fails
      Since:
      24.5.6
    • getRequestBody

      public static String getRequestBody(Reader reader, long maxBodySize) throws IOException
      Reads the request body from the given reader, rejecting it once it exceeds maxBodySize characters.

      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 from
      maxBodySize - 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 fails
      RequestBodyTooLargeException - if the body exceeds maxBodySize characters
      Since:
      24.10
    • 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:
      24.10