Spring Security6 教程

IpAddressAuthorizationManager 授权管理器

IpAddressAuthorizationManager 类用于基于 IP 地址进行访问控制的授权管理器。它允许开发者根据客户端的 IP 地址或 IP 网段(CIDR 格式)来限制或允许请求。

什么是 CIDR 格式?

CIDR(Classless Inter-Domain Routing,无类域间路由) 是一种用于分配和管理 IP 地址的网络编址技术,诞生于 1993 年,旨在解决 IPv4 地址枯竭和路由表膨胀问题。它摒弃了传统的 A、B、C 类网络划分方式,采用更灵活的地址块分配规则,核心是通过 网络前缀长度 标识网络范围。

CIDR 格式通常以“IP地址/前缀长度”的形式表示,例如:

  • 192.168.1.0/24:表示一个网络,其中 /24 表示前 24 位为网络地址,后 8 位为主机地址。

  • 10.0.0.0/8:前 8 位为网络地址,后 24 位为主机地址,覆盖 10.0.0.0 到 10.255.255.255 的所有 IP 地址。

CIDR 格式的关键要素解析:

(1)前缀长度(/n):用数字 n 表示 IP 地址中属于网络地址的位数(范围:0 ≤ n ≤ 32)。例如,/24 对应传统 C 类网络的默认子网掩码 255.255.255.0(二进制中前 24 位为 1)。

(2)与子网掩码的转换:CIDR 前缀长度可直接转换为子网掩码,规则如下:

前缀长度 n 表示子网掩码中前 n 位为 1,剩余 32-n 位为 0。示例:

CIDR 前缀

二进制子网掩码

点分十进制子网掩码

/8

11111111.00000000.00000000.00000000

255.0.0.0

/16

11111111.11111111.00000000.00000000

255.255.0.0

/24

11111111.11111111.11111111.00000000

255.255.255.0

示例:CIDR 地址块计算,以 172.16.0.0/16 为例:

  • 网络地址:172.16.0.0(前 16 位固定)。

  • 子网掩码:255.255.0.0

  • 可用主机地址范围:172.16.0.1 到 172.16.255.254(共 2^(32-16) - 2 = 65534 个地址)。

  • 广播地址:172.16.255.255(主机位全为 1)。

工作原理

该管理器通过检查请求的客户端 IP 地址是否匹配预定义的模式来做出授权决策。当请求到达时,它会提取客户端的 IP 地址(通常是 HttpServletRequest.getRemoteAddr()),然后与配置的 IP 模式进行比较。

基本用法

以下是 IpAddressAuthorizationManager 的最常见用法:

http..authorizeHttpRequests(authorize -> authorize
    // 需要具有 admin 角色权限才能访问 /sys 路径的请求
    .requestMatchers("/sys/**").access(AuthorizationManagers.anyOf(
            IpAddressAuthorizationManager.hasIpAddress("192.168.1.15"),
            IpAddressAuthorizationManager.hasIpAddress("192.168.1.0/24")
    ))
    .anyRequest().authenticated() // 其他请求需认证
)

笔者本机 IP 地址如下图:

IpAddressAuthorizationManager 授权管理器

如果使用 http://localhost:8080 访问将被拒,如果使用 http://192.168.1.15:8080 访问,一切正常。

 

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号