這可以使用Web Security Expressions,使用hasIpAddress(...)來完成。
<http use-expressions="true">
<intercept-url pattern="/admin*"
access="hasRole('admin') and hasIpAddress('192.168.1.0/24')"/>
...
</http>
您可以通過實現自己的IP地址,檢查服務上述基本IP校驗添加更多的功能,如下圖所示:
<bean id="validateIdService" class="your.pkg.ValidateIdService">
</bean>
<security:http auto-config="false" access-denied-page="/accessDenied.jsp"
use-expressions="true">
<security:intercept-url pattern="/login.jsp"
access="@validateIdService.isValid()" />
</security:http>
而且你可以有你的服務來檢查IP地址爲你,如下:
public class ValidateIdService {
public boolean isValid() {
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
.getRequest();
String ipAddr = req.getRemoteAddr();
// validate IP address
if(valid)
return true;
else return false;
}
}
希望這可以幫助你。
Spring EL我不能使用,因爲它可以是動態IP列表,並且可以配置。此外,我必須在這方面有更多的任務,如從相同的IP,例如說1小時我得到一些失敗的登錄請求,然後我會阻止該IP,這樣的事情。我也用攔截一個網址並提供我的處理程序。 –