Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2019, 19:15   #1
AntonCH
Пользователь
 
Регистрация: 28.11.2017
Сообщений: 58
По умолчанию Spring security и vaadin

Как настроить доступ для разных ролей к разным страницам?
Код:
   http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/vaadinServlet/*", "/vaadinServlet/**", "/VAADIN/**", "/UIDL**", "/login/UIDL**", "/togglz-console**", "/login/**", "/rest/api/**", "/login/process").permitAll()
				.anyRequest().authenticated()
				//.antMatchers("#!Users").hasRole("ROLE_ADMIN")
				.and()
            .formLogin()
                	.loginPage("/login/")
                	.failureUrl("/login/?status=failed")
                	.loginProcessingUrl("/login/process")
                	.defaultSuccessUrl("/")
                .permitAll()
                .and()
             .logout()
             	.logoutUrl(LOGOUT_URL)
             	.logoutSuccessUrl("/login")
             	.permitAll()
             	.and()
             .rememberMe()
             	.key("secretKeykey123!#@")
             	.tokenValiditySeconds(2592000);
В частности к следующей странице доступ должен иметь только админ
Код:
package com.it.bo.server.views;


import com.it.bo.server.controllers.MainViewController;
import com.it.server.SecurityConfig;
import com.vaadin.server.FontAwesome;
import com.vaadin.server.ThemeResource;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;

/**
 * A responsive menu component providing user information and the controls for
 * primary navigation between the views.
 */
public final class AdminMenu extends CustomComponent {

	private static final long serialVersionUID = 3531006337900409016L;
	
	private MainViewController eventsHandler;
	
	
	public static final String ID = "dashboard-menu";
    public static final String NOTIFICATIONS_BADGE_ID = "dashboard-menu-notifications-badge";
    private static final String STYLE_VISIBLE = "valo-menu-visible";

    public AdminMenu(MainViewController eventsHandler) {
    	this.eventsHandler = eventsHandler;
        setPrimaryStyleName("valo-menu");
        setId(ID);
        setSizeUndefined();

        setCompositionRoot(buildContent());
    }
    
    

    private Component buildContent() {
        final CssLayout menuContent = new CssLayout();
        menuContent.addStyleName("sidebar");
        menuContent.addStyleName(ValoTheme.MENU_PART);
        menuContent.addStyleName("no-vertical-drag-hints");
        menuContent.addStyleName("no-horizontal-drag-hints");
        menuContent.setWidth(null);
        menuContent.setHeight("100%");

        menuContent.addComponent(buildTitle());
        menuContent.addComponent(buildUserMenu());
        menuContent.addComponent(buildToggleButton());
        menuContent.addComponent(buildMenuItems());

        return menuContent;
    }


	private Component buildTitle() {
        Label logo = new Label("Welcome <strong>Admin</strong>", ContentMode.HTML);
        logo.setSizeUndefined();
        VerticalLayout logoWrapper = new VerticalLayout(logo);
        logoWrapper.setComponentAlignment(logo, Alignment.MIDDLE_CENTER);
        logoWrapper.addStyleName("valo-menu-title");
        
        return logoWrapper;
    }
	
	 private Component buildUserMenu() {
	        MenuBar settings = new MenuBar();
	        settings.addStyleName("user-menu");
	        MenuItem settingsItem = settings.addItem("", new ThemeResource("img/profile-pic-300px.jpg"), null);
	        settingsItem.addItem("Sign Out", selectedItem -> UI.getCurrent().getPage().setLocation(SecurityConfig.SIGN_OUT_URL));
	        return settings;
	    }

    private Component buildToggleButton() {
        Button valoMenuToggleButton = new Button("Menu", new ClickListener() {

			private static final long serialVersionUID = 1L;

			@Override
            public void buttonClick(final ClickEvent event) {
                if (getCompositionRoot().getStyleName().contains(STYLE_VISIBLE)) {
                    getCompositionRoot().removeStyleName(STYLE_VISIBLE);
                } else {
                    getCompositionRoot().addStyleName(STYLE_VISIBLE);
                }
            }
        });
        valoMenuToggleButton.setIcon(FontAwesome.LIST);
        valoMenuToggleButton.addStyleName("valo-menu-toggle");
        valoMenuToggleButton.addStyleName(ValoTheme.BUTTON_BORDERLESS);
        valoMenuToggleButton.addStyleName(ValoTheme.BUTTON_SMALL);
        return valoMenuToggleButton;
    }

	private Component buildMenuItems() {
		CssLayout menuItemsLayout = new CssLayout();
		menuItemsLayout.addStyleName("valo-menuitems");
		
		for(AdminMenuItem item : AdminMenuItem.values()) {
			menuItemsLayout.addComponent(buildMenuItemButton(item));
		}
		return menuItemsLayout;

	}


    private Button buildMenuItemButton(final AdminMenuItem menuItem) {
    	Button menuItemBtn = new Button();
    	menuItemBtn.setPrimaryStyleName("valo-menu-item");
    	menuItemBtn.setIcon(menuItem.getIcon());
    	menuItemBtn.setCaption(menuItem.getViewName());
    	
    	menuItemBtn.addClickListener(new ClickListener() {
			
			private static final long serialVersionUID = 566296333816948975L;

			@Override
			public void buttonClick(ClickEvent event) {
				eventsHandler.navigateToView(menuItem);
				
			}
		});
    	
    	
		return menuItemBtn;
	}

}
AntonCH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Vaadin. Обновление клиентской части Karik_ Общие вопросы по Java, Java SE, Kotlin 0 04.05.2016 12:21
replacing invalid security id with default security id for file XXXXXX Alar Операционные системы общие вопросы 3 01.02.2012 23:31
Приглашаем разработчиков веб-приложений Java/JavaEE на Vaadin Developer Meetup! maria_polozova Свободное общение 1 07.12.2010 16:46
C.O.M.O.D.O Internet Security qpokyc Софт 5 15.05.2009 18:33
Security error komex JavaScript, Ajax 2 02.04.2008 19:05