Интегрируйте безопасность пружинного стартера с Vaadin 7

1

Я пытаюсь интегрировать Spring Security с Vaadin Spring (https://vaadin.com/wiki / -/wiki/Main/Vaadin+Spring).

Мой класс приложений просто запускает приложение Spring

https://gist.github.com/anonymous/c047030c61b90c02d1ef

Я создал класс, который расширяет WebSecurityConfigurerAdapter

https://gist.github.com/anonymous/0e905d0627adf5e2dc39

pom.xml включает в себя зависимость spring-boot-starter-security

Когда я набираю localhost: 8080, он перенаправляет меня на URL-адрес входа (http://localhost: 8080/login), предоставленный Spring Security. Я вхожу в имя пользователя/пароль (пользователь/пароль), и я получаю эту ошибку.

java.lang.NullPointerException: null в com.vaadin.server.LegacyCommunicationManager.getClientCache(LegacyCommunicationManager.java:194)

(полный выход журнала на https://gist.github.com/anonymous/b4be702762b5bc744c66).

Я попытался добавить в ApplicationSecurity переопределенный метод "Конфигурация (HttpSecurity http)", основанный на примерах, которые я нашел в Интернете, но это дает мне больше ошибок, так как это не приводит меня к странице /login вообще.

Теги:
spring-boot
spring-security
vaadin
vaadin7

1 ответ

2

Я полагаю, что это может иметь какое-то отношение к тому факту, что не все функции поддерживаются в текущей бета-версии, как утверждает Генри Сара:

Vaadin Spring является официальным дополнением (переход от альфы к бетам на данный момент с некоторыми изменениями API), который включает основные функции Vaadin4Spring.

Части Vaadin4Spring, которые не охвачены текущей версией Vaadin Spring (шина событий, поддержка Spring Security,...), будут преобразованы для использования Vaadin Spring через некоторое время после бета-версии. Дополнительные функциональные возможности могут перейти к официальному дополнению в будущих версиях.

В любом случае, из любопытства относительно весенней безопасности (пока не использовал его). Я провел несколько исследований с Вадином 7.4.3. Я установил корневой журнал на отладку, добавил несколько контрольных точек (UIInitHandler: 148) и заметил следующее:

  • исходный запрос корректно обрабатывается UIInitHandler и создается соответствующий экземпляр соответствующего пользовательского интерфейса
  • сразу после той же точки останова @UIInitHandler:148 запускается для пути/ошибки, и обработчик не может разрешить пользовательский интерфейс, потому что, скорее всего, у вас его нет. Это также заставило меня думать, что исключение может быть брошено, но скрыто где-то там
  • глядя на журналы, я увидел много Invalid CSRF token found for http://localhost:8080/login?v-1429092013868

Поэтому я немного изменил метод ApplicationSecurity.configure(HttpSecurity http) на http.csrf().disable().authorizeRequests().anyRequest().permitAll(); и я смог перейти на второй экран. Теперь это может быть не так безопасно от того, что я собрал, но это должно дать вам отправную точку.

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

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().
            exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")).accessDeniedPage("/accessDenied")
            .and().authorizeRequests()
            .antMatchers("/VAADIN/**", "/PUSH/**", "/UIDL/**","/login", "/login/**", "/error/**", "/accessDenied/**").permitAll()
            .antMatchers("/authorized", "/**").fullyAuthenticated();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню