Ответ 1
ОБНОВЛЕНИЕ: Spring Безопасность 4+ предоставляет возможность интеграции с MockMvc. Чтобы использовать его, вы можете использовать apply(springSecurity())
, как показано ниже:
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class MockMvcSecurityTests {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
...
}
Оригинальный ответ
Я не уверен, что вы подразумеваете под "Когда я пытаюсь добавить web.xml в @ContextConfiguration, это не сработает", однако вы можете использовать Spring Test MVC для проверки безопасности Spring. Существует очень хороший пример, описанный в проекте spring -test-mvc.
Основной контур выглядит примерно так:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:security-context.xml", "classpath:applicationContext.xml", "classpath:test-contexts/test-context.xml" })
public class MyTests {
@Autowired
private FilterChainProxy springSecurityFilterChain;
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
.addFilters(this.springSecurityFilterChain).build();
}
}
Идея состоит в том, что вы @Autowire
FilterChainProxy
(что делегат DelegatingProxyFilter
делегирует), и инструктируйте MockMvc
использовать FilterChainProxy
.
ПРИМЕЧАНИЕ spring -test-mvc интегрирован в spring -test-3.2 + и отдельный проект для Spring 3.1.x, поэтому вы можете использовать пример довольно взаимозаменяемо ( spring -test-mvc не поддерживает @WebAppConfiguration
и вместо этого должен использовать WebContextLoader
).