私の最初の実装では、単純なフィルター定義がweb.xml
あり、うまく機能しています。
<filter>
<filter-name>myCustomFilter</filter-name>
<filter-class>some.package.MyCustomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myCustomFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
私の目標は、上記のフィルターを交換してセキュリティを強化することです。springSecurityFilterChain
春のドキュメントに従って
すでに追加しました: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filterChainProxy
次に、定義を追加しましたspring-security.xml
<alias name="filterChainProxy" alias="springSecurityFilterChain"/>
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<security:filter-chain-map path-type="ant">
<security:filter-chain pattern="/**" filters="myCustomFilter"/>
</security:filter-chain-map>
</bean>
<bean id="myCustomFilter" class="some.package.MyCustomFilter"/>
既存の spring-security.xml 構成:
<security:http pattern="/**/*.some_extension" security="none"/>
<security:http auto-config="false" entry-point-ref="entryPoint" authentication-manager-ref="manager" use-expressions="true">
<security:intercept-url pattern="/**" access="hasRole('SOME_ROLE')"/>
<security:custom-filter ref="map_filter" position="FORM_LOGIN_FILTER"/>
<security:logout
logout-url="/my/logout.controller"
delete-cookies="JSESSIONID"
/>
</security:http>
<util:map id="map_filter">
<entry key="/my/first/login/.controller" value-ref="filter1"/>
<entry key="/my/second/login/.controller" value-ref="filter2"/>
</util:map>
今、ログインしようとすると、次の例外が発生します。
org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/my/first/login/.controller', method 'POST'