Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring安全方法SecurityInterceptor_Security_Methods_Spring Security - Fatal编程技术网

Spring安全方法SecurityInterceptor

Spring安全方法SecurityInterceptor,security,methods,spring-security,Security,Methods,Spring Security,我在tomcat6上运行了一个Java应用程序。 我正在使用Spring3.0.4和SpringSecurity 3.0.5 为了保护对dao方法的访问,我想使用spring securityMethodSecurityInterceptor。但这一个实际上根本没有“拦截”访问 其配置如下: <bean id="securityInterceptor" class="org.springframework.security.access.intercept.aopalliance.Meth

我在tomcat6上运行了一个Java应用程序。 我正在使用Spring3.0.4和SpringSecurity 3.0.5

为了保护对dao方法的访问,我想使用spring security
MethodSecurityInterceptor
。但这一个实际上根本没有“拦截”访问

其配置如下:

<bean id="securityInterceptor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor"> 

    <property name="authenticationManager"> 
        <ref bean="authenticationManager"/> 
    </property> 

    <property name="accessDecisionManager"> 
        <ref bean="accessDecisionManager"/> 
    </property> 

    <property name="securityMetadataSource">
        <value> 
            com.xkst.dao.InvoiceDao.*=ROLE_ADMIN
            com.xkst.dao.UserDao.*=ROLE_ADMIN
        </value>
    </property> 
</bean>
在这里,我可以在我的客户机上调用“serverService”的任何方法,这些方法应该受到“MethodSecurityInterceptor”的保护,而无需进行身份验证。我可以从我的“UserDao”查询所有数据

我真的不知道缺失的环节是什么

authenticationManager
accessDecisionManager
也已配置。服务器启动时没有错误消息。它甚至记录了“安全方法”的创建,如:


那么我做错了什么?

你解决过这个问题吗?我不太确定了,但我想问题是在同一个接口实现中调用方法。拦截器仅适用于来自外部的方法调用;另一节课。据我所知,Spring在原始对象周围创建了一个代理对象,并在那里处理截取。嗯(有一点)。你刚刚救了我一天!我已经调试spring一天了,想弄明白为什么我的方法在调用这些方法时没有经过身份验证,而没有意识到只有当spring方法调用程序能够干预时,注释才会起作用,也就是说,当通过spring从外部解决这些问题时……你解决过这个问题吗?我不太确定了——但我想问题是在同一个接口实现中调用方法。拦截器仅适用于来自外部的方法调用;另一节课。据我所知,Spring在原始对象周围创建了一个代理对象,并在那里处理截取。嗯(有一点)。你刚刚救了我一天!我已经调试spring一天了,想弄明白为什么我的方法在调用这些方法时没有经过身份验证,而没有意识到只有当spring方法调用程序能够介入时,注释才会起作用,即当通过spring从外部寻址这些方法时。。。
public class SecurityTest {
public static void main(String[] args) {


    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("clientContext.xml");
    EntityServiceInterface serverService = (EntityServiceInterface) ctx.getBean("entityServiceInterface");

    List<UserEntity> users = serverService.performGetAllUsers();
    for(UserEntity user : users) {
        System.out.println(user.getUserName());
    }

}
2011-08-01 10:38:48,675  INFO MethodDefinitionMap:75 - Adding secure method [public java.util.List com.xkst.dao.UserDao.findAll()] with attributes [[ROLE_ADMIN]]