Почтальон 403 Запрещенное сообщение

Я сделал несколько api с REST Spring. Запрос GET отлично работает в Postman, но когда я пытаюсь выполнить запрос POST, я получаю эту ошибку:

{
    "timestamp": "2018-09-25T06:39:27.226+0000",
    "status": 403,
    "error": "Forbidden",
    "message": "Forbidden",
    "path": "/cidashboard/projects"
}

Это мой контроллер:

@RestController
@RequestMapping(ProjectController.PROJECT_URL)
public class ProjectController {

    public static final String PROJECT_URL = "/cidashboard/projects";

    private final ProjectService projectService;

    public ProjectController(ProjectService projectService) {
        this.projectService = projectService;
    }

    @GetMapping
    List<Project> getAllProjects(){
        return projectService.findAllProjects();
    }

    @GetMapping("/{id}")
    Project getProjectById(@PathVariable int id) {
        return projectService.findProjectById(id);
    }

    @PostMapping
    void addProject(@RequestBody Project newProject) {
        projectService.saveProject(newProject);
    }
}

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

@EnableGlobalMethodSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/css/**").permitAll();
//                .anyRequest().fullyAuthenticated();
//                .and()
//                .formLogin().loginPage("/login").permitAll()
//                .failureUrl("/login-error");
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .ldapAuthentication()
                .userDnPatterns("uid = {0},ou=people")
                .groupSearchBase("ou=groups")
                .contextSource(contextSource())
                .passwordCompare()
                //.passwordEncoder(new LdapShaPasswordEncoder())
                .passwordAttribute("userPassword");
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
                .ignoring()
                .antMatchers("/resources/static/**"); // #3
    }

    @Bean
    public DefaultSpringSecurityContextSource contextSource() {
        return new DefaultSpringSecurityContextSource(Arrays.asList("ldap://localhost:8389/"), "dc=springframework,dc=org");
    }
}

Можете ли вы добавить код класса конфигурации безопасности?

drowny 25.09.2018 09:20

Позвольте предположить, что вы не включаете токен CSRF в свой почтовый запрос.

M. Deinum 25.09.2018 09:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
27 855
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Включить весеннюю безопасность с использованием @EnableWebSecurity. По умолчанию включает поддержку csrf, вы должны отключить ее, чтобы предотвратить запрещенные ошибки.

@Override
protected void configure(HttpSecurity http) throws Exception {
     http       //other configure params.
         .csrf().disable();
}

PS: 415 неподдерживаемый тип -> добавьте в ваше сопоставление, как эту аннотацию, тип данных, отправляемых почтальоном.

@PostMapping(consumes = "application/json")
void addProject(@RequestBody Project newProject) {
    projectService.saveProject(newProject);
}

Я добавил и теперь получаю эту ошибку: 415 Unsupported Media Type

abc 25.09.2018 09:28

Так что на самом деле ваш совет - сделать приложение менее безопасным только для тестирования ...

M. Deinum 25.09.2018 09:30

Неподдерживаемый тип мультимедиа для вашего типа отправки. Какой тип отправляет от почтальона JSON или whatelse?

drowny 25.09.2018 09:33

@ M.Deinum Но он проигнорировал csrf, это означает, что ему не нужен этот токен. если он использовал, поддержка csrf по умолчанию. это означает, что он не хочет использовать токен csrf.

drowny 25.09.2018 09:34

Это предположение. Тот факт, что он проигнорировал токен csrf, вполне мог быть связан с тем, что он не знал, что защита csrf включена по умолчанию. Тем не менее, давать советы сделать приложение менее безопасным - всегда плохой ответ (imho, что так).

M. Deinum 25.09.2018 09:36

Предположения, но я считаю верными. Конечно, он может узнать об использовании csrf. Я сказал только, как предотвратить эту проблему. Я уважаю ваше мнение, но не думаю, что этот голос полностью верен. Но спасибо за ваши предложения и мнения.

drowny 25.09.2018 09:39

Drowny, @Consumes нужна особая зависимость?

abc 25.09.2018 09:59

Я добавил в свой пост новую конфигурацию на PostMapping. Можно использовать @PostMapping(consumes = "application/json")

drowny 25.09.2018 12:43

Я получаю это org.springframework.security.web.firewall.RequestRejectedExc‌ eption: Запрос был отклонен, поскольку URL-адрес не был нормализован.

abc 25.09.2018 14:02

Наконец-то это сработало. У меня ошибка в базе данных. Но работайте только с .csrf (). Disable (), и мне не нужно было ставить @Consumes (MediaType.APPLICATION_JSON_VALUE). Большое спасибо!!! :)

abc 25.09.2018 14:17

Другие вопросы по теме