#spring #spring-boot #spring-security #enums #mockito
Вопрос:
Внутри аннотации @WithMockUser я хотел бы прочитать значения из постоянных перечислений или строковых переменных и списков.
Например, давайте предположим, что у меня есть перечисление, подобное следующему:
public enum RoleEnum {
ROLE_ADMIN
ROLE_MODERATOR,
ROLE_USER;
public static final String[] X_ROLE_GROUP = {ROLE_ADMIN.name(), ROLE_MODERATOR.name()};
}
Я хотел бы использовать @WithMockUser путем преобразования значений перечисления в строку, подобную этой, но следующий синтаксис не работает:
@WithMockUser(roles = RoleEnum.ROLE_ADMIN.name())
@Test
public void test {
...
}
Есть ли способ, которым я мог бы добиться этого для отдельных значений перечисления и списков перечислений, таких как X_ROLE_GROUP?
Ответ №1:
Ну, roles
приставка не нужна ROLE_
, пока authorities
есть. Значения аннотаций должны быть константами времени компиляции. Вы можете попробовать это:
@Test
@WithMockUser(roles = Role.ROLE_ADMIN)
void test() {
}
public static final class Role {
public static final String ROLE_ADMIN = "ADMIN";
public static final String ROLE_MODERATOR = "MODERATOR";
public static final String ROLE_USER = "USER";
private Role() {
}
public static final String[] X_ROLE_GROUP = {
ROLE_ADMIN,
ROLE_MODERATOR
};
}
Или, если вам нужен смешанный стиль (другие классы могут реализовать наследование констант), попробуйте:
public interface Role {
String ROLE_ADMIN = "ADMIN";
String ROLE_MODERATOR = "MODERATOR";
String ROLE_USER = "USER";
String[] X_ROLE_GROUP = {
ROLE_ADMIN,
ROLE_MODERATOR
};
}