LINUX.ORG.RU

Разрешить доступ к урлу только перечисленным ролям, используя Spring Security

 ,


0

2

Spring Security, сконфигурированный java конфигом. В интернете гигабайты текста исписаны о том, как конфигурировать Spring Security в xml, и пару килобайт о том, как сделать то же самое в java конфиге. Ну как, то же самое. Несколько одинаковых статей, описывающих очевидные моменты и не дающих никакой конкретики. Поэтому у меня к вам 2 вопроса: 1. Почему по прежнему разрешен доступ к урлу, подпадающему под паттерн /#!admin/**? 2. Как его, собственно, запретить пользователям, которые не входят в роль GOD?

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("admin").password("admin").roles(Role.GOD.toString());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .and()
                .formLogin()
                .loginPage("/#!auth")
                .permitAll()
                .and()
                .authorizeRequests()
                .antMatchers("/#!admin/**").hasAnyRole(Role.GOD.toString())
                .and()
                .csrf()
                .disable();
    }
}

Регистрация конфига:

public class TaisWebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(TaisConfiguration.class);
        ctx.register(SecurityConfiguration.class);
        servletContext.addListener(new ContextLoaderListener(ctx));
    }
}

UPD: Spring Security 3.2.3.RELEASE, Spring 4.0.2.RELEASE.

★★★★★

Последнее исправление: f1xmAn (всего исправлений: 1)

Конфигурации там немного но муторной, глянь для примера код который jhipster генерит, там адекватно. Ставит ноду не обязательно, смотри темплейты. Только гляди в tag 0.7 или даже меньше, после они на spring boot перешли.

LestorN
()
Ответ на: комментарий от LestorN

Та я уже написал свой велосипед с черным консьержем и гувернантками, которые идеально интегрируются в проект.

f1xmAn ★★★★★
() автор топика

Есть подозрение, что дело в том, что у тебя URL-ы джаваскриптовые и Spring Security их не распознает, вернее, для него они одинаковые («/#!auth» -> «/» и «/#!admin/**» -> «/»)

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

Аааа, вот ещё более лучший вариант:

.loginPage("/#!auth").permitAll()

здесь ты говоришь, что в качестве страницы для логина у тебя используется URL «/#!auth», а дальше ты говоришь «разрешить все запросы». Все дальнейшие правила у тебя даже не проверяются. Попробуй сделать вот так:

http.authorizeRequests()
                .formLogin().loginPage("/#!auth")
                .and()
                .antMatchers("/#!auth").permitAll()
                .and()
                .antMatchers("/#!admin/**").hasRole(Role.GOD.toString())
                .and()
                .csrf().disable();
php-coder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.