spring basic authentication plus ip filter

时间:2017-11-22 10:48:33

标签: spring-security

我正在尝试配置基本身份验证加ip过滤器,基本身份验证,适用于此配置:

protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
        .csrf()
            .disable()
        .authorizeRequests()
            .anyRequest()
            .fullyAuthenticated()
            .and()
        .httpBasic();
}

我想添加ip过滤器,我已经阅读了一些关于hasIpAddress但我不知道如何使用它。

1 个答案:

答案 0 :(得分:1)

对于XML配置,请参阅Spring Security Reference

  

26.2网络安全表达

     

要使用表达式保护单个网址,首先需要将use-expressions元素中的<http>属性设置为true。然后,Spring Security将期望access元素的<intercept-url>属性包含Spring EL表达式。表达式应该计算为布尔值,定义是否允许访问。例如:

     
<http>
    <intercept-url pattern="/admin*"
       access="hasRole('admin') and hasIpAddress('192.168.1.0/24')"/>
    ...
</http>
     

这里我们已经定义了应用程序的“admin”区域(由URL模式定义)仅对具有授权权限“admin”且其IP地址与本地子网匹配的用户可用。我们已经在上一节中看到了内置的hasRole表达式。表达式hasIpAddress是一个特定于Web安全性的附加内置表达式。它由WebSecurityExpressionRoot类定义,其实例在评估Web访问表达式时用作表达式根对象。

对于Java配置,请参阅ExpressionUrlAuthorizationConfigurer.AuthorizedUrl#access

  

<强>参数:

     

attribute - 保护网址的表达式(即“hasRole('ROLE_USER')和hasRole('ROLE_SUPER')”)

您修改过的代码:

protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
        .csrf()
            .disable()
        .authorizeRequests()
            .anyRequest().access("isFullyAuthenticated() and hasIpAddress('192.168.1.0/24')")
            .and()
        .httpBasic();
}