Spring Security 3.1.4 taglib authorize / authentication funktioniert nicht mit der Rollenhierarchie in JSF 2.2 unter Tomcat 7

Die roleHeirarchies werden für Web Security-Ausdrücke berücksichtigt, die als Abfang-URLs über den http-Namespace definiert sind, jedoch nicht in Ausdrücken, die die JSP Authorize-Taglib verwenden.

Ich habe schon viele Sachen gelesen ...ref1 ref2 ref3 ref4 ref5 ref6

****BEARBEITEN:****Ref1 und Ref6 erwähnen Dinge über ein Problem mit der Filterreihenfolge und dem Sicherheitskontext, die in jsp nicht verfügbar sind ... (ich verwende übrigens jsf2) Vielleicht gibt es etwas zu graben ...

EDIT 2: Handelt JSF mit dem Sicherheitstag lib? ich lesediese und versucheDas ohne Erfolg

EDIT 3: : Ich habe versucht, über Maven spring-faces 2.3.2 und spring-security-taglibs zu installieren ... es passiert nichts ... Einige Tutos haben gesagt, dass sie eine benutzerdefinierte taglib.xml erstellen sollen, aber es hat auch nicht funktioniert, ich denke, es war für ältere Version...

Ich habe das getestet facesContext.externalContext.isUserInRole ('ROLE') und sec: authorize access = "hasRole ('Role') ... Das erste funktioniert nur, wenn es die gleiche ROLE ist, aber das Hierarchie-Zeug wird nicht berücksichtigt ... Und sec: autorisieren einfach nichts machen, alle rollen werden gedruckt.

Siehe obiges Beispiel mit einem Benutzer mit 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>

Dies ist, was ich versucht habe, um mit dem Zeug der Rollenhierachien zu testen:

Wenn ein Benutzer nur mit einer Rolle GAST kommt ... Alle Tags werden angezeigt ... sie sollten nicht angezeigt werden, sondern nur GAST (siehe Definition unten):

    <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>

Dies ist meine Sicherheitskonfiguration:

   <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>

Vielen Dank, Sie sind willkommen, wenn Sie eine andere Idee zum Testen haben ...

EDIT 3:

Warum wird 0 für RoleHierarchyVoter und 1 für WebExpressionVoter zurückgegeben ... ist das normal?

14: 48: 32,861 DEBUG FilterSecurityInterceptor: 194 - Sicheres Objekt: FilterInvocation: URL: / Home; Attribute: [hasRole ('ROLE_GUEST')] 14: 48: 32,861 DEBUG FilterSecurityInterceptor: 310 - Zuvor authentifiziert: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@43a64f5f: Principal: com.clb.genomic.lyser.model : Benutzername: jp; Passwortgeschützt]; Aktiviert: wahr; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Erteilte Berechtigungen: ROLE_ADMIN_PROFILER_NGS; Berechtigungsnachweise: [GESCHÜTZT]; Authentifiziert: wahr; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 192.168.154.18; SessionId: 084939D4E097F41ACA6A1F24CD8390BE; Gewährte Berechtigungen: ROLE_ADMIN_PROFILER_NGS 14: 48: 32,861 DEBUG RoleHierarchyImpl: 117 - getReachableGrantedAuthorities () - Aus den Rollen [ROLE_ADMIN_PROFILER_NGS] kann man [ROLE_GUEST_PROFILER_NGUEST_RGNG 14: 48: 32,861 DEBUG AffirmativeBased: 65 - Wähler: org.springframework.security.access.vote.RoleHierarchyVoter@6ff43d69, zurückgegeben: 0 14: 48: 32,862 DEBUG RoleHierarchyImpl: 117 - getReachableGrantedAuthorities (_PN_GM) kann [ROLE_GUEST_PROFILER_NGS, ROLE_GUEST_PROFILER_CGH, ROLE_ADMIN_PROFILER_NGS, ROLE_GUEST] in null oder mehr Schritten erreichen. 14: 48: 32,862 DEBUG AffirmativeBased: 65 - Wähler: org.springframework.security.web.access.expression.WebExpressionVoter@3fe932d5, zurückgegeben: 1 14: 48: 32,862 DEBUG FilterSecurityInterceptor: 215 - Autorisierung erfolgreich

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>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage