spring security開發步驟

1.web.xml中加載spring ,spring securityjava

2.spring security配置文件中配置好....web

3.本身寫一個myFilter代替原有的FilterSecurityInterceptor過濾器,並分別實現AccessDecisionManager、spring

InvocationSecurityMetadataSourceService和UserDetailsService.以下:數據庫

 <beans:bean id="myFilter" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">框架

        <beans:property name="authenticationManager"ide

            ref="authenticationManager" />加密

        <beans:property name="accessDecisionManager"url

            ref="myAccessDecisionManager" />code

        <beans:property name="securityMetadataSource"xml

            ref="securityMetadataSource" />

    </beans:bean>

4.配置上面的3個bean,具體以下: 

 4.1 認證管理器     即:是否能夠登陸(包括是否鎖定了,是否過時了等....)

<authentication-manager alias="authenticationManager">

        <authentication-provider

            user-service-ref="myUserDetailService">

            <!--   若是用戶的密碼採用加密的話

                <password-encoder hash="md5" />

            -->

        </authentication-provider>

    </authentication-manager>

4.2決策管理器     即:是否有權限訪問資源

<beans:bean id="MyAccessDecisionManager"
 class="org.springframework.security.access.vote.AffirmativeBased"
  <beans:property name="decisionVoters">
   <beans:list>
    <beans:bean class="org.springframework.security.access.vote.RoleVoter">
     <!-- 將受權名稱的默認前綴由ROLE_改成空. -->
     <beans:property name="rolePrefix" value=""></beans:property>
    </beans:bean>
    <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"></beans:bean>
   </beans:list>
  </beans:property>
 </beans:bean>

4.3 受權處理器    即定義某一資源能夠被哪些用戶組訪問

 <beans:bean id="securityMetadataSource"
        class="com.aostarit.spring.security.MyInvocationSecurityMetadataSource" />

注意,4.3表示直接利用默認的受權處理器,它會從配置文件中讀取group-->resource的對應關係,而非從數據庫讀取! 因此還需給告訴他初始化的時候用以下兩個參數:

<b:constructor-arg type="org.springframework.security.web.util.UrlMatcher"
   ref="myUrlPathMatcher" />
  <!-- url對應authority的map -->
  <b:constructor-arg type="java.util.LinkedHashMap"
   ref="requestMap" />

既然如此,咱們乾脆本身寫一個類得了,不用框架提供的類了.implements FilterInvocationSecurityMetadataSource 便可. 具體見資料.
      4.1.1

  真正幹事的實際上是這個myUserDetailService,他要實現UserDetailsService接口,

  這個接口中的方法:public UserDetails loadUserByUsername(String username)真正幹事,<!--再調用什麼dao層我就無論了,呵呵-->

  注意咯:返回的 UserDetails,咱們返回一個實現了 UserDetails接口的類A便可.

  注意咯:A還有兩個特色,①.她裏面的數據就是從數據庫讀出來的數據,好比username,password,她無論頁面提交的password的. 到底是怎麼驗證密碼的,這個要找框架自己了.②.他的權限set的時候還有點小技巧,這個見個人項目的SecurityUser裏的setAuthorities(List<Object[]> l)方法.

    <beans:bean id="myUserDetailService"  class="com.aostarit.spring.security.MyUserDetailService" >
     <beans:property name="securityDao" ref="securityDao"></beans:property>
    </beans:bean>

     ****securityDao,這個本身寫咯......本身配咯.....

相關文章
相關標籤/搜索