Как разрешить все перенаправления HTTP в безопасности загрузки Java Spring?

Я пишу приложение Java Spring Boot, которое включает в себя Spring Boot Security в моем pom.xml. Однако, это работает, когда я перенаправляю из логина в мой /home . Хотя, когда я снова меняю страницу или делаю простой вызов ajax, я получаю сообщение об ошибке 403. Я считаю, что это связано с безопасностью и тем, что страница не имеет надлежащего доступа. Я ищу лучший способ решить эту проблему с сохранением безопасности.

Безопасность Java:

    @Override
      protected void configure(HttpSecurity http) throws Exception {
        http
          .authorizeRequests()
            .anyRequest().fullyAuthenticated()
            .and()
          .formLogin()
          .successHandler(new CustomAuthenticationSuccessHandler())                 // On authentication success custom handler    
          .and()
          .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");


    }

Обработчик успеха Java:

@Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) throws IOException, ServletException {
        String principal = authentication.getName();

        System.out.println("Successful login: principal " + principal);
        ADID = principal;
        response.sendRedirect("/dashboard");

    }

Ошибка в контроллере:

Error 403 : http://localhost:8080/edit/ajax/doesSomething

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

Всего 3 ответа


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


Попробуй это ...

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

или отключите CSRF как быстрое решение.

http.csrf().disable();

Добавьте это в безопасности Java. Это разрешит запросы к любой конечной точке или указанным:

`   
   @Override
   public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/**").antMatchers("/example/endpoint");
    }
`

И вы также можете сохранить свой

protected void configure(HttpSecurity http) throws Exception

Есть идеи?

10000