2012-11-12 63 views
6

我有一個配置了spring security的web應用程序,用於限制對URL和方法的訪問。我想完全禁用它,並允許我的客戶輕鬆地打開它(如果他們想要的話)(他們只能訪問「spring-security.xml」)。禁用版本3.0.x中的Spring方法安全

我設法關掉URL攔截,但我的方法的安全性仍處於啓用狀態......

任何線索?

(我不想讓客戶改變我的web.xml,所以很遺憾修改「全球方法的安全性」每段時間設定是不是一個選項...)

這是我的更新彈簧的security.xml配置:

<http auto-config='true' use-expressions="true"> 
    <intercept-url pattern="/**" access="permitAll" /> 
    <http-basic /> 
    <anonymous /> 
</http> 

我已重寫的DelegatingFilterProxy.doFilter方法是這樣的:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 
      throws ServletException, IOException { 
    final String springSecured = System.getProperty("springSecured"); 

    if (StringUtils.isNotBlank(springSecured) && springSecured.equalsIgnoreCase("true")) { 
     // Call the delegate 
     super.doFilter(request, response, filterChain); 
    } else { 
     // Ignore the DelegatingProxyFilter delegate 
     filterChain.doFilter(request, response); 
    } 
} 

,這是該方法的安全性我的一個例子:

@RequestMapping(
     value = "applications/{applicationName}/timeout/{timeout}", 
     method = RequestMethod.POST) 
public 
@ResponseBody 
@PreAuthorize("isFullyAuthenticated() and hasPermission(#authGroups, 'deploy')") 
Object deployApplication() { 
    // ... 
} 

回答

4

如果我是你,我不會使用自定義過濾器鏈實現,只是一個開箱即用。您可以啓用和禁用(因爲春季3.0)與嵌套元素bean配置的部分,所以這樣的事情可能是方便:

<beans profile="secure"> 
    <http auto-config='true' use-expressions="true">...</http> 
</beans> 

您的應用程序現在是在默認配置文件不受保護(以及任何其他,但「安全「配置文件)。您可以通過提供系統屬性spring.profiles.active = secure或通過在上下文或servlet初始化程序中顯式設置它來啓用安全配置文件。