Приложение загрузки Spring не может получить доступ к пути отдыха - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь настроить правила для весенней загрузки, чтобы разрешить / запретить доступ для определенных путей.Я посмотрел различные примеры и вопрос переполнения стека, но ни один не помог.Я создал файл конфигурации следующим образом:

package xyz.blackmonster.window.configs;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@EnableWebSecurity
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${admin.console.username:admin}")
    private String username;

    @Value("${admin.console.password:admin}")
    private String password;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser(username)
            .password(passwordEncoder().encode(password)).roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/assets/**", "/api/order/calculate", "/api/order/**").permitAll()
                .antMatchers("/admin/**").hasRole("ADMIN")
            .and()
            .formLogin()
            .loginPage("/login.html")
            .defaultSuccessUrl("/admin/orders.html")
            .failureUrl("/login.html?error=true")
            .and()
            .logout().logoutSuccessUrl("/");
    }

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

Я могу получить доступ к "/" без проблем.Страница загружается и отображается с помощью контроллера MVC.Но пути, которые я определил как конечные точки REST, я не могу получить к ним доступ.Я получаю ответ 403:

{"отметка времени": "2018-10-08T19: 22: 04.963 + 0000", "статус": 403, "ошибка": "Запрещено", "сообщение ":" Запрещено "," путь ":" / api / заказ / рассчитать "}

Что не так с моей конфигурацией?Как вы можете видеть из класса, я даже пошел еще дальше и специально установил конечную точку вычисления вместо того, чтобы иметь **, чтобы включить все подпути.

1 Ответ

0 голосов
/ 08 октября 2018

Если «/» работает, а «/ api / order / calc» - нет, это означает, что у них разные HTTP-глаголы.

"/" - is a GET request
"/api/order/calculate" - is a POST request

По умолчанию пружинная защита включает защиту csrf (только для POST, потому что GET считается безопасным).Если вы получаете 403, это означает, что вы не отправляете заголовок csrf => ваш доступ запрещен.

Вы сказали, что это конечная точка REST, поэтому вы должны отключить csrf для этой конечной точки.Для этого обновите свою конфигурацию:

1.disable csrf в целом (не рекомендуется, если у вас есть веб-формы)

http.csrf()
     .disable();

2.Если вам нужно игнорировать csrf только дляконкретные конечные точки, вы можете добавить:

http.csrf()
    .ignoringAntMatchers("/api/order/calculate")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...