15

Springがサービスインターフェイスに@Secured( "ROLE_USER")を適用しない理由について、私は少し迷っています。私のコントローラーは注釈を使用して確立されます。

私のサービスインターフェースの例

public interface MyServiceManager {

    @Secured("ROLE_USER")
    public void delete(int cid);

    @RolesAllowed({"ROLE_USER"})
    public Contact getContact(int contactId);
}

私のセキュリティコンテキスト:

<global-method-security   secured-annotations="enabled" jsr250-annotations="enabled">
</global-method-security>

<http auto-config="true" >
    <intercept-url pattern="/secure/**" access="ROLE_SUPERVISOR" />
    <intercept-url pattern="/addcontact**" access="IS_AUTHENTICATED_REMEMBERED" />
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

    <concurrent-session-control max-sessions="1"
        exception-if-maximum-exceeded="true"/>
    <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>
    <logout logout-success-url="/welcome.do" logout-url="/logout"/>
</http>
    <authentication-provider>
    <password-encoder hash="md5"/>
    <user-service>
        <user name="rod" password="a564de63c2d0da68cf47586ee05984d7" authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" />
    </user-service>
</authentication-provider>
4

7 に答える 7

7

発言はありますか

<global-method-security   secured-annotations="enabled" jsr250-annotations="enabled" />

MyServiceManager Bean を定義したのと同じ構成ファイルに? org.springframework のデバッグを有効にするまで同じ問題がありましたが、global-method-security が定義されているファイルと同じファイルにのみ Spring セキュリティが適用されていることに気付きました。

于 2009-02-06T01:47:54.897 に答える
4

私の場合、このステートメントの正確な場所:

<global-method-security secured-annotations="enabled" >

非常に重要であることが判明しました。どのクラスをスキャンしてコントローラーとして使用するかを宣言した後に、必ず配置してください。

<context:component-scan base-package="com.test.controller" />

これは、@Secured アノテーションもゲームに確実に組み込まれるようにする方法です。

于 2011-03-30T10:03:48.650 に答える
2

私はこれと同じ問題を抱えていました。Kent Lai の返信 here の情報を使用して、修正することができました。

私は<global-method-security>要素を myに入れましたapp-servlet.xmlが、セキュリティ定義をsecurity.xml、forと.web.xmlcontextConfigLocationapp-servlet.xmlsecurity.xml

今では魅力のように機能します!

于 2009-02-19T21:06:08.323 に答える
1

web.xmlでこのようなものを使用しましたか

<servlet>
    <servlet-name>name</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

理由はわかりませんが、DispatcherServlet を使用すると、セキュリティ アノテーションを適用できませんでした

于 2010-12-23T10:58:08.653 に答える
1

インターフェイスではなく実装クラスに注釈を付けてみて、それが機能するかどうかを確認してください。サービス層で @Transactional 属性も使用していたため、最近のプロジェクトでそれを行うことになりました。Spring ドキュメントでは、それらをインターフェイスではなくクラスに配置することを推奨しています。同じ問題が @Secured に当てはまるかどうかはわかりませんが、注釈を同じ場所に保持したかったのです。のドキュメントを見る

Kent Lai の回答については...それは良い考えです...セキュリティ構成ファイルが実際にSpringに含まれていることを確認してください。

于 2009-02-07T03:05:30.247 に答える
0

私はこれと同じ問題を抱えていました。追加した後:

<context:annotation-config />

私のspring-security.xmlファイルでは消えました。

これが誰かを助けることを願っています:)

于 2015-04-22T12:59:14.537 に答える