2

Spring3.0で問題なく動作していたプロジェクトがありました。依存関係を制御するためにMavenに移動し、Spring3.1.2jarとSpringsecurity3.1.1jarに移動しました。

セキュリティtaglib(例)の使用を含むJSPにアクセスしようとすると、次のエラーが発生します。

javax.servlet.ServletException: javax.servlet.jsp.JspException: java.io.IOException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags.

私のセキュリティコンテキストでは、次のようになります。

<http auto-config="true" use-expressions="true" create-session="ifRequired"

私の古いプロジェクトから:

<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler" />

プロジェクト用に持っているパッケージにそのクラスが見つからなかったので、それは私が試したクラスの移動である可能性があると考えました。

<beans:bean id="expressionHandler" class="org.springframework.security.web.access.expression.WebSecurityExpressionHandler" />

これは私に同じエラーを与えます。

現時点で構成したSpring-securityの依存関係:spring-security-core-3.1.1 spring-security-taglibs-3.1.1 spring-security-acl-3.1.1 spring-security-config-3.1.1 spring-security -web-3.1.1

'use-expressions = true'が必要なものをすべて含むjarファイルがありませんか?

4

2 に答える 2

1

それ以来、プロジェクトにいくつかの変更を加えましたが、実際にこの問題を修正したかどうかは100%わかりませんが、以下にリストされている最も可能性の高い候補です。

  • 私のアプリのlibフォルダーに隠された3.0のjarファイルがいくつかありました。それらを手動で削除しました。
  • expressionHandler定義をセキュリティコンテキストから完全に削除しました
  • URLマッピングスタイルを次のように変更しました。

    <!-- Spring Security < 3.1
    These were inside the <http... > element
    <intercept-url pattern="/public/**" filters="none"/>
    <intercept-url pattern="/login" filters="none"/>
    <intercept-url pattern="/loggedOut" filters="none"/>
    <intercept-url pattern="/include/css/**" filters="none"/>
    <intercept-url pattern="/include/img/**" filters="none"/>
    -->
    

    security-contextの要素の前に次のように変更されました。

    <!-- for Spring-security >= 3.1 -->
    <http pattern="/public/**" security="none"/>
    <http pattern="/login" security="none"/>
    <http pattern="/loggedOut" security="none"/>
    <http pattern="/include/css/**" security="none"/>
    <http pattern="/include/img/**" security="none"/>
    

私の要素は次のようになります。

        <http use-expressions="true" auto-config="true" create-session="ifRequired" access-denied-page="/accessDenied" >

これが、Spring security3.0->3.1から移行する同様の問題を抱えている他の誰かに役立つことを願っています。

于 2012-07-27T10:18:33.337 に答える
0

これは正しくありません。インターセプトURLを使用してロールアクセスを制御していますが、省略しています。

于 2013-07-02T11:53:18.473 に答える