Вот мой метод управления:
@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
.