3

私たちのアプリケーションは、次のように春のセキュリティを使用して URL をフィルタリングしています。

<intercept-url pattern="/resources/**" access="ROLE_ANONYMOUS,ROLE_USER"/>

Url のリストを取得し、各メソッド (GET、POST、PUT など) がアクセス可能かどうかをチェックする単体テストを作成したいと考えています。

の使用を検討していましDelegatingFilterProxyたが、 を にロードする方法がわかりませんでしconfig/contextweb.xml

これは有効なアプローチですか、それとも何かお勧めですか?

4

2 に答える 2

0

私のテストでは、intercept-url が関係しています。

@ContextConfiguration({
        "classpath:spring/spring-app.xml",
         ...
})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class ControllerTest {

    private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter();

    static {
        CHARACTER_ENCODING_FILTER.setEncoding("UTF-8");
        CHARACTER_ENCODING_FILTER.setForceEncoding(true);
    }

    protected MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @PostConstruct
    private void postConstruct() {
        mockMvc = MockMvcBuilders
            .webAppContextSetup(webApplicationContext)
            .addFilter(CHARACTER_ENCODING_FILTER)
            .apply(springSecurity())
            .build();
    }

    @Test
    public void testUsers() throws Exception {
        mockMvc.perform(get("/users")
            .with(authentication(new UsernamePasswordAuthenticationToken("user", "password")))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(view().name("users"))
            .andExpect(forwardedUrl("/WEB-INF/jsp/users.jsp"));
    }
    ...
于 2016-11-06T17:44:23.083 に答える
0

DelegatingFilterProxy の @Autowire によってインターセプト URL のテストを作成し、MockHttpServletRequest、MockHttpServletResponse、および MockFilterChain を使用して結果を検証できます。

Spring MVC を使用している場合は、フィルター (Spring Security を含む) をサポートする Spring Test MVC を参照してください。リポジトリでサンプルを見つけることができます。Spring Test MVC は Spring 3.2+ (spring-test モジュール内) に含まれていることに注意してください。Spring 3.1 の外部モジュールとしても利用できます。

于 2013-01-25T21:09:53.493 に答える