как настроить безопасность для админа и пользователя отдельно при загрузке - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь обезопасить демонстрационное приложение с помощью аутентификации на основе токенов jwt. Мой пример использования: у меня два типа пользователей: один - учитель, который является администратором, а другой - ученик, который является обычным пользователем.

Я хочу настроить безопасность для учителя и ученика отдельно. У меня есть разные источники для аутентификации пользователей - один для учителей и один для обычных пользователей. Если настроены два webseconfigadapters.

В StudentWebConfigAdapter

      config() {       
        http.antMatcher("/student/getmarks/{id}")
        .authorizeRequests().anyRequest().hasRole("USER")
   }
    @Bean("studentAuth")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

В TeacherWebConfigAdapter

   config() {       
    http.antMatcher("/student/**","/teacher/**")
       .authorizeRequests().anyRequest().hasRole("ADMIN")
   }
    @Bean("teacherAuth")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

Как настроить отдельный менеджер проверки подлинности для обоих. Я попытался создать отдельный бин с разными именами. он выдаёт ошибку, аутентификация менеджера должна быть только одна.

Expecting to only find a single bean for type interface org.springframework.security.authentication.AuthenticationManager, but found [studentAuth, teacherAuth]

1 Ответ

0 голосов
/ 09 февраля 2020

Может быть, это поможет вам ..

 set your group for page in secconfig:
 .antMatchers("/page").hasAnyAuthority("USER,ADMIN").anyRequest()
  and than you can work with groups in thymeleaf:
 <div sec:authorize="hasAuthority('ADMIN')"></div>

или в контроллере:

    @RequestMapping(value = {"/index"}, method =RequestMethod.GET)
    public String index(Model model, Principal principal) {
    Collection<?> auth = 
    SecurityContextHolder.getContext().getAuthentication().getAuthorities();

    if(auth.contains(new SimpleGrantedAuthority("ADMIN")) 
    {
        return "pages/indexForUser";
    }
    else if(auth.contains(new SimpleGrantedAuthority("USER")))
    {
        return "pages/indexForTeacher";
    }
    //ROLE_ANONYMOUS
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...