在正常情况下,可以用 security 的hasIpAddress直接控制
http
.authorizeRequests()
.antMatchers("/", "/home")
.hasIpAddress("127.0.0.1")
如果有多个ip, 则可以用表达式完成:
http
.authorizeRequests()
.antMatchers("/", "/home")
.access("hasIpAddress('127.0.0.1') or hasIpAddress('x.x.x.x')")
注意如果是本地测试,需注意是 ipv4 (127.0.0.1) 还是 ipv6 (0:0:0:0:0:0:0:1)
如果 springboot 的前端还配有 nginx,那么一般情况下,spring 获取到的 ip 是 nginx 服务器的地址。
通过httpRequest.getHeader("X-FORWARDED-FOR")获取到的才是客户端IP (若有多层代理,则是下一个代理的ip地址),且必须在 nginx 配置中添加
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
在这种情况下, 如果还想继续使用 hasIpAddress 来实现,则 springboot 提供了一个配置项:
server.use-forward-headers=true
这样就可以去实现了。
本文详细介绍了如何在Spring Security中使用hasIpAddress方法控制特定IP地址的访问权限,包括单个和多个IP地址的配置,以及在存在nginx代理时,如何正确获取并使用客户端的真实IP地址。
629

被折叠的 条评论
为什么被折叠?



