2014-04-02 31 views
0

以下是我的用例/要求。登錄到應用程序之前的IP地址認證

  1. 提供IP地址認證功能,比方說我有3個區域。 (黑色,灰色,白色)。黑色區域保持阻止的IP地址,灰色區域暫時禁用IP地址,白色區域包含有效的IP地址。

  2. 我的登錄頁面應該只能看到,當請求來自IP地址在白色區域可用。對於其他人,它應該顯示一些默認頁面,並顯示一些錯誤消息。

我是否需要通過過濾器或其他可用選項來實現?

由於完成了Pre登錄,所以我無法使用AuthenticationProvider。

回答

1

這可以使用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; 
    } 
} 

希望這可以幫助你。

+0

Spring EL我不能使用,因爲它可以是動態IP列表,並且可以配置。此外,我必須在這方面有更多的任務,如從相同的IP,例如說1小時我得到一些失敗的登錄請求,然後我會阻止該IP,這樣的事情。我也用攔截一個網址並提供我的處理程序。 –