Spring Security 3.1.4 autorizar / autenticação taglib não estão funcionando com a hierarquia de papéis no JSF 2.2 no Tomcat 7

Os roleHeirarchies são considerados para Expressões de Segurança da Web definidas como URLs de interceptação por meio do namespace http, mas não em expressões, usando o taglib JSP Authorize.

Eu já li muitas coisas ...ref1 ref2 ref3 ref4 ref5 ref6

****EDITAR:****Ref1 e Ref6 mencionar materiais sobre um problema com ordem de filtros e contexto de segurança não disponível em jsp ... (a propósito, eu estou usando jsf2) talvez haja algo para cavar ...

EDIT 2: O JSF está manipulando a tag de segurança lib? Eu leioisto e tentarnaquela sem sucesso

EDIT 3: : Eu tentei instalar via Maven spring-faces 2.3.2 e spring-security-taglibs ... nada acontece ... Alguns tuto disse para criar um taglib.xml personalizado, mas não funcionou também, eu acho que foi para versão mais antiga ...

Eu testei esse facesContext.externalContext.isUserInRole ('ROLE') e sec: authorize access = "hasRole ('Role') ... O primeiro funciona somente se for o mesmo ROLE, mas não levar em conta o material da hierarquia ... E seg: autorizar simplesmente não fazer nada, todas as funções são impressas.

Veja o exemplo acima com um usuário com ROLE ROLE_ADMIN_PROFILER_NGS:

    <h:outputText rendered="#{facesContext.externalContext.isUserInRole('ROLE_ADMIN_PROFILER_NGS')}"  value ="ROLE_ADMIN_PROFILER_NGS"></h:outputText> // WORKS <br></br>
<h:outputText rendered="#{facesContext.externalContext.isUserInRole('ROLE_GUEST')}"  value ="ROLE_GUEST"></h:outputText> // SHOULD APPEAR BUT NOTHING HAPPENS<br></br>
<h:outputText rendered="#{facesContext.externalContext.isUserInRole('ROLE_ADMIN')}"  value ="ROLE_ADMIN"> // SHOULD NOT APPEAR AND THAT'S THE CASE</h:outputText><br></br>

/* ALL THE THREE NEXT ARE DISPLAYED WHITHOUT CONTROL AUTORIZATION.*/

<sec:authorize access="hasRole('ROLE_ADMIN_PROFILER_NGS')">ROLE_ADMIN_PROFILER_NGS<br></br></sec:authorize>
<sec:authorize access="hasRole('ROLE_GUEST')">ROLE_GUEST <br></br></sec:authorize>
<sec:authorize access="hasRole('ROLE_ADMIN')">ROLE_ADMIN  <br></br></sec:authorize>

Isto é o que eu tentei acessar para testar com o material de hierarquia de papéis:

Quando um usuário vem somente com um GUEST da função ... Todas as tags são exibidas ... elas não devem aparecer, apenas o GUEST (cf definição no final) deve aparecer:

    <sec:authentication property="username" />
    <sec:authorize access="hasRole('ROLE_BABAB')">BABA</sec:authorize>
    <sec:authorize access="hasRole('ROLE_GUEST')">GUEST</sec:authorize>
    <sec:authorize access="hasRole('ROLE_ADMIN')">ADMIN</sec:authorize>

Esta é minha configuração de segurança:

   <security:http auto-config="true" access-decision-manager-ref="accessDecisionManager" use-expressions="true" disable-url-rewriting="true">
    <security:intercept-url pattern="/Participant/New/*" access="hasRole('ROLE_ADMIN')" />  
    <security:intercept-url pattern="/Home" access="hasRole('ROLE_GUEST')" />  
    <security:intercept-url pattern="/Login" access="hasRole('ROLE_ANONYMOUS')" />   
     <security:intercept-url pattern="/Login/Error" access="hasRole('ROLE_ANONYMOUS')" />    
    <security:form-login  login-page="/Login"  login-processing-url="/j_spring_security_check"  authentication-failure-url="/Login/Error" default-target-url="/Home" />
    <security:logout logout-url="/j_spring_security_logout" logout-success-url="/Home" delete-cookies="JSESSIONID"  invalidate-session="true"/>
    <security:anonymous/>
     <security:expression-handler ref="defaultWebSecurityExpressionHandler" />
    <security:session-management invalid-session-url="/Login" >
        <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true"  />
    </security:session-management>
   <security:port-mappings>
     <security:port-mapping http="8086" https="8443"/>
    </security:port-mappings>
  </security:http>

<beans:bean id="defaultWebSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
      <beans:property name="roleHierarchy" ref="roleHierarchy"/>
</beans:bean>

<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
  <beans:property name="decisionVoters">
    <beans:list>
       <beans:ref bean="roleVoter" />
        <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
            <beans:property name="expressionHandler" ref="defaultWebSecurityExpressionHandler"/>
        </beans:bean>
       <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>

    </beans:list>
  </beans:property>
</beans:bean>


<beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
    <beans:constructor-arg ref="roleHierarchy" />
</beans:bean>

<beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <beans:property name="hierarchy">
        <beans:value>
            ROLE_ADMIN > ROLE_ADMIN_PROFILER_NGS
            ROLE_ADMIN_PROFILER_NGS > ROLE_GUEST
            ROLE_GUEST > ROLE_GUEST_PROFILER_NGS  
            ROLE_ADMIN > ROLE_ADMIN_PROFILER_CGH
            ROLE_ADMIN_PROFILER_CGH > ROLE_GUEST
            ROLE_GUEST > ROLE_GUEST_PROFILER_CGH
        </beans:value>
    </beans:property>
 </beans:bean>

Muito obrigado, você é bem-vindo se tiver outra idéia para testar ...

EDIT 3:

Por que ele retorna 0 para RoleHierarchyVoter e 1 para WebExpressionVoter ... isso é normal?

14: 48: 32,861 DEBUG FilterSecurityInterceptor: 194 - Objeto seguro: FilterInvocation: URL: / Home; Atributos: [hasRole ('ROLE_GUEST')] 14: 48: 32,861 DEBUG FilterSecurityInterceptor: 310 - Anteriormente autenticado: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@43a64f5f: Principal: com.clb.genomic.lyon.model.User@d46 : Nome de usuário: jp; Protegido por senha]; Habilitado: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Autoridades concedidas: ROLE_ADMIN_PROFILER_NGS; Credenciais: [PROTEGIDO]; Autenticado: true; Detalhes: org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 192.168.154.18; ID da sessão: 084939D4E097F41ACA6A1F24CD8390BE; Autoridades concedidas: ROLE_ADMIN_PROFILER_NGS 14: 48: 32,861 DEBUG RoleHierarchyImpl: 117 - getReachableGrantedAuthorities () - Das funções [ROLE_ADMIN_PROFILER_NGS] pode-se acessar [ROLE_GUEST_PROFILER_NGS, ROLE_GUEST_PROFILER_CGH, ROLE_ADMIN_PROFILER_NGS, ROLE_GUEST] em zero ou mais etapas. 14: 48: 32,861 DEBUG AffirmativeBased: 65 - Eleitor: org.springframework.security.access.vote.RoleHierarchyVoter@6ff43d69, devolvido: 0 14: 48: 32,862 DEBUG RoleHierarchyImpl: 117 - getReachableGrantedAuthorities () - Dos papéis [ROLE_ADMIN_PROFILER_NGS] um pode alcançar [ROLE_GUEST_PROFILER_NGS, ROLE_GUEST_PROFILER_CGH, ROLE_ADMIN_PROFILER_NGS, ROLE_GUEST] em zero ou mais etapas. 14: 48: 32,862 DEBUG AffirmativeBased: 65 - Eleitor: org.springframework.security.web.access.expression.WebExpressionVoter@3fe932d5, devolvido: 1 14: 48: 32,862 DEBUG FilterSecurityInterceptor: 215 - Autorização bem-sucedida

EDIT 5:

     <beans:bean id="login" class="com.clb.genomic.lyon.beans.LoginBean" scope ="session">
          <beans:property name="authenticationManager" ref="authenticationManager" /> 
     </beans:bean>

>     <security:authentication-manager alias="authenticationManager">
>         <security:authentication-provider user-service-ref="userBo" >
>             <security:password-encoder ref="standardPasswordEncoder"/>   
>         </security:authentication-provider>
>     </security:authentication-manager>

questionAnswers(1)

yourAnswerToTheQuestion