我遵循此页面上的指南: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以便再次使用是可以的。但是问题是我不想让帐户和密码显示在测试代码上,所以我该怎么办?
请原谅我的英语不好〜