如何解决模拟@AuthenticationPrincipal返回异常,没有主构造函数或默认构造函数
在我的MockMvc测试中,我想在Spring Boot Rest Controller中模拟@AuthenticationPrincipal。如您所见,这是模拟目标的示例之一。
这是控制器文件
@GetMapping("/me")
public ResponseEntity currentUser(@AuthenticationPrincipal UserDetails userDetails){
Map<Object,Object> model = new HashMap<>();
model.put("username",userDetails.getUsername());
model.put("roles",userDetails.getAuthorities()
.stream()
.map(a -> ((GrantedAuthority) a).getAuthority())
.collect(toList())
);
return ok(model);
}
这是测试文件
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = SpringSecurityWebAuxTestConfig.class
)
@AutoConfigureMockMvc
@RunWith(SpringRunner.class)
public class AuthenticationControllerTesting {
@Mock
AuthenticationManager authenticationManager;
@Mock
JwtTokenProvider jwtTokenProvider;
@Mock
UserRepository users;
@Mock
PasswordEncoder passwordEncoder;
@InjectMocks
AuthenticationController authenticationController;
@Autowired
private Filter springSecurityFilterChain;
private MockMvc mvc;
@Autowired
private UserDetailsService userDetailsService;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(authenticationController).setControllerAdvice(RestControllerExceptionHandler.class)
.apply(springSecurity(springSecurityFilterChain))
.build();
}
@Test
@WithUserDetails("admin")
public void shouldReturnCurrentUserWhenUserHaveLogin() throws Exception {
mvc.perform(get("/auth/me"))
.andDo(print());
}
这样会导致错误
org.springframework.web.util.NestedServletException: Request processing failed; nested
exception is java.lang.IllegalStateException: No primary or default constructor found for
interface org.springframework.security.core.userdetails.UserDetails
我试图解决这个问题,但是一切似乎都无法正常工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。