如何在spring boot中使用ipwhitelisting和oauth2?

s5a0g9ez  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(632)

这个问题在这里已经有答案了

spring安全配置中的单角色多ip地址(2个答案)
上个月关门了。
我在我的spring引导应用程序中使用oauth2,我想使用ip白名单来表示ip地址的范围。i、 我想给白名单用户访问特定的资源,而不提供令牌。我有大量白名单上的IP,我正在使用oauth2令牌验证,以便我有一个资源服务器。我想首先使用ip白名单,如果失败,用户应该有有效的令牌访问资源。你能告诉我怎么做吗。

x33g5p2x

x33g5p2x1#

在springsecurity中,可以使用securityconfig类中的hasipaddress方法配置特定的端点和白名单。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
          .antMatchers("/api/**").hasIpAddress("11.11.11.11")
          .anyRequest().authenticated()
          .and()
          .formLogin().permitAll();
    }
}

如果你有多个ip地址,那么你可以这样使用

http
    .authorizeRequests()
    .antMatchers("/api/**").access(
            "hasIpAddress('10.0.0.0/16') or hasIpAddress('127.0.0.1/32')")

对于资源服务器,您可以在@enableresourceserver类中执行此操作&您可以使用相同的配置方法设置ipwhitelisting,如下所示

@Configuration
    @EnableResourceServer
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

        @Override
        public void configure(HttpSecurity http) throws Exception {
            http.requestMatcher(new OAuthRequestedMatcher())
                    .anonymous().disable().authorizeRequests();
    http
    .authorizeRequests()
    .antMatchers("/api/**").access("hasIpAddress('10.0.0.0/16') or hasIpAddress('127.0.0.1/32')");
        }
    }

既然您已经提到您有许多ip地址,那么您可以在属性文件(application.properties)中创建一个列表&在应用程序启动时,您可以循环使用这些地址来构建必须在access方法中传递的参数字符串。

相关问题