我有这样的控制器
@RestController
@RequestMapping(value="/test")
@PreAuthorize("hasRole('ADMIN')")
public class TestController
{
@RequestMapping( method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> test ()
{
return ResponseEntity.ok("test");
}
}
我尝试编写单元测试来测试访问此控制器方法的权限。
这是我的测试
@RunWith(SpringRunner.class)
@ContextConfiguration
@WebMvcTest(value = TestController.class)
public class AUnitTest
{
@Autowired
private MockMvc mockMvc;
private final String url = "/test";
@Test
@WithMockUser(roles="ADMIN")
public void testAdminUser() throws Exception
{
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(this.url );
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus());
}
}
当我从 @WithMockUser 中删除角色并留空时,默认情况下它将具有角色 USER,然后测试通过。
当我设置角色 USER 和 ADMIN 时,由于 USER 角色,它也会通过。
但是每当我将角色设置为 ADMIN 时,即使我设置该用户需要具有 ADMIN 角色才能访问控制器,它也会失败。
我尝试设置用户名、密码等所有内容Spring安全文档 http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#test, etc.
我错过了什么吗?
尝试添加@EnableGlobalMethodSecurity(prePostEnabled = true)
去测试课。
或者像这样添加配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
static class Config {
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)