0

SpringSecurityに問題があります。/ admin、/ client、さらには/admin/addUser.jspのようなURLにアクセスすると、(必要に応じて)ログインページに戻りますが、/ addUser(Spring MVCコントローラーにマップされている)のようなURLにアクセスすると、ユーザーが認証されていなくても、どのような場合でもページ。セキュリティを強化するために追加/削除/変更する必要のある構成はすべてうまく機能します。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

       <security:http auto-config="true" use-expressions="true"> <!--access-decision-manager-ref="accessDecisionManager"-->
            <security:intercept-url pattern="/login" access="permitAll"/>
            <security:intercept-url pattern="/admin*/**" access="hasRole('ROLE_ADMIN')"/>
            <security:intercept-url pattern="/client*/**" access="hasRole('ROLE_USER')"/>
            <security:form-login login-page="/login" default-target-url="/index" authentication-failure-url="/loginFail"
                                 authentication-success-handler-ref="redirectRoleStrategy"/>
            <security:logout logout-success-url="/logout" invalidate-session="true"/>
            <security:access-denied-handler error-page="/403"/>
       </security:http>

       <bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
           <property name="userDetailsService" ref="userDetailsService"/>
       </bean>

       <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
            <property name="providers">
                <list>
                    <ref local="daoAuthenticationProvider"/>
                </list>
            </property>
       </bean>

        <security:authentication-manager>
            <security:authentication-provider user-service-ref="userDetailsService"/>
        </security:authentication-manager>

        <bean id="redirectRoleStrategy" class="com.payment.system.util.RoleBasedAuthenticationSuccessHandler">
            <property name="roleUrlMap">
                <map>
                    <entry key="ROLE_ADMIN" value="/admin"/>
                    <entry key="ROLE_USER" value="/client"/>
                </map>
            </property>
        </bean>
</beans>

PS:ちなみに、私のIDEAは<property name="providers">、このプロパティが非推奨になったことを報告する行を私にぶつけます。これをどのプロパティに置き換える必要がありますか?

ありがとうございました!

4

2 に答える 2

1

追加するだけ

<security:intercept-url pattern="/**" access="isFullyAuthenticated()" />

あなたのすべてのintercept-urlタグの後(つまり、最後のタグでなければなりません)

PS の質問: javadoc で説明されているように、コンストラクター インジェクションを使用するだけです ( constructor-argタグを介して)。

于 2013-02-27T15:55:55.310 に答える