2013-03-20 72 views
1

我在所有控制器上配置Spring Security。 我希望某些方法執行只在「我的系統已啓用」時啓動。這些信息可以通過一個特定的靜態方法從所有的控制器訪問(我可以使它非靜態)。 我的觀點是,我想避免在每個方法開始時對java代碼進行顯式檢查。 如何通過Spring Security來到那裏?Spring安全性 - 基於屬性訪問控制器方法

+0

如何配置安全acroos所有的控制器?你在每種方法上使用註釋嗎?或者帶有多個'intercpt-url'標籤的xml配置? – 2013-03-20 09:01:16

+0

我使用註釋 – Manu 2013-03-20 11:53:12

回答

1

一種方法是使用handler interceptor

這是總體思路:

(1)要阻止配置URL模式:

<util:list id="sysEnableCheckUrlPatterns" value-type="java.lang.String"> 
    <beans:value>/module1/**</beans:value> 
    <beans:value>/module2/**</beans:value> 
</util:list> 

(2)寫一個攔截器:

public class SysEnableCheckInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
      throws Exception { 


      /* 
       If system enabled then return true. Otherwise return false (and optionally write something in response) 

      */ 
    } 
} 

(3)配置攔截器。在3.1你可以這樣做:

@Configuration 
public class AppConfig extends WebMvcConfigurerAdapter { 

    @Resource(name="sysEnableCheckUrlPatterns") 
    /* or use @Autowired or @Inject if you like */ 
    private String[] sysEnableCheckUrlPatterns; 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 

    registry.addInterceptor(new SysEnableCheckInterceptor()).addPathPatterns(sysEnableCheckUrlPatterns); 

    } 

} 
0

您可以在安全註釋中使用SPEL(Spring表達式語言)。

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html

+0

我需要使用過濾器嗎?我可以使用@PreAuthorize並檢查其他地方存儲的靜態變量(不是參數,也不是已註釋方法的類)中的布爾值? – Manu 2013-03-20 12:02:51

+0

我相信你可以,但我從來沒有嘗試過。試一試,讓我們知道:-) – GreyBeardedGeek 2013-03-21 03:30:17

相關問題