Как правильно добавить фронт к spring boot rest api?

Разработал API. Запросы к конкретным ресурсам:
/api/auth/register
/api/auth/verify
/api/auth/login
/api/users
/api/users/{id}/shelves
/api/shelves/{id}/books
/api/books/{id}/wish
и т.д.

обрабатывают rest-контроллеры.

Запросы идут на localhost:8080/api (данные принимаются и отдаются в JSON). После успешного входа выдаётся JWT, который должен использоваться в запросах к другим rest-контроллерам ("/api/users", "/api/shelves" и пр.).
На всех контроллерах, кроме Auth, требуется JWT.

Сейчас я решил добавить фронт. Думаю реализовать это в виде SPA на Vue.js
Что сделал: в папку /resources/templates положил index.html, в /resources/static положил /css/main.css и /js/main.js.
Добавил обычный контроллер:
@Controller
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "index";
    }
}

Главная страница (localhost:8080) загрузилась, но JS и стили — нет (401 ошибка). Как я понял, это связано с настройками WebSecurityConfig.
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().and().cors().and().csrf().disable()
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests().antMatchers("/api/auth/*").permitAll()
                .antMatchers("/", "/resources/**").permitAll()
                .anyRequest().authenticated();

        http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
    }

Пожалуйста, помогите разобраться, что нужно поменять, чтобы ресурсы начали грузиться?
Как вообще работает настройка доступа? Важен ли порядок? Где об этом написано доступным языком?
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
статика должна отдаватсья напрямую, не проходить через бекенд и тем более через фаерволл
Я не знаю, как в джава сервер статику отдает и принято ли за Nginx ставить бекенд, но это надо сделать

https://www.baeldung.com/spring-mvc-static-resources

Как вариант: за спрингом оставить севрер с АПИ, а сервер со статикой (в том числе фронтовый index.html) отдавать др сервером с Nginx, ну или сделать как выше посоветовал... быстрее и удобнее наверное так
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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