после успешной аутентификации я сохраняю аутентифицированного пользователя в течение сеанса.
После этого я получаю пользователя в любом контроллере с помощью @SessionAttributes ("user")
Теперь я пытаюсь проверить это:
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = SpringSecurityTestConfig.class
)
public class ProfileMetaDataControllerTest {
private MockMvc mockMvc;
@Autowired
private MyController myController;
@Autowired
private WebApplicationContext context;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(myController).build();
}
@Test
@WithUserDetails("userMail@hotmail.com")
public void shouldReturnDefaultMessage() throws Exception {
String expectedValue ="greeting";
MvcResult result = this.mockMvc.perform(get("/contentUrl")
.contentType(MediaType.TEXT_PLAIN)
.content("romakapt@gmx.de"))
.andDo(print())
.andExpect(content().string(expectedValue))
.andReturn();
}
}
И мой контроллер, который будет проверен:
@RestController
@RequestMapping("/profile")
@SessionAttributes("user")
public class ProfileMetaDataController {
@GetMapping("/contentUrl")
@ResponseBody
public List<String> getInformation(Model model) throws IOException {
User user = Optional.ofNullable((User) model.asMap().get("user")); //User ist null!!!!
}
}
Пользователь имеет значение null, потому что мой AuthenticationSuccessHandler никогда не вызывает метод onAuthenticationSuccess, где я храню пользователя в сеансе.
Как я могу справиться с этим?
обычно UsernamePasswordAuthenticationFilter вызывает мой AuthenticationSuccessHandler, но не во время теста MockMVC.