在正常情况下,可以用 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
这样就可以去实现了。