2

Roo を使用してスプリング プロジェクトを生成し、セキュリティ セットアップ アドオンを使用してスプリング セキュリティを追加しました。セキュリティは Tomcat 7 では問題なく動作しますが、Websphere 7.0.0.19 にデプロイしようとすると次の問題が発生します。現在、Spring Security 3.1.0.RELEASE を使用しています。Websphere 内で Spring DelegatingFilterProxy を問題なく使用している他のプロジェクトを見てきました。誰にもアイデアはありますか?

StackTrace からのエラー:

E org.springframework.web.context.ContextLoader initWebApplicationContext Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChainProxy': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: A universal match pattern ('/**') is defined  before other patterns in the filter chain, causing them to be ignored. Please check the ordering in your <security:http> namespace or FilterChainProxy bean configuration

applicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <!-- HTTP security configurations -->
    <http auto-config="true" use-expressions="true" >
        <form-login login-processing-url="/resources/j_spring_security_check" login-page="/login" authentication-failure-url="/login?login_error=t" />
        <logout logout-url="/resources/j_spring_security_logout" />
        <!-- Configure these elements to secure URIs in your application -->
        <intercept-url pattern="/login" access="permitAll" />
        <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
        <intercept-url pattern="/jobtypes/**" access="isAuthenticated()" />
        <intercept-url pattern="/tests/**" access="permitAll" />
        <!-- Websphere Problem: IllegalArgumentException: A universal match pattern ('/**') is defined  before other patterns in the filter chain -->
        <intercept-url pattern="/resources/**" access="permitAll" />
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
    </http>

    <!-- Configure Authentication mechanism -->
    <beans:bean name="myCompanyAuthenticationProvider" class="edu.mycompany.project.security.MyCompanyAuthenticationProvider" />
    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="myCompanyAuthenticationProvider" />
    </authentication-manager>   
</beans:beans>

ありがとう、

4

2 に答える 2

2

これを読んでいる(そして答えを探している)他の人のために、問題はSEC-2034として記録され、無効であると判断されました。この問題は、構成が2回取得されたために発生しています。

于 2012-08-17T16:32:54.117 に答える
1

興味深い...私はSpring Security 3.1.0.RELEASEを使用しており、WAS 7にもデプロイしていますが、アプリで問題が発生したことはありません. あなたと私の唯一の小さな違いは、私が式を使用しないことです。これが私の外観です:-

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <security:http auto-config="true">
        <security:form-login login-page="/" authentication-failure-url="/?login_error=1" default-target-url="/"
                             always-use-default-target="true"/>
        <security:logout logout-success-url="/" />
        <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER"/>
        <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    </security:http>

    ...

</beans>

もう 1 つの重要な違いは、私のキャッチオール/**は匿名アクセス用に開かれているのに対し、あなたのキャッチオールは ROLE_USER に制限されていることです。

于 2012-08-15T12:37:16.390 に答える