Весеннее тестирование при загрузке: защищенный пользователем контроллер безопасности при тестировании - PullRequest
0 голосов
/ 29 января 2019

Вот мой метод управления:

@PreAuthorize("principal == '" + EspaiDocConstants.BO_COMPONENT_APP + "'")
public void ingestAudits() {
    // Do something
}

Как вы можете видеть, он защищен с помощью @PreAuthorize("principal == '" + EspaiDocConstants.BO_COMPONENT_APP + "'")

Вот мой тестовый код:

@WithMockUser(username=EspaiDocConstants.BO_COMPONENT_APP)
@Test
public void test() throws IOException, NoSuchAlgorithmException {
    this.controller.ingestAudits();
}

Тем не менее, я получаю это сообщение об исключении:

DigestAuditsTest.test: 91 »AccessDenied Доступ запрещен

РЕДАКТИРОВАТЬ

Для заполнения принципала я использую пользовательский фильтр:

public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
    @Override
    protected void doFilterInternal(
        HttpServletRequest req,
        HttpServletResponse res,
        FilterChain chain
    ) throws IOException, ServletException {
        String user = Jwts.parser().setSigningKey(SECRET)
            .parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
            .getBody().getSubject();

        SecurityContextHolder.getContext()
            .setAuthentication(
                new UsernamePasswordAuthenticationToken(user, null)
            );

        chain.doFilter(req, res);
    }
}

Итак, principal является String содержащим пользователя.

Кроме того, ясейчас я не могу изменить этот код, и я хотел бы знать, как предоставить "String user" принципалу, используя @WithMockUser.

1 Ответ

0 голосов
/ 29 января 2019

Вы должны проверить только имя пользователя, а не весь основной объект, используя "==".

@ PreAuthorize ("Principal. username == '" + EspaiDocConstants.BO_COMPONENT_APP +"'")

...