Задать вопрос
@Nulltiton

Почему кастовом запросе к БД возвращается 403 в Spring?

В приложении есть станица с пользователями. Написал метод, в котором идет редирект на индекс:
@GetMapping({"/index", "/", ""})
    public String showMainPage(Model model)
    {
        //model.addAttribute("users", userService.getUsers());
        return "users/index";
    }

Если закомментировать вывод данных, то шаблон загружается нормально, если загружаются данные, то получаю 403 ошибку. Все термиты и авторитет прописаны верно (с другой формы загружал часть этой информации), связи между таблицами тоже рабочие. В сервисе метод выглядит следующим образом:
public List<User> getUsers()  {
        return userRepository.getAllUsers();
    }

В userRepository пишу кастомные запрос (пробовал findAll - ошибка та же):
@Modifying
    @Query(
            "SELECT u.id, u.username, u.password, u.email," +
                    "u.email, u.enabled, uf.birthDate, uf.firstName," +
                    "uf.middleName, uf.lastName, uf.phoneNumber, uf.licenseNumber," +
                    "uf.licenseSeries, o.name, u.authorities "+
                    "FROM User u," +
                    "UserInfo uf," +
                    "Organization o " +
                    "WHERE u.userInfo = uf.user " +
                    "AND u.organization.id = o.id"
    )
    List<User> getAllUsers();


Связи у user:
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @JoinColumn(name = "organization_id")
    private Organization organization;

    @OneToOne(mappedBy = "user")
    private UserInfo userInfo;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "user_id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id")}
    )
    private Set<Role> authorities = Collections.emptySet();

Связи у userInfo:
@OneToOne(optional = false)
    @JoinColumn(name = "user_id", insertable = false, updatable = false, unique = true)
    private User user;

Связи у организации:
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

Подскажите, в чем может быть дело? Куда приблизительно копать?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
emekhanikov
@emekhanikov
Разработчик и архитектор программного обеспечения
403 значит что пользователь не авторизован
Вероятно, в userService настроена проверка по ролям и от того при вызове методов из userService происходит ошибка
Ответ написан
@Nulltiton Автор вопроса
Оказывается дело было в том, что spring Security требует префикс ROLE_ перед каждой ролью
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы