2010-05-11 4 views
1

J'ai créé une classe qui implémente l'interface FilterInvocationSecurityMetadataSource.filterSecurityInterceptor et implémentation metadatasource spring-security

Je mis en œuvre comme ceci:

public List<ConfigAttribute> getAttributes(Object object) { 
    FilterInvocation fi = (FilterInvocation) object; 
    Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    Long companyId = ((ExtenededUser) principal).getCompany().getId(); 
    String url = fi.getRequestUrl(); 
    // String httpMethod = fi.getRequest().getMethod(); 
    List<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>(); 
    FilterSecurityService service = (FilterSecurityService) SpringBeanFinder.findBean("filterSecurityService"); 
    Collection<Role> roles = service.getRoles(companyId); 
    for (Role role : roles) { 
     for (View view : role.getViews()) { 
      if (view.getUrl().equalsIgnoreCase(url)) 
       attributes.add(new SecurityConfig(role.getName() + "_" + role.getCompany().getName())); 
     } 
    } 
    return attributes; 
} 

quand je déboguer mon application, je vois qu'il atteint cette classe, il atteint seulement méthode getAllConfigAttributes, qui est vide comme je l'ai dit, et retourner null. après cela, il imprime cet avertissement: Impossible de valider les attributs de configuration car SecurityMetadataSource n'a renvoyé aucun attribut à getAllConfigAttributes().

Ma sécurité aplicationContext- est comme ceci:

<beans:bean id="filterChainProxy" 
     class="org.springframework.security.web.FilterChainProxy"> 
     <filter-chain-map path-type="ant"> 
      <filter-chain filters="sif,filterSecurityInterceptor" 
       pattern="/**" /> 
     </filter-chain-map> 
    </beans:bean>  
<beans:bean id="filterSecurityInterceptor" 
     class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor"> 
     <beans:property name="authenticationManager" ref="authenticationManager" /> 
     <beans:property name="accessDecisionManager" ref="accessDecisionManager" /> 
     <beans:property name="securityMetadataSource" ref="filterSecurityMetadataSource" /> 
    </beans:bean> 
<beans:bean id="filterSecurityMetadataSource" 
     class="com.mycompany.filter.FilterSecurityMetadataSource"> 
    </beans:bean> 

ce qui pourrait être le problème?

Répondre

1

désolé mon erreur.

dans le code i utilisé id = "securityFilterChaing"

alors que je devrais utiliser id = "filterChainProxy"

Questions connexes