По традиционным причинам я должен использовать Vaadin 8.6.3
.
У меня есть простая индексная страница с меню с тремя элементами (home
, user
, admin
) иПриветственное сообщение.
Я отображаю эту индексную страницу на /
и хочу, чтобы она была доступна для неаутентифицированных пользователей.опция меню home
ссылается на эту страницу.
user
и admin
ссылаются на страницы, которые еще не существуют, но должны быть защищены загрузкой Spring.
Это мое (только пока) Конфигурация WebSecurity:
import org.springframework.context.annotation.Configuration
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.builders.WebSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
@Configuration
@EnableWebSecurity
class AnyRequestConfiguration : WebSecurityConfigurerAdapter(){
override fun configure(http: HttpSecurity) {
http
.csrf().disable() //vaadin has its own csrf protection, therefore this must be disabled
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
}
override fun configure(web: WebSecurity){
web
.ignoring().antMatchers(
"/VAADIN/**",
"/frontend/**",
"/webjars/**",
"/images/**",
"/frontend-es5/**", "/frontend-es6/**"
)
}
}
Страница отображается, отображается меню и приветственное сообщение, но соединение немедленно теряется, и я получаю сервер
соединение прервано, попытка восстановить сообщение
в правом верхнем углу страницы с вращающимся кругом загрузки.
Почему?Как мне заставить это работать?
Страница указателя:
import com.vaadin.annotations.Theme
import com.vaadin.server.VaadinRequest
import com.vaadin.spring.annotation.SpringUI
import com.vaadin.ui.Label
import com.vaadin.ui.MenuBar
import com.vaadin.ui.UI
import com.vaadin.ui.VerticalLayout
@SpringUI(path = "/")
@Theme("mytheme")
class Index : UI() {
companion object {
const val HOME_MENU = "Home"
const val USER_MENU = "User"
const val ADMIN_MENU = "Admin"
lateinit var navigation: MenuBar
private set
}
private lateinit var layout: VerticalLayout
override fun init(request: VaadinRequest?) {
layout = VerticalLayout()
//navigation bar
navigation = MenuBar()
navigation.id = "menubar"
navigation.addItem(HOME_MENU)
navigation.addItem(USER_MENU)
navigation.addItem(ADMIN_MENU)
//TODO: add onClick-listeners
//welcome message
val welcomeMessage = Label()
welcomeMessage.id = "label.welcome"
welcomeMessage.value = "Welcome to Spring Security Demo with Vaadin"
layout.addComponents(
navigation,
welcomeMessage
)
this.content = layout
}
}
Обновление
Devconsole показывает ошибку
com.vaadin.DefaultWidgetSet-0.js: 6129 POST http://localhost:8080/vaadinServlet/UIDL/?v-uiId=0 403
с предупреждением
com.vaadin.DefaultWidgetSet-0.js: 6421 ср. 08 мая 12:19:17 GMT + 200 2019 com.vaadin.client.communication.DefaultConnectionStateHandler ПРЕДУПРЕЖДЕНИЕ. Сервер вернул 403 для xhr
, после чего он делает еще одну попытку
Ср 08 мая 12:20:33 GMT + 200 2019 com.vaadin.client.communication.DefaultConnectionStateHandler
ИНФОРМАЦИЯ: попытка переподключения 49 для XHR
com.vaadin.DefaultWidgetSet-0.js: 6421 Ср. 08 мая 12:20:38 GMT + 200 2019 com.vaadin.client.communication.DefaultConnectionStateHandler
INFO: повторная отправка последнего сообщения на сервер ...
com.vaadin.DefaultWidgetSet-0.js: 6421 ср. 08 мая 12:20:38 GMT + 200 2019 com.vaadin.client.communication.XhrConnection
ИНФОРМАЦИЯ: Sокончание xhr сообщения серверу: {"csrfToken": "24cb59a1-cd65-4774-b208-c7272314e8a7", "rpc": [["0", "com.vaadin.shared.ui.ui.UIServerRpc", "resize", [1478,698,1478,698]]], "syncId": 0, "clientId": 0, "wsver": "8.6.3"}
, что также не выполняется, поэтомукруг повторяется.