0

假设我有以下类代码:

@EnableWebSecurity
@Configuration
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/**").hasIpAddress("runtime other device ip");
    }
}

在运行时,当请求进入系统时,我想验证它是否来自“运行时其他设备 ip”,这在检索请求时可能会有所不同。

请假设我有一个实用程序可以检索此“运行时其他设备 ip”Utility.getOtherDeviceIP();

有任何想法吗?

谢谢

4

1 回答 1

0

是的,.access()与自定义 bean 一起使用,它具有您的 Utility 类 @Autowired 并将当前的 HttpServlet 请求作为参数,Spring 将自动为您注入(在当前身份验证对象旁边)。

例子:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/**").access("@yourCustomIpCheckerBean.check(authentication, request)");

}

不过,如果它只是IP 检查所需的实用程序,您也可以直接将其编写为 SpEL。类似的东西(未测试):

.access("request.remoteAddr == @yourUtility.getOtherDeviceIP()")
于 2020-04-05T18:00:22.507 回答