2

Spring3.1を使用してセクション レベルのセキュリティを実装しようとしています。ビュー部分にThymeleaf2.0を使用しています。これが私がそうするために行った構成です、

Jars Used## - すべてのspring3.1 jarおよびthymeleaf-extras-springsecurity3.jar (バージョン 1.0.0.beta-1)

SpringWebFlow-Servlet.xml

<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
     ...
     <property name="additionalDialects">
     <set>
         <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
     </set>
     </property>
     ...
</bean>
<bean id="webexpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" />

spring-security.xml

 <http auto-config="true" use-expressions="true">
     <intercept-url pattern="/productSelection" access="hasRole('ROLE_ADMIN')"/>
    .....
 </http>

xxx.html

<div sec:authorize="hasRole('ROLE_ADMIN')">
    This only be seen if authenticated user has role ROLE_ADMIN.
</div>

問題

次の例外を取得する: 可視の WebSecurityExpressionHandler インスタンスが applicationContext に見つかりませんでした

Spring3.1 では、DefaultWebSecurityExpressionHandler は WebSecurityExpressionHandler を実装せず、インターフェースは非推奨になりました。Thymeleaf が ApplicationContext で利用できない WebSecurityExpressionHandler のインスタンスを検索しようとしているため、回避策を教えてください。

4

3 に答える 3

3

サーブレット コンテキストではなく、アプリケーション (ルート) コンテキストで Bean を定義する必要があります。

<bean id="webSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/>

同じ問題が発生し、それを servlet-context.xml から root-context.xml に移動すると、Bean が取得されました。

Spring の設定によっては、別の xml ファイルにある可能性があるため、web.xml で Spring コンテキスト ルートを確認してください。

あなたの場合、spring-security.xml が Spring ルート コンテキストにインポートされている場合は、そこに追加できます。

于 2014-12-03T14:45:54.633 に答える
0

Spring Security 3.1.0のDefaultWebSecurityExpressionHandlerクラスはインターフェースを実装していませんがWebSecurityExpressionHandler、これはおそらく省略されています。

これは Spring Security 3.1.1 以降のバージョンで解決されたため、Spring Security の依存関係を更新するだけで済みます。

于 2012-10-25T08:03:35.793 に答える