名前空間を使用せずに(Springセキュリティを使用して)アプリケーションにインターセプトメソッドを追加しようとしています。
これが私がしたことです:
最初に、あなたが見ることができるように、私は「methodSecurityInterceptor」という名前のfilter-chain-mapにフィルターを追加しました:
<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
<security:filter-chain-map path-type="ant">
<sec:filter-chain pattern="/css/**" filters="none" />
<sec:filter-chain pattern="/images/**" filters="none" />
<sec:filter-chain pattern="/login.jsp*" filters="none" />
<sec:filter-chain pattern="/**"
filters="
ConcurrentSessionFilter,
securityContextPersistenceFilter,
sessionManagementFilter,
authenticationProcessingFilter,
exceptionTranslationFilter,
filterSecurityInterceptor,
methodSecurityInterceptor,
logoutFilter" />
</security:filter-chain-map>
</bean>
次に、そのBeanを次のように紹介しました。
<bean id="methodSecurityInterceptor"
class="org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="securityMetadataSource" ref="MyMethodMetdataSource">
</property>
</bean>
<bean id="MyMethodMetdataSource" class="com.datx.dao.MyMethodMetdataSource">
</bean>
そして、MyMethodMetadataSourceを次のように実装しました。
public class MyMethodMetdataSource extends AbstractMethodSecurityMetadataSource{
@Override
public Collection<ConfigAttribute> getAttributes(Method arg0, Class<?> arg1) {
String url = arg0.getName();
List<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>();
attributes = getAttributesByURL2(url); //Here is my function which
//returns corresponding roles
return attributes;
}
@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
// TODO Auto-generated method stub
return null;
}
どうやら私はmethodSecurityInterceptorを使用することを許可されていません。それはフィルターではないからです!
だから私は何をすべきですか?
私はこれを読みましたが、Spring AOPのプロキシメカニズムの1つでそれを使用する方法がわかりません!
だから...何か考えはありますか?