我有一个用JSF和Spring编写的应用程序(事务和IoC)。该应用程序使用Spring安全保护(由于我使用ACL,因此非常复杂)。通过app的流程是:
JSF Managed Bean - >服务类 - > DAO类 - > DB和其他方式。
测试方法实现的界面如下所示:
public interface MyService extends GenericService {
@PreAuthorize("hasPermission(#oId,'com.mycompany.core.entity.MyObject','read')")
public abstract MyObject getMyObject(Long oId);
}
指定方法的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:/applicationContext.xml","classpath: /applicationContext-test.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional(propagation = Propagation.REQUIRED)
public class MyServiceImplIntegrationTest {
@Inject
private MyService myService;
@Test
public void testGetMyObject(){
myService.getMyObject();
}
}
可以看出我使用两个xml文件来配置spring(一个用于测试,一个用于非测试) 我的问题是,对于整个测试类,我想要消除真实方法中的弹簧安全注释 我的第一个是覆盖现在看起来像这样的元素:
<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="methodExpressionHandler" />
</security:global-method-security>
带
<security:global-method-security pre-post-annotations="disabled">
<security:expression-handler ref="methodExpressionHandler" />
</security:global-method-security>
但似乎无法在其他文件中覆盖此元素 关于如何达到同样效果的任何其他想法?
PS。组件版本是:
<org.springframework.version>4.0.7.RELEASE</org.springframework.version>
<org.springframework.security.version>3.2.4.RELEASE</org.springframework.security.version>