springsecurity3實現的過程

 1.在類初始化的時候,InvocationSecurityMetadataSource類就會調用loadResourceDefine()的方法,取到所用的資源對應的角色關係。(這個步驟是在tomcat容器啟動的時候調用的)

  2.當用戶訪問某個資源時,提交的url就會被我們自定義的過濾器(MyFilterSecurityInterceptor) 攔截,進入doFilter()的方法,在調用該方法前,會執行InterceptorStatusToken token = super.beforeInvocation(fi),當執行這行代碼時,會進入InvocationSecurityMetadataSource類的另一個方法getAttributes(Object object),該方法返回的是某個資源對應的權限集合(比如說/index.jsp所對應的權限是ROLE_USER),參數object可以理解為一個url。

  3.在得到某個資源對應的權限集合後,就會進入AccessDecisionManager類的decide()方法,首先得到資源的權限,然後得到用戶的權限,判斷用戶是否具有該資源的權限,有的就放行,沒的就返回登入頁面或拋出一個無權限的異常。

  4.當用戶通過登入頁面提交表單時,進入到UserDetailsService類的loadUserByUsername()方法,並把用戶名當參數傳入,如果取到了用戶的權限,則經過自定義的過濾器,做上面2和3的步驟。

  5.進入登入頁面後,用戶每當點擊一個資源,都要經過過濾器攔截,判斷是否具有訪問該資源的權限,有的就放行,沒的就跳入權限受阻的頁面,這樣就差不多歐了。