Springsecurity после использования @withmockuser The SecurityContextholder.getContext (). GetAuthentication () NULL в MoJAVA

Программисты JAVA общаются здесь
Anonymous
Springsecurity после использования @withmockuser The SecurityContextholder.getContext (). GetAuthentication () NULL в Mo

Сообщение Anonymous »

Я пытаюсь проверить свои контроллеры в рамках безопасности через @webmvctest и @springboottest , и я замечаю, что в аннотации @withmockuser Authentication введен в SecurityContextholder , но когда запрос и впрыгнут в My -Fipter, в BrE -nekred in 403. /> Я написал только для тестирования своей пользовательской аннотации: < /p>

Код: Выделить всё

public class WithMockCustomUserSecurityContextFactory
implements WithSecurityContextFactory {

private UserDetailsService userDetailsService;
@Autowired
public WithMockCustomUserSecurityContextFactory(UserDetailsService userDetailsService) {
this.userDetailsService = userDetailsService;
}
@Override
public SecurityContext createSecurityContext(WithMockUser customUser) {
var context = SecurityContextHolder.createEmptyContext();

var principal = userDetailsService.loadUserByUsername(customUser.username());
var authentication = new UsernamePasswordAuthenticationToken(principal, principal.getPassword(), principal.getAuthorities());
context.setAuthentication(authentication);
return context;
}
}

@Retention(RetentionPolicy.RUNTIME)
@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class)
public @interface WithMockUser {

String username() default "username";

String password() default "password";
}
< /code>
После выхода из этого установлен аутентификация в держателе контекста, но когда тогда запрос запускается в тесте: < /p>
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class BookControllerIntegrationTest {
@Test
@DisplayName("GIVEN a valid BookRequest WHEN createBook THEN a valid BookResponse is returned")
@WithMockUser
void createBookCreated() throws Exception {
var bookRequest = new BookRequest();
bookRequest.setBookType(BookType.NEW_RELEASE);
bookRequest.setAuthor("Author");
bookRequest.setIsbn("1");
bookRequest.setTitle("title");
bookRequest.setBasePrice(15.4);

HttpEntity entity = new HttpEntity(jacksonObjectMapper.writeValueAsString(bookRequest), headers);

ResponseEntity response = restTemplate.exchange(createURLWithPort("/books"), HttpMethod.POST, entity,
BookResponse.class);
Assertions.assertEquals(HttpStatus.CREATED, response.getStatusCode());
}
...
< /code>
Когда я останавливаюсь с отладчиком в моем фильтре: < /p>
    @Override
protected void doFilterInternal(@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain)
throws ServletException, IOException {
var authHeader = request.getHeader("Authorization");

if (authHeader == null || !authHeader.startsWith("Bearer ")) {
filterChain.doFilter(request, response);
return;
}

var token = authHeader.substring(7);

if (jwtUtil.validateToken(token)) {
String username = jwtUtil.extractUsername(token);
UserDetails userDetails = userDetailsService.loadUserByUsername(username);

UsernamePasswordAuthenticationToken authToken =
new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities()
);
authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authToken);
}
filterChain.doFilter(request, response);
}
, где я не касаюсь ответа Аутентификацию в SecurityContextholder Является ли nul>

Подробнее здесь: https://stackoverflow.com/questions/795 ... getcontext

Вернуться в «JAVA»