Правильное перенаправление через vue -рутер и Spring MVC / Thymeleaf - PullRequest
0 голосов
/ 19 марта 2020

Я использую Spring Boot с Spring MVC на бэкэнде и Vue на фронтэнде. Также используйте форму, предоставленную Spring Sequrity в качестве формы входа. Он перенаправляет прямо на /posts. Вот WebSecurityConfig

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private final UserDetailsService userDetailsService;

    public WebSecurityConfig(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/css/**", "/js/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/","/login**", "/js/**","/error**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().defaultSuccessUrl("/posts",true)
                .and()
                .logout().logoutSuccessUrl("/login").permitAll().deleteCookies("JSESSIONID").invalidateHttpSession(true)
                .and()
                .csrf().disable();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider auth = new DaoAuthenticationProvider();
        auth.setUserDetailsService(userDetailsService);
        auth.setPasswordEncoder(passwordEncoder());
        return auth;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(authenticationProvider());
    }
}

Так как я правильно возвращаю представление для этого URL и использую Thymeleaf , чтобы сделать это, эта страница загружается правильно. Вот простое сопоставление для этого.

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

Проблема возникает при попытке перенаправить отсюда. Вот как выглядит мой самый простой список маршрутов, который передается в функцию конструктора VueRouter.

const routes = [
    { path: '/new-post', component: NewPost },
];

На /posts есть кнопка с to="/new-post" внутри. В режиме истории адрес превращается в /new-post, но содержимое страницы остается прежним.

<v-btn to="/new-post">Add post</v-btn>

Прямой доступ на /new-post воспроизводит ошибку 404 .

Другая странная вещь происходит при выходе из режима по умолчанию с ha sh. URL становится /posts# вместо /#/posts, как я ожидал. Соответственно с редиректом получается /posts#/new-post. В противном случае поведение остается прежним. Как мне кажется, где-то здесь кроется загадка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...