Spring Security выдает ошибку при попытке выйти с сайта - PullRequest
0 голосов
/ 23 января 2020

Здравствуйте, я создаю веб-приложение, и я только что реализовал возможность входа и регистрации, теперь проблема выходит из системы ..

У меня есть кнопка, которая вызывает эту функцию для выхода из системы:

const logoutUser = () => {
        axios({
            url: API.logout,
            method: "POST",
            withCredentials: true,
            headers: {
                "X-CSRF-TOKEN": _csrf.token,
            },
        });
    };

И это моя конфигурация Spring Security:

@Override
    protected void configure(HttpSecurity http) throws Exception{
        http
                .authorizeRequests()
                .antMatchers("/api/getalltopics").permitAll()
                .antMatchers("/api/findtopicbycodename/**").permitAll()
                .antMatchers(HttpMethod.POST,"/api/createtopic").hasRole("ADMIN")
                .antMatchers("/me").permitAll()
                .antMatchers("/login", "/registeruser").permitAll()
                .antMatchers("/dologoutuser").permitAll()
                .antMatchers("/getcsrftoken").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .defaultSuccessUrl("http://192.168.1.105:3000/", true)
                .and()
                .logout()
                .logoutUrl("/dologoutuser")
                .deleteCookies("JSESSIONID");

        http.cors(withDefaults());
    }
    @Bean
    CorsConfigurationSource corsConfigurationSource(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowedOrigins(Arrays.asList("http://192.168.1.105:3000"));
        corsConfiguration.setAllowedMethods(Arrays.asList("POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/dologoutuser", corsConfiguration);
        return source;
    }

(Да, я знаю, вы можете поместить несколько ссылок в один .antMatchers, этот код в настоящее время обрабатывается)

Теперь, когда я нажимаю кнопку выхода из системы, в моей консоли появляются 3 ошибки:

1. OPTIONS http://192.168.1.105:8080/login?logout 403

2. Access to XMLHttpRequest at 'http://192.168.1.105:8080/login?logout' (redirected from 'http://192.168.1.105:3000/dologoutuser') from origin 'http://192.168.1.105:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

3. Uncaught (in promise) Error: Network Error at createError (createError.js:16) at XMLHttpRequest.handleError (xhr.js:81)

Кроме того, если я обновлю sh страницу с помощью клавиши F5 после нажатия кнопки выхода из системы, она фактически выводит меня из системы, но, очевидно, я что-то здесь не так делаю. Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Узнал ответ ...

Выход был успешным, и он перенаправлял меня на какой-то случайный URL, который фактически был запрещен Spring Security. Чтобы это исправить, я просто добавил URL-адрес успешного выхода из системы, и теперь все работает без сбоев.

http.logoutSuccessUrl("http://192.168.1.105:3000/")

0 голосов
/ 23 января 2020

Вы настроили ваши cors допустили происхождение неправильно. Вы должны добавить 192.168.1.105 (или хост, на котором размещено ваше приложение reactjs) в качестве разрешенного источника, а не / dologoutuser

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