pub struct UriBlockerPlugin {
block_rules: Vec<Regex>,
rejected_code: u16,
rejected_msg: Option<String>,
}Expand description
Blocks requests whose URI matches any configured block_rules regex.
The matched subject is crate::vars’ request_uri — the path plus
?query when query parameters exist (APISIX matches ctx.var.request_uri).
Regexes are compiled once at config load; case_insensitive prefixes each
with (?i) like APISIX does with its concatenated rule string.
Fields§
§block_rules: Vec<Regex>Compiled block rules; a request matching any of them is rejected.
rejected_code: u16HTTP status for rejections (default 403).
rejected_msg: Option<String>Optional rejection body message; when unset the response body is empty.
Implementations§
Source§impl UriBlockerPlugin
impl UriBlockerPlugin
Sourcepub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
pub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
Builds the plugin from node config.
Accepted keys:
block_rules(array of regex strings, required, non-empty): rules tested against the request URI (path + query string). Invalid regexes and empty lists are config errors.rejected_code(integer 200–599, default403): rejection status.rejected_msg(string, optional): when set, rejections carry a JSON body{"error_msg": ...}; when unset the body is empty (APISIX parity).case_insensitive(bool, defaultfalse): match rules case-insensitively.
type: uri-blocker
config:
block_rules: ["root.exe", "root.m+", "^/admin/"]
rejected_code: 404
case_insensitive: trueTrait Implementations§
Source§impl Plugin for UriBlockerPlugin
impl Plugin for UriBlockerPlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Unique identifier for the plugin type (e.g., “proxy-rewrite”, “upstream”).
Source§fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Executes the plugin logic against the request/response context. Read more
Auto Trait Implementations§
impl Freeze for UriBlockerPlugin
impl RefUnwindSafe for UriBlockerPlugin
impl Send for UriBlockerPlugin
impl Sync for UriBlockerPlugin
impl Unpin for UriBlockerPlugin
impl UnsafeUnpin for UriBlockerPlugin
impl UnwindSafe for UriBlockerPlugin
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more