【发布时间】:2018-02-16 14:30:41
【问题描述】:
问题:当我尝试测试需要身份验证的方法(使用 MockUser)时,它返回 403 错误,我遗漏了一些东西,尝试了几种方法,但它们不起作用。我不明白为什么会这样,有人可以解释吗?
例如,我创建了一个简单的应用程序来演示这一点。
Spring-security 配置类
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class SpringConfigure extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
configureAuthorization(http);
configureAuthentication(http);
}
private void configureAuthorization(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/**").authenticated();
}
private void configureAuthentication(HttpSecurity http) throws Exception {
AuthenticationEntryPoint authenticationEntryPoint = (request, response, e) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage());
}
}
控制器类
@RestController
@RequestMapping("api/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello(){
return "Hello";
}
}
和我的测试班
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {DemoApplication.class},webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DemoApplicationTests {
RestTemplate restTemplate;
@Before
public void setUp(){
restTemplate = new RestTemplate();
}
@Test
@WithMockUser(username = "user")
public void helloTest() {
System.out.println(SecurityContextHolder.getContext().getAuthentication());
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://localhost:8080/api/hello",String.class);
}
}
@WithMockUser
创建的用户Principal: org.springframework.security.core.userdetails.User@36ebcb: Username: user; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_USER
【问题讨论】:
-
你试过在测试中同时使用用户名和密码吗?
-
是的,我试过了,结果是一样的
标签: java spring-boot spring-security integration-testing