Функция TestRestTemplate.withBasicAuth() не работает

80
17 апреля 2021, 12:10

Функция TestRestTemplate.withBasicAuth() не работает В настройках доступ ко всем ендпоинтам открыт. Переопределенная функция Spring Security loadUserByUsername() не срабатывает при вызове функции withBasicAuth(), хотя в конфиге UserDetailsServiceImpl я указывал её. Когда я пытаюсь получить текущего пользователя после withBasicAuth()

SecurityContextHolder.getContext().GetAuthentication().GetPrincipal().GetUsername()

я получаю anonUser.

// security config
@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
            .csrf().disable()
            .exceptionHandling().and()
            .anonymous().and()
            .servletApi().and()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "/**").permitAll()
            .antMatchers(HttpMethod.POST, "/**").permitAll()
            .anyRequest().authenticated();
    http.formLogin()
            .loginPage("/login")
            .loginProcessingUrl("/j_spring_security_check")
            .failureUrl("/login?error")
            .usernameParameter("j_email")
            .passwordParameter("j_password")
            .permitAll();
    http.logout()
            .permitAll()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login?logout")
            .invalidateHttpSession(true);
}
// code on server
// get user from db
private CUser getDBUser() {
    Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    String username;
    if (principal instanceof UserDetails) {
        username = ((UserDetails) principal).getUsername();
    } else {
        username = principal.toString();
    }
    System.out.println(username);
    CUser dbCUser = userService.findByEmail(username);
    return dbCUser;
}
// endpoint /cabinet/spring_test, login test
@GetMapping("/spring_test")
public ResponseEntity<Message> onSpringTest() {
    if (getDBUser() != null)
        return new ResponseEntity<>(new Message("/spring_test", "test success"), HttpStatus.OK);
    return new ResponseEntity<>(
            new Message("/spring_test",
                    "Unauthorized."),
            HttpStatus.UNAUTHORIZED);
}
// unit test on login
@Test
public void testLogin() {
    CUser user = new CUser(
            "vex788",
            passwordEncoder.encode("testvex"),
            UserRole.ADMIN,
            "testvex@mail.com",
            "0123456789",
            false,
            "123.45.67.89"
    );
    if (userService.addUser(user)) System.out.println("Admin added.");
    TestRestTemplate restTemplate = new TestRestTemplate();
    ResponseEntity<Message> result = restTemplate
            .withBasicAuth("testvex@mail.com", "testvex")
            .getForEntity("http://localhost:8080/cabinet/spring_test", Message.class);
    System.out.println(result.getBody().getMessage());
    Assert.assertEquals(HttpStatus.OK, result.getStatusCode());
}
READ ALSO
Как запретить нажатие клавиши Enter для кнопки?

Как запретить нажатие клавиши Enter для кнопки?

У меня есть некий "Кликер Монет"Но если нажать один раз на кнопку, то в будущем можно будет просто зажать клавишу Enter и счётчик монет будет...

89
Как отследить DevTools состояние?

Как отследить DevTools состояние?

Возможно ли по средствам JavaScript отследить что пользователь зашел на старицу с уже открытой панелью разработчика DevTools ? (не только для Chrome но и для...

80
Проверка браузера с помощью js

Проверка браузера с помощью js

Пишу программу-парсер на Java, но проблема в том, что у некоторых сайтов (как пример со списком прокси-серверов) перед входом на сайт есть скрипт...

103
Progress bar circle on js

Progress bar circle on js

Написал скрипт, для круглого прогресс бара с помощью SVG, на чистом jsНо не учел тот факт, что мне нужно еще и текст внутри этого круга сделать

100