2017-12-11 19 views
0

私はSpringセキュリティ4.2.3を実装しました。 JSF-2.2 Webアプリケーションでは、これまでのところうまく動作します。今私は春のセキュリティのauthorizeタグからjsf beanメソッドにアクセスする際に問題があります。Springセキュリティの認可タグで管理されたJSF Beanにアクセス

これは私がアイテムデータに基づいて、いくつかの行のアクセスを拒否する必要が私のXHTMLデータテーブルである:

<p:dataTable var="item" value="#{itemService.items}"> 
    <p:column headerText="Id"> 
     <h:outputText value="#{item.id}" /> 
    </p:column> 

    <p:column headerText="Name"> 
     <h:outputText value="#{item.name}" /> 
    </p:column> 

    <p:column headerText="Security"> 
     <sec:authorize access="#{securityService.checkAccessByItemId(item.id)}"> 
      <h:outputLabel value="#{helloWorld.secure}"/> 
     </sec:authorize> 
    </p:column> 
</p:dataTable> 

そして、ここだけのテストのための私の豆:

@ManagedBean(name="securityService") 
@RequestScoped 
public class SecurityService { 

    public boolean checkAccessByItemId(int id) { 
     if(id==5) { 
      return false; 
     } else { 
      return true; 
     } 
    } 
} 

ここに私のtaglib。 XML:私はこの例外を取得しています

<facelet-taglib> 
    <namespace>http://www.springframework.org/security/tags</namespace> 
    <tag> 
     <tag-name>authorize</tag-name> 
     <handler class>org.springframework.faces.security.FaceletsAuthorizeTagHandler</handler-class> 
    </tag> 
</facelet-taglib> 

org.springframework.expression.spel.SpelParseException: Expression [#{securityService.checkAccessByItemId(item.id)}] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lcurly({)' 
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:1006) 

誰にも解決策がありますか?

+0

Spring ELがパラメータ化されたメソッド呼び出しをサポートしているかどうかチェックしましたか? – Kukeltje

+0

パラメータなしのメソッドを呼び出すと同じエラーが発生しました – Timster

+0

エラーが正しく読み込まれました(そしてSpring Securityドキュメントがチェックされました!!!) ELを使用できますか?https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/taglibs.html#taglibs-authorize – Kukeltje

答えて

0

私がSpring-Security documentation for the authorize tagを正しく読んでも、サポートされているとは思われません。なぜなら、自分のbeanを 'validate'するために自分のbeanを呼びたいのであれば、なぜauthorizeタグを使用するのでしょうか? outputLabel then

+0

はい、レンダリングされた属性はこの単純な例。私はk管理されたBeanを使用して動的にアクセスまたはネーム・セットの権限を制御する方法がある場合は、今すぐ使用してください。しかし、これはサポートされていないようです。 – Timster

+0

それはなぜでしょうか?それは、承認タグの必要性を敗北させるだろう... – Kukeltje

関連する問題