Class SpincastUndertowServer
- All Implemented Interfaces:
Server
-
Field Summary
-
Constructor Summary
ConstructorDescriptionSpincastUndertowServer
(SpincastUndertowUtils spincastUndertowUtils, SpincastConfig config, SpincastUndertowConfig spincastUndertowConfig, FrontController frontController, SpincastUtils spincastUtils, CookieFactory cookieFactory, CorsHandlerFactory corsHandlerFactory, GzipCheckerHandlerFactory gzipCheckerHandlerFactory, SkipResourceOnQueryStringHandlerFactory skipResourceOnQueryStringHandlerFactory, SpincastResourceHandlerFactory spincastResourceHandlerFactory, CacheBusterRemovalHandlerFactory cacheBusterRemovalHandlerFactory, SpincastClassPathResourceManagerFactory fileClassPathResourceManagerFactory, SpincastHttpAuthIdentityManagerFactory spincastHttpAuthIdentityManagerFactory, WebsocketEndpointFactory spincastWebsocketEndpointFactory, SSLContextFactory sslContextFactory) Constructor -
Method Summary
Modifier and TypeMethodDescriptionprotected io.undertow.Undertow.Builder
addBuilderOptions
(io.undertow.Undertow.Builder builder) void
addCookies
(Object exchange, Map<String, Cookie> cookies) Adds cookies.void
addHttpAuthentication
(String realmName, String username, String password) Adds a user to an HTTP protected realm.protected void
addHttpListener
(io.undertow.Undertow.Builder builder, String serverHost, int httpServerPort) protected void
addHttpsListener
(io.undertow.Undertow.Builder builder, String serverHost, int httpsServerPort) protected void
addMaxEntitySize
(io.undertow.Undertow.Builder builder) void
addStaticResourceToServe
(StaticResource<?> staticResource) Adds a static resource to serve directly by the server.protected io.undertow.server.HttpServerExchange
castExchange
(Object exchange) io.undertow.util.HeaderMap
convertHeadersToUndertowHeaderMap
(Map<String, List<String>> headers) io.undertow.util.HttpString
convertHttpMethodToUndertowHttpString
(HttpMethod httpMethod) void
createHttpAuthenticationRealm
(String pathPrefix, String realmName) Creates HTTP authentication protection (realm) for the specified path prefix.protected io.undertow.server.handlers.LearningPushHandler
protected Path
protected WebsocketEndpointHandler
createUndertowWebsocketEndpointHandler
(String endpointId, WebsocketEndpointHandler appHandler) protected void
enableHttp2
(io.undertow.Undertow.Builder builder) void
Ends the exchange.void
flushBytes
(Object exchange, byte[] bytes, boolean end) Flushes some bytes to the response.boolean
forceRequestSizeValidation
(Object exchangeObj) Is the request size valid?protected CacheBusterRemovalHandler
Handler to remove cache busters from the request's URL.protected CacheBusterRemovalHandlerFactory
protected io.undertow.io.IoCallback
protected SpincastConfig
getContentTypeBestMatch
(Object exchangeObj) Gets the bestContent-Type
to use for the current request.protected String
protected CookieFactory
getCookies
(Object exchange) Gets the request cookies values.protected CorsHandlerFactory
protected io.undertow.io.IoCallback
protected SpincastClassPathResourceManagerFactory
protected io.undertow.server.HttpHandler
The very first handler considered by Undertow.protected io.undertow.server.handlers.form.FormData
getFormData
(io.undertow.server.HttpServerExchange exchange) May return NULL.getFormData
(Object exchangeObj) The form data, if any.protected io.undertow.server.handlers.form.FormParserFactory
protected FrontController
getFullUrlOriginal
(Object exchangeObj) The full encoded URL of the original, non proxied, request, including the queryString.getFullUrlOriginal
(Object exchangeObj, boolean keepCacheBusters) The full encoded URL of the original, non proxied, request, including the queryString.getFullUrlProxied
(Object exchangeObj) The full encoded URL of the potentially proxied request, including the queryString.getFullUrlProxied
(Object exchangeObj, boolean keepCacheBusters) The full encoded URL of the potentially proxied request, including the queryString.protected GzipCheckerHandlerFactory
protected io.undertow.server.handlers.PathHandler
Handler to check for HTTP authentication requirement.Returns the existing HTTP authentication realms, the key being the realm's name and the value being the prefix path associated to this realm.protected io.undertow.server.HttpHandler
protected Map<String,
SpincastHttpAuthIdentityManager> getHttpMethod
(Object exchange) Gets the HTTP method associated with the request.Gets the IP of the current request.protected io.undertow.server.HttpHandler
protected int
protected SpincastHttpAuthIdentityManager
getQueryStringParams
(Object exchange) Gets the queryString parameters.getRawInputStream
(Object exchangeObj) The raw InputStream of the current request.protected String
getRealmNameToDisplay
(String pathPrefix, String realmName) The realm name to display.getRequestHeaders
(Object exchangeObj) The names of the headers are case insensitive.getRequestScheme
(Object exchange) Gets the request scheme, "http" for example.getResponseHeaders
(Object exchangeObj) Gets the response headers.protected int
protected io.undertow.Undertow.Builder
protected int
protected SkipResourceOnQueryStringHandlerFactory
protected io.undertow.server.HttpHandler
protected SpincastHttpAuthIdentityManagerFactory
protected SpincastResourceHandlerFactory
protected SpincastUndertowConfig
protected SpincastUndertowUtils
protected SpincastUtils
protected WebsocketEndpointFactory
protected SSLContextFactory
protected long
getStaticResourceServed
(String urlPath) Gets a static resource served directly by the server, using its path.protected io.undertow.server.handlers.PathHandler
Set<StaticResource<?>>
Gets all static resource served directly by the server.protected Map<String,
StaticResource<?>> getUploadedFiles
(Object exchangeObj) The uploaded files, if any.protected Object
getWebsocketEndpointCreationLock
(String endpointId) Gets the creation/close lock for a specific Websocket endpoint.getWebsocketEndpointManager
(String endpointId) Returns the manager for a Websockets endpoint.Returns the managers of the existing Websockets endpoints.protected Map<String,
WebsocketEndpoint> protected boolean
isPushSupported
(io.undertow.server.ServerConnection connection) boolean
isResponseClosed
(Object exchange) Is the response closed?boolean
isResponseHeadersSent
(Object exchange) Are the response headers sent?boolean
Is this server running (started)?void
push
(Object exchangeObj, Set<ResourceToPush> resourcesToPush) IfHTTP/2
is used, you can push extra resources at the same time you response to a request.protected void
pushResource
(io.undertow.server.ServerConnection connection, String path, io.undertow.util.HttpString httpMethod, io.undertow.util.HeaderMap headerMap) void
Removes all static resources served directly by the server.void
removeHttpAuthentication
(String username) Removes a user from all HTTP protected realms.void
removeHttpAuthentication
(String username, String realmName) Removes a user to an HTTP protected realm.void
removeResponseHeader
(Object exchange, String name) Removes a response header.protected void
removeStaticResource
(StaticResourceType staticResourceType, String urlPath) void
removeStaticResourcesServed
(StaticResourceType staticResourceType, String urlPath) Removes a static resource served directly by the server.protected void
sendPushHeaders
(io.undertow.server.HttpServerExchange exchange, ResourceToPush resourceToPush) In case the server is behind a reverse-proxy such as Nginx: it is this proxy that will do the actual push of the resource.protected void
void
setResponseHeader
(Object exchangeObj, String name, List<String> values) Sets a response header.void
Sets the response headers.void
setResponseStatusCode
(Object exchange, int statusCode) Sets the response status code.void
start()
Starts the server.void
stop()
Stops the servervoid
stop
(boolean sendClosingMessageToPeers) Stops the servervoid
websocketCloseEndpoint
(String endpointId) Closes a Websocket endpoint.void
websocketCloseEndpoint
(String endpointId, int closingCode, String closingReason) Closes the entire Websocket endpoint.void
websocketConnection
(Object exchangeObj, String endpointId, String peerId) Transforms the request to a peer Websocket connection on the endpoint 'endpointId'.websocketCreateEndpoint
(String endpointId, WebsocketEndpointHandler appEndpointHandler) Creates a new Websocket endpoint.
-
Field Details
-
logger
protected static final org.slf4j.Logger logger -
UNDERTOW_EXCEPTION_CODE_REQUEST_TOO_LARGE
- See Also:
-
EXCHANGE_VARIABLE_EXCHANGE_COMPLETED
-
-
Constructor Details
-
SpincastUndertowServer
@Inject public SpincastUndertowServer(SpincastUndertowUtils spincastUndertowUtils, SpincastConfig config, SpincastUndertowConfig spincastUndertowConfig, FrontController frontController, SpincastUtils spincastUtils, CookieFactory cookieFactory, CorsHandlerFactory corsHandlerFactory, GzipCheckerHandlerFactory gzipCheckerHandlerFactory, SkipResourceOnQueryStringHandlerFactory skipResourceOnQueryStringHandlerFactory, SpincastResourceHandlerFactory spincastResourceHandlerFactory, CacheBusterRemovalHandlerFactory cacheBusterRemovalHandlerFactory, SpincastClassPathResourceManagerFactory fileClassPathResourceManagerFactory, SpincastHttpAuthIdentityManagerFactory spincastHttpAuthIdentityManagerFactory, WebsocketEndpointFactory spincastWebsocketEndpointFactory, SSLContextFactory sslContextFactory) Constructor
-
-
Method Details
-
getSpincastUndertowUtils
-
getConfig
-
getSpincastUndertowConfig
-
getFrontController
-
getSpincastUtils
-
getCookieFactory
-
getCorsHandlerFactory
-
getGzipCheckerHandlerFactory
-
getSkipResourceOnQueryStringHandlerFactory
-
getSpincastResourceHandlerFactory
-
getCacheBusterRemovalHandlerFactory
-
getFileClassPathResourceManagerFactory
-
getSpincastHttpAuthIdentityManagerFactory
-
getSpincastWebsocketEndpointFactory
-
getStaticResourcesServedByUrlPath
-
getHttpAuthIdentityManagersByRealmName
-
getWebsocketEndpointsMap
-
getHttpAuthActiveRealms
-
getSslContextFactory
-
getHttpAuthenticationRealms
Description copied from interface:Server
Returns the existing HTTP authentication realms, the key being the realm's name and the value being the prefix path associated to this realm.The map is immutable.
- Specified by:
getHttpAuthenticationRealms
in interfaceServer
-
getFormParserFactory
protected io.undertow.server.handlers.form.FormParserFactory getFormParserFactory() -
createUndertowTempDir
-
isRunning
public boolean isRunning()Description copied from interface:Server
Is this server running (started)? -
start
public void start()Description copied from interface:Server
Starts the server. -
getServerStartTryNbr
protected int getServerStartTryNbr() -
getStartServerSleepMilliseconds
protected long getStartServerSleepMilliseconds() -
getServerBuilder
protected io.undertow.Undertow.Builder getServerBuilder() -
addHttpListener
protected void addHttpListener(io.undertow.Undertow.Builder builder, String serverHost, int httpServerPort) -
addHttpsListener
protected void addHttpsListener(io.undertow.Undertow.Builder builder, String serverHost, int httpsServerPort) -
addBuilderOptions
protected io.undertow.Undertow.Builder addBuilderOptions(io.undertow.Undertow.Builder builder) -
addMaxEntitySize
protected void addMaxEntitySize(io.undertow.Undertow.Builder builder) -
enableHttp2
protected void enableHttp2(io.undertow.Undertow.Builder builder) -
getFinalHandler
protected io.undertow.server.HttpHandler getFinalHandler()The very first handler considered by Undertow. -
getCacheBusterRemovalHandler
Handler to remove cache busters from the request's URL. -
getHttpAuthenticationHandler
protected io.undertow.server.handlers.PathHandler getHttpAuthenticationHandler()Handler to check for HTTP authentication requirement. -
getHttpAuthHandlerNextHandler
protected io.undertow.server.HttpHandler getHttpAuthHandlerNextHandler() -
getLearningPushHandler
protected io.undertow.server.HttpHandler getLearningPushHandler() -
createLearningPushHandler
protected io.undertow.server.handlers.LearningPushHandler createLearningPushHandler() -
createHttpAuthenticationRealm
Description copied from interface:Server
Creates HTTP authentication protection (realm) for the specified path prefix.- Specified by:
createHttpAuthenticationRealm
in interfaceServer
realmName
- The name of the realm. Must be unique on this server, otherwise an exception is thrown. This allows the application to add user to the realm using its name.
-
getRealmNameToDisplay
The realm name to display. -
getOrCreateHttpAuthIdentityManagersByRealmName
protected SpincastHttpAuthIdentityManager getOrCreateHttpAuthIdentityManagersByRealmName(String realmName) -
addHttpAuthentication
Description copied from interface:Server
Adds a user to an HTTP protected realm.- Specified by:
addHttpAuthentication
in interfaceServer
-
removeHttpAuthentication
Description copied from interface:Server
Removes a user to an HTTP protected realm.- Specified by:
removeHttpAuthentication
in interfaceServer
-
removeHttpAuthentication
Description copied from interface:Server
Removes a user from all HTTP protected realms.- Specified by:
removeHttpAuthentication
in interfaceServer
-
getSpincastFrontControllerHandler
protected io.undertow.server.HttpHandler getSpincastFrontControllerHandler() -
stop
public void stop()Description copied from interface:Server
Stops the serverWill try to send a "closing" message to any WebSocket peer before closing their connections.
-
stop
public void stop(boolean sendClosingMessageToPeers) Description copied from interface:Server
Stops the server -
getSecondsToWaitForWebSocketEndpointsToBeProperlyClosedBeforeKillingTheServer
protected int getSecondsToWaitForWebSocketEndpointsToBeProperlyClosedBeforeKillingTheServer() -
getMilliSecondsIncrementWhenWaitingForWebSocketEndpointsToBeProperlyClosedBeforeKillingTheServer
protected int getMilliSecondsIncrementWhenWaitingForWebSocketEndpointsToBeProperlyClosedBeforeKillingTheServer() -
sendWebsocketEnpointsClosedWhenServerStops
protected void sendWebsocketEnpointsClosedWhenServerStops() -
getStaticResourcesPathHandler
protected io.undertow.server.handlers.PathHandler getStaticResourcesPathHandler() -
addStaticResourceToServe
Description copied from interface:Server
Adds a static resource to serve directly by the server.- Specified by:
addStaticResourceToServe
in interfaceServer
-
removeStaticResourcesServed
Description copied from interface:Server
Removes a static resource served directly by the server.- Specified by:
removeStaticResourcesServed
in interfaceServer
-
removeAllStaticResourcesServed
public void removeAllStaticResourcesServed()Description copied from interface:Server
Removes all static resources served directly by the server.- Specified by:
removeAllStaticResourcesServed
in interfaceServer
-
removeStaticResource
-
getStaticResourceServed
Description copied from interface:Server
Gets a static resource served directly by the server, using its path.- Specified by:
getStaticResourceServed
in interfaceServer
-
getStaticResourcesServed
Description copied from interface:Server
Gets all static resource served directly by the server.- Specified by:
getStaticResourcesServed
in interfaceServer
-
getHttpMethod
Description copied from interface:Server
Gets the HTTP method associated with the request.- Specified by:
getHttpMethod
in interfaceServer
-
castExchange
-
getContentTypeBestMatch
Description copied from interface:Server
Gets the bestContent-Type
to use for the current request.- Specified by:
getContentTypeBestMatch
in interfaceServer
-
getFullUrlProxied
Description copied from interface:Server
The full encoded URL of the potentially proxied request, including the queryString. Cache buster codes are removed, if there were any.Is a reverse proxy is used (such as Nginx or Apache), this is going to be the proxied URL, as forwarded by the reverse proxy. If no reverse proxy is used, this is going to be the original URL, as seen by the user.
Even if the request is forwarded elsewhere in the framework, this URL won't change, it will still be the original one.
- Specified by:
getFullUrlProxied
in interfaceServer
-
getFullUrlProxied
Description copied from interface:Server
The full encoded URL of the potentially proxied request, including the queryString.Is a reverse proxy is used (such as Nginx or Apache), this is going to be the proxied URL, as forwarded by the reverse proxy. If no reverse proxy is used, this is going to be the original URL, as seen by the user.
Even if the request is forwarded elsewhere in the framework, this URL won't change, it will still be the original one.
- Specified by:
getFullUrlProxied
in interfaceServer
keepCacheBusters
- iftrue
, the returned URL will contain the cache buster codes, if there were any. The default behavior is to automatically remove them.
-
getFullUrlOriginal
Description copied from interface:Server
The full encoded URL of the original, non proxied, request, including the queryString. Cache buster codes are removed, if there were any.This is going to be the *original* URL, as seen by the user, even if a reverse proxy is used (such as Nginx or Apache).
Even if the request is forwarded elsewhere in the framework, this URL won't change, it will still be the original one.
- Specified by:
getFullUrlOriginal
in interfaceServer
-
getFullUrlOriginal
Description copied from interface:Server
The full encoded URL of the original, non proxied, request, including the queryString.This is going to be the *original* URL, as seen by the user, even if a reverse proxy is used (such as Nginx or Apache).
Even if the request is forwarded elsewhere in the framework, this URL won't change, it will still be the original one.
- Specified by:
getFullUrlOriginal
in interfaceServer
keepCacheBusters
- iftrue
, the returned URL will contain the cache buster codes, if there were any. The default behavior is to automatically remove them.
-
setResponseHeader
Description copied from interface:Server
Sets a response header. Override any existing one with the same name.- Specified by:
setResponseHeader
in interfaceServer
-
setResponseHeaders
Description copied from interface:Server
Sets the response headers. Override any existing ones.- Specified by:
setResponseHeaders
in interfaceServer
-
getResponseHeaders
Description copied from interface:Server
Gets the response headers.- Specified by:
getResponseHeaders
in interfaceServer
-
removeResponseHeader
Description copied from interface:Server
Removes a response header.- Specified by:
removeResponseHeader
in interfaceServer
-
setResponseStatusCode
Description copied from interface:Server
Sets the response status code.- Specified by:
setResponseStatusCode
in interfaceServer
-
getDoNothingCallback
protected io.undertow.io.IoCallback getDoNothingCallback() -
getCloseExchangeCallback
protected io.undertow.io.IoCallback getCloseExchangeCallback() -
flushBytes
Description copied from interface:Server
Flushes some bytes to the response.- Specified by:
flushBytes
in interfaceServer
end
- iftrue
, the exchange will be closed and nothing more can be send.
-
end
Description copied from interface:Server
Ends the exchange. Nothing more can be send. -
isResponseClosed
Description copied from interface:Server
Is the response closed?- Specified by:
isResponseClosed
in interfaceServer
-
isResponseHeadersSent
Description copied from interface:Server
Are the response headers sent?- Specified by:
isResponseHeadersSent
in interfaceServer
-
getRequestScheme
Description copied from interface:Server
Gets the request scheme, "http" for example.- Specified by:
getRequestScheme
in interfaceServer
-
addCookies
Description copied from interface:Server
Adds cookies.- Specified by:
addCookies
in interfaceServer
-
getCookies
Description copied from interface:Server
Gets the request cookies values.- Specified by:
getCookies
in interfaceServer
-
getCookieEncoding
-
getQueryStringParams
Description copied from interface:Server
Gets the queryString parameters.- Specified by:
getQueryStringParams
in interfaceServer
-
getRawInputStream
Description copied from interface:Server
The raw InputStream of the current request.- Specified by:
getRawInputStream
in interfaceServer
-
getFormData
protected io.undertow.server.handlers.form.FormData getFormData(io.undertow.server.HttpServerExchange exchange) May return NULL. -
getFormData
Description copied from interface:Server
The form data, if any.- Specified by:
getFormData
in interfaceServer
-
getUploadedFiles
Description copied from interface:Server
The uploaded files, if any. The key of the map if the HTML'sname
attribute.- Specified by:
getUploadedFiles
in interfaceServer
-
forceRequestSizeValidation
Description copied from interface:Server
Is the request size valid?- Specified by:
forceRequestSizeValidation
in interfaceServer
-
getRequestHeaders
The names of the headers are case insensitive.- Specified by:
getRequestHeaders
in interfaceServer
-
getWebsocketEndpointCreationLock
Gets the creation/close lock for a specific Websocket endpoint. -
websocketCreateEndpoint
public WebsocketEndpointManager websocketCreateEndpoint(String endpointId, WebsocketEndpointHandler appEndpointHandler) Description copied from interface:Server
Creates a new Websocket endpoint.- Specified by:
websocketCreateEndpoint
in interfaceServer
- Returns:
- the manager for this endpoint.
-
createUndertowWebsocketEndpointHandler
protected WebsocketEndpointHandler createUndertowWebsocketEndpointHandler(String endpointId, WebsocketEndpointHandler appHandler) -
websocketCloseEndpoint
Description copied from interface:Server
Closes a Websocket endpoint. No more connections will be accepter- Specified by:
websocketCloseEndpoint
in interfaceServer
-
websocketCloseEndpoint
Description copied from interface:Server
Closes the entire Websocket endpoint. All peer connections of this endpoint will be closed.- Specified by:
websocketCloseEndpoint
in interfaceServer
closingCode
- The closing code.closingReason
- The closing reason.
-
websocketConnection
Description copied from interface:Server
Transforms the request to a peer Websocket connection on the endpoint 'endpointId'.- Specified by:
websocketConnection
in interfaceServer
-
getWebsocketEndpointManagers
Description copied from interface:Server
Returns the managers of the existing Websockets endpoints.- Specified by:
getWebsocketEndpointManagers
in interfaceServer
-
getWebsocketEndpointManager
Description copied from interface:Server
Returns the manager for a Websockets endpoint.- Specified by:
getWebsocketEndpointManager
in interfaceServer
- Returns:
- the manager or
null
if not found.
-
getIp
Description copied from interface:Server
Gets the IP of the current request. -
convertHttpMethodToUndertowHttpString
-
convertHeadersToUndertowHeaderMap
-
push
Description copied from interface:Server
IfHTTP/2
is used, you can push extra resources at the same time you response to a request.If the embedded server deals with a HTTTP/2 request, it will push the extra resources by itself. If it deals with an HTTP/1.X request (for example if it is behind a reverse-proxy) it will send
Link
headers to the potential proxy in front of it and it is the proxy that will be in charge of doing the actual push.Beware that pushing resources does not always result in an increase of performance and may lead to wasted bandwidth (the client may decide to not use the pushed resources).
-
isPushSupported
protected boolean isPushSupported(io.undertow.server.ServerConnection connection) -
pushResource
protected void pushResource(io.undertow.server.ServerConnection connection, String path, io.undertow.util.HttpString httpMethod, io.undertow.util.HeaderMap headerMap) -
sendPushHeaders
protected void sendPushHeaders(io.undertow.server.HttpServerExchange exchange, ResourceToPush resourceToPush) In case the server is behind a reverse-proxy such as Nginx: it is this proxy that will do the actual push of the resource. We tell it to do so using special response headers.
-