我正在尝试配置基本身份验证加ip过滤器,基本身份验证,适用于此配置:
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf()
.disable()
.authorizeRequests()
.anyRequest()
.fullyAuthenticated()
.and()
.httpBasic();
}
我想添加ip过滤器,我已经阅读了一些关于hasIpAddress
但我不知道如何使用它。
答案 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();
}