«status»: 403, «error»: «Forbidden», «message»: «Forbidden», «path»: «/ post / create» - PullRequest
0 голосов
/ 04 июля 2018

Я вижу этот ответ, когда пытаюсь добавить новое сообщение после авторизации администратором.

У меня есть базовая авторизация, основанная на безопасности весенней загрузки:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    //...declared fields
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .passwordEncoder(passwordEncoder())
                .withUser("user")
                .password("userpass")
                .roles("USER")
                .and()
                .withUser("admin")
                .password("adminpass")
                .roles("ADMIN", "USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login").permitAll()
                .antMatchers("/logout").permitAll()
                .anyRequest().authenticated()
                .and()
                .httpBasic()
                .and().logout().permitAll()
                .and()
                .formLogin()
                .loginProcessingUrl("/login")
                .permitAll()
                .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login");
    }

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

Я получаю это сообщение при попытке добавить новое сообщение после авторизации:

{
    "timestamp": "2018-07-04T12:19:25.638+0000",
    "status": 403,
    "error": "Forbidden",
    "message": "Forbidden",
    "path": "/post/create"
}

в моем контроллере:

@RestController
public class PostController {
    @Autowired
    private PostDAO postDAO;

    @GetMapping("/posts")
    public Page<Post> getAllPosts(Pageable pageable) {
        return postDAO.findAll(pageable);
    }

    @PostMapping("/post/create")
    public Post createPost(@Valid @RequestBody Post post) {
        return postDAO.save(post);
    }
    //other end-points........
}

Однако операции чтения с моего контроллера работают хорошо, но к операции CRUD у меня нет доступа.

Есть мои зависимости:

dependencies {
    compile ('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.hibernate:hibernate-core')
    compile('org.springframework.boot:spring-boot-starter-security')
    runtime('mysql:mysql-connector-java')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.springframework.security:spring-security-test')
    testCompile('junit:junit')
}

Есть идеи? Заранее спасибо!

1 Ответ

0 голосов
/ 05 июля 2018

Это связано с включением CSRF. CSRF защита включена по умолчанию в конфигурации Java. Мы все еще можем отключить CSRF, используя приведенную ниже конфигурацию.

http .csrf().disable() .authorizeRequests() .anyRequest().permitAll(); 

Начиная с Spring Безопасность 4.x - защита CSRF включена по умолчанию и в конфигурации XML; мы, конечно, можем отключить его, если нам нужно:

<http>
    ...
    <csrf disabled="true"/>
</http>

Примечание. CSRF - это атака, которая заставляет конечного пользователя выполнять нежелательные действия. действия в веб-приложении, в котором в настоящий момент выполняется проверка подлинности.

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