如何为Shiro将拦截的api编写junit测试用例?

时间:2018-07-07 20:08:51

标签: unit-testing shiro

我遵循此页面上的指南:http://shiro.apache.org/testing.html

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class AdminControllerTest extends AbstractShiroTest {

    @Autowired
    private MockMvc mvc;
    @Autowired
    private WebApplicationContext wac;
    @Autowired
    private SecurityManager securityManager;

    private MockHttpSession mockSession;

    @Before
    public void setUp() throws Exception {
        SecurityUtils.setSecurityManager(securityManager);
        mockSession = new MockHttpSession(wac.getServletContext());
        MockHttpServletRequest request = new MockHttpServletRequest(wac.getServletContext());
        request.setSession(mockSession);
        MockHttpServletResponse response = new MockHttpServletResponse();

        WebSubject subject = new WebSubject.Builder(request, response).buildWebSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("admin", "12345678");
        subject.login(token);
    }

    @Test
    public void testSimple() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/admin/list").session(mockSession))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }

}

当我在上面运行测试代码时。失败了。

期望:200实际:302。

我认为原因是该请求被shiro拒绝,并重定向到登录URL(显然,我没有登录)。

所以我尝试其他方法来弄清楚如何测试shiro会拦截的API。

{{1}}

最后,使用帐户和密码登录并保存HttpSession以便再次使用是可以的。但是问题是我不想让帐户和密码显示在测试代码上,所以我该怎么办?

请原谅我的英语不好〜

0 个答案:

没有答案