【发布时间】:2012-07-01 13:18:40
【问题描述】:
我正在尝试在我的应用程序中添加一些没有命名空间的拦截方法(使用 Spring Security)。
所以这就是我所做的:
首先,我在 filter-chain-map 中添加了一个名为“methodSecurityInterceptor”的过滤器,如您所见:
<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,因为它不是过滤器!
那我该怎么办?
我已经阅读了this,但我不知道如何将它与 Spring AOP 的代理机制之一一起使用!
所以...有什么想法吗?
【问题讨论】:
-
这看起来和我昨天给你的答案的内容很相似。您是否删除了之前的问题?我还为您提供了 Spring Security 代码库中使用 AOP 的示例的指针。你试过用那个吗?方法安全与 Web 过滤器无关。
-
是的,谢谢。我已阅读您的答案,我认为应该以这种方式提出问题。顺便说一句,我不明白如何使用 AOP。这有点模糊。你能举个很简单的例子吗?
标签: spring spring-security intercept