2014-11-21 2 views
1

У меня есть конфигурацияSpring Security не позволяет Resouce

http.csrf().disable(); 
    http.authorizeRequests() 
        .antMatchers("/**").authenticated() 
        .antMatchers("/shutdown").permitAll() 
        .and().formLogin().passwordParameter("password").usernameParameter("username") 
        .and().formLogin().loginPage("/authentication.html").permitAll() 
        .and().formLogin().loginProcessingUrl("/login") 
        .and().formLogin().failureUrl("/authentication.html") 
        .and().formLogin().defaultSuccessUrl("/",false); 

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

/shutdown - Завершение крюка весеннего сапога.

+0

и означает «аутентификация работает отлично»? – OhadR

+0

Да, извините. Я имею в виду проверку подлинности –

+0

, я вижу, что @Serge уже дал вам правильный ответ, который я хотел написать ... – OhadR

ответ

4

Как уже упоминалось, «/ **» означает любой запрос и будет использоваться только первый образец, который будет согласован. Следует отметить, что вы можете немного почистить конфигурацию. См очистителя версию ниже:

http 
    .csrf().disable() 
    .authorizeRequests() 
     .antMatchers("/shutdown").permitAll() 
     .anyRequest().authenticated() 
     .and() 
    .formLogin() 
     .loginPage("/authentication.html") 
     .loginProcessingUrl("/login") 
     .failureUrl("/authentication.html") 
     .permitAll(); 

изюминок изменений:

  • Вы не должны когда-нибудь понадобится, чтобы набрать HTTP дважды. Вы можете сделать это, конечно, но это не требуется, и это не позволяет вам печатать
  • .antMatchers ("/ **") имеет псевдоним .anyRequest(), который читает намного приятнее
  • при указании свойств для. formLogin() вам нужно только указать .formLogin() один раз. Например, http, вы можете указать его несколько раз, но это гораздо более краткий, чем это делать
  • defaultSuccessUrl не нуждается в ложном параметре (это эквивалентно опусканию параметра все вместе). Например, вместо .defaultSuccessUrl ("/", false) вы можете указать .defaultSuccessUrl ("/"). Кроме того, значение по умолчанию для .defaultSuccessUrl уже «/». Это означает, что вы можете удалить все это вместе.
  • Вы заметите, что я следую за точное форматирование для JavaConfig, изложенной в this blog
+0

Благодарим вас за подробный ответ! Является ли эта конфигурация применимой только к весеннему ботинку, или я могу использовать ее весной без весеннего ботинка? –

+1

Это относится как к Spring Boot, так и к Spring Security без Spring Boot. –

0

Это нормально. Spring пробует шаблоны последовательно и останавливается в первом совпадении. Поскольку ваш первый шаблон равен /**, он ловит все и последующие шаблоны даже не анализируются. Вы всегда должны ставить этот заголовок как последний образец:

http.csrf().disable(); 
    http.authorizeRequests() 
        .antMatchers("/shutdown").permitAll() 
        .antMatchers("/**").authenticated() 
        .and().formLogin().passwordParameter("password").usernameParameter("username") 
        .and().formLogin().loginPage("/authentication.html").permitAll() 
        .and().formLogin().loginProcessingUrl("/login") 
        .and().formLogin().failureUrl("/authentication.html") 
        .and().formLogin().defaultSuccessUrl("/",false); 
1

Это намеренно спроектировано таким образом. См. Руководство по загрузке весны Actuator endpoints description. И по уважительной причине. Плохая идея - оставить защитный крюк открытым без какой-либо защиты. Любой, кто знает URL, может закрыть ваше приложение.

+0

Я согласен с вами. В моем случае это касается только проблем развития, и он скоро будет отключен. –

Смежные вопросы