userver
C++ Async Framework
Loading...
Searching...
No Matches
http_middleware_base.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/server/middlewares/http_middleware_base.hpp
4
/// @brief Base classes for implementing custom middlewares
5
6
#
include
<
memory
>
7
8
#
include
<
userver
/
components
/
component_base
.
hpp
>
9
#
include
<
userver
/
server
/
http
/
http_request
.
hpp
>
10
#
include
<
userver
/
yaml_config
/
schema
.
hpp
>
11
#
include
<
userver
/
yaml_config
/
yaml_config
.
hpp
>
12
13
USERVER_NAMESPACE_BEGIN
14
15
namespace
server {
16
17
namespace
request
{
18
class
RequestContext;
19
}
20
21
namespace
handlers {
22
class
HttpHandlerBase
;
23
}
24
25
/// HTTP server middlewares
26
namespace
middlewares
{
27
28
/// @ingroup userver_middlewares userver_base_classes
29
///
30
/// @brief Base class for a http middleware
31
class
HttpMiddlewareBase
{
32
public
:
33
HttpMiddlewareBase();
34
virtual
~HttpMiddlewareBase();
35
36
protected
:
37
/// @brief Override this method to implement a middleware logic
38
virtual
void
HandleRequest
(
http
::HttpRequest& request,
request
::RequestContext& context)
const
= 0;
39
40
/// @brief The method to invoke the next middleware in a pipeline
41
void
Next
(
http
::HttpRequest& request,
request
::RequestContext& context)
const
;
42
43
private
:
44
friend
class
handlers::
HttpHandlerBase
;
45
46
std::unique_ptr<
HttpMiddlewareBase
> next_{
nullptr
};
47
};
48
49
/// @ingroup userver_middlewares userver_base_classes
50
///
51
/// @brief Base class for a http middleware-factory
52
class
HttpMiddlewareFactoryBase
:
public
components
::
ComponentBase
{
53
public
:
54
HttpMiddlewareFactoryBase(
const
components
::ComponentConfig&,
const
components
::ComponentContext&);
55
56
std::unique_ptr<
HttpMiddlewareBase
> CreateChecked(
57
const
handlers::
HttpHandlerBase
& handler,
58
yaml_config
::
YamlConfig
middleware_config
59
)
const
;
60
61
protected
:
62
/// @brief This method should return the schema of a middleware configuration,
63
/// if any. You may override it
64
virtual
yaml_config
::Schema
GetMiddlewareConfigSchema
()
const
{
return
yaml_config
::Schema::EmptyObject(); }
65
66
/// @brief Override this method to create an instance of a middleware
67
virtual
std::unique_ptr<
HttpMiddlewareBase
>
Create
(
68
const
handlers::
HttpHandlerBase
&,
69
yaml_config
::
YamlConfig
middleware_config
70
)
const
= 0;
71
};
72
73
/// @ingroup userver_middlewares
74
///
75
/// @brief A short-cut for defining a middleware-factory
76
template
<
typename
Middleware>
77
class
SimpleHttpMiddlewareFactory
final
:
public
HttpMiddlewareFactoryBase
{
78
public
:
79
static
constexpr
std::string_view kName = Middleware::kName;
80
81
using
HttpMiddlewareFactoryBase
::HttpMiddlewareFactoryBase;
82
83
private
:
84
std::unique_ptr<
HttpMiddlewareBase
> Create(
const
handlers::
HttpHandlerBase
& handler,
yaml_config
::
YamlConfig
)
85
const
override
{
86
return
std::make_unique<Middleware>(handler);
87
}
88
};
89
90
}
// namespace middlewares
91
}
// namespace server
92
93
template
<
typename
Middleware>
94
inline
constexpr
bool
components
::kHasValidate<server::middlewares::SimpleHttpMiddlewareFactory<Middleware>> =
true
;
95
96
template
<
typename
Middleware>
97
inline
constexpr
auto
components
::kConfigFileMode<
98
server::middlewares::SimpleHttpMiddlewareFactory<Middleware>> =
ConfigFileMode
::
kNotRequired
;
99
100
USERVER_NAMESPACE_END
userver
server
middlewares
http_middleware_base.hpp
Generated on Fri Dec 5 2025 12:21:00 for userver by
Doxygen
1.13.2