как настроить другой доступ для вложенных URL-адресов в Spring-Security - PullRequest
1 голос
/ 23 сентября 2019

вот моя конфигурация безопасности:

protected void configure(HttpSecurity http) throws Exception {


        http.authorizeRequests().antMatchers("**/feedback")
                .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
                .and().authorizeRequests().antMatchers("/api/**","/ticket/**")
                .access("isAuthenticated()")
                .and().authorizeRequests().antMatchers("**/create/**")
                .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
                .and().formLogin().loginPage("/login").failureUrl("/login?error")
                .and().formLogin().defaultSuccessUrl("/ticket/all", true)
                .usernameParameter("email")
                .passwordParameter("password")
                .and().csrf().disable();
    }

я хочу, чтобы у всех был доступ для просмотра билетов "/ ticket", но я хочу запретить доступ инженерам к / ticket / create и / ticket /**/Обратная связь.Прямо сейчас

antMatchers("/api/**","/ticket/**")
                    .access("isAuthenticated()")

Позволяет получить доступ каждому.Как я должен сделать это правильно?Есть ли какое-то правило перезаписи для нескольких antMatchers?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

я хочу, чтобы у всех был доступ к просмотру билетов "/ ticket"

Каждый означает Аутентифицированный пользователь ?или Аутентифицированный + Анонимный пользователь?

  • Для аутентифицированного пользователя .antMatchers("/ticket").access("isAuthenticated()")

  • Для аутентифицированного+ Аноним .antMatchers("/ticket").permitAll()

, но я хочу запретить доступ для инженера к /ticket/create и /ticket/**/feedback.
* Инженер? Ваш вопрос содержит неполную информацию.

Если принять роли MANAGER EMPLOYEE и ENGINEER, и все они будут аутентифицированными пользователями, тогда

Изменить, чтобы разрешить создание заявок только для MANAGER и EMPLOYEE

http.authorizeRequests()
        .antMatchers("**/feedback")
            .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
    .and().authorizeRequests()
        .antMatchers("/api/**","/ticket/**")
            .access("isAuthenticated()")
    .and().authorizeRequests()
        .antMatchers("**/create/**")
            .access("hasAnyAuthority('MANAGER','EMPLOYEE')")

до

http.authorizeRequests()
        .antMatchers("/ticket").access("isAuthenticated()") //or .permitAll() as explained already
        .antMatchers("**/feedback", "/ticket/**", "**/create/**")
            .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
        .antMatchers("/api/**")
            .access("isAuthenticated()");
0 голосов
/ 23 сентября 2019

Вам необходимо добавить следующий код:

.and().authorizeRequests().antMatchers("/ticket").permitAll()

Код будет:

http.authorizeRequests().antMatchers("**/feedback")
                .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
                .and().authorizeRequests().antMatchers("/ticket")
                .permitAll()
                .and().authorizeRequests().antMatchers("/api/**","/ticket/**")
                .access("isAuthenticated()")
                .and().authorizeRequests().antMatchers("**/create/**")
                .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
                .and().formLogin().loginPage("/login").failureUrl("/login?error")
                .and().formLogin().defaultSuccessUrl("/ticket/all", true)
                .usernameParameter("email")
                .passwordParameter("password")
                .and().csrf().disable();

Надеюсь, вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...