package com.morevaadin.vaadin7.springsecurity;
/*
* #%L
* Vaadin 7 Spring Security Integration
* %%
* Copyright (C) 2012 Nicolas Frankel
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import static com.vaadin.ui.Notification.TYPE_ERROR_MESSAGE;
import org.springframework.security.authentication.BadCredentialsException;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.morevaadin.vaadin7.springsecurity.event.LoginEvent;
import com.morevaadin.vaadin7.springsecurity.event.LogoutEvent;
import com.morevaadin.vaadin7.springsecurity.service.AuthenticationService;
import com.morevaadin.vaadin7.springsecurity.ui.LoginView;
import com.morevaadin.vaadin7.springsecurity.ui.MainView;
import com.morevaadin.vaadin7.springsecurity.util.RequestHolder;
import com.morevaadin.vaadin7.springsecurity.util.ViewChangeSecurityChecker;
import com.vaadin.navigator.Navigator;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.UI;
@SuppressWarnings("serial")
public class SecuredRoot extends UI {
private static final String MAIN_VIEW_NAME = "main";
private static final String LOGIN_VIEW_NAME = "login";
private EventBus bus = new EventBus();
private Navigator navigator;
@Override
protected void init(VaadinRequest wrappedRequest) {
getPage().setTitle("Vaadin Spring Security integration example");
Panel viewDisplay = new Panel();
setContent(viewDisplay);
navigator = new Navigator(this, viewDisplay);
navigator.addViewChangeListener(new ViewChangeSecurityChecker());
navigator.addView(LOGIN_VIEW_NAME, new LoginView(bus));
navigator.addView(MAIN_VIEW_NAME, new MainView(bus));
navigator.navigateTo(LOGIN_VIEW_NAME);
bus.register(this);
}
@Subscribe
public void login(LoginEvent event) {
AuthenticationService authHandler = new AuthenticationService();
try {
authHandler.handleAuthentication(event.getLogin(), event.getPassword(), RequestHolder.getRequest());
navigator.navigateTo(MAIN_VIEW_NAME);
} catch (BadCredentialsException e) {
Notification.show("Bad credentials", TYPE_ERROR_MESSAGE);
}
}
@Subscribe
public void logout(LogoutEvent event) {
AuthenticationService authHandler = new AuthenticationService();
authHandler.handleLogout(RequestHolder.getRequest());
navigator.navigateTo(LOGIN_VIEW_NAME);
}
}