2016-08-10 3 views
0

Я закодировал интеграцию моей web application с помощью пружинной безопасности с pac4j и CAS, основанную на spring-security-pac4j-demo со следующими зависимостями:Как включить @Secured аннотации на моих контроллерах с помощью пружинной безопасности-pac4j 2,0

compile "org.pac4j:pac4j-core:1.8.8" 
compile "org.pac4j:pac4j-cas:1.8.8" 
compile "org.pac4j:spring-security-pac4j:1.4.3" 
compile "org.springframework.security:spring-security-core:4.1.0.RELEASE" 

Однако , когда я попытался обновиться до версии 2.0.0spring-security-pac4j Я понял, что подход был полностью изменен. Перед тем, как использовать для загрузки пользовательских ролей в моем заказном классе UserDetailService:

@Component("userDetailsService") 
public class UserDetailsService implements AuthenticationUserDetailsService<ClientAuthenticationToken> { 

    private final Logger log = LoggerFactory.getLogger(UserDetailsService.class); 

    @Inject 
    private UserRepository userRepository; 


    @Override 
    @Transactional 
    public UserDetails loadUserDetails(ClientAuthenticationToken token) throws UsernameNotFoundException { 
     String username = token.getUserProfile().getId().toLowerCase(); 
     log.debug("Authenticating {}", username); 

     Optional<User> userFromDatabase = userRepository.findOneByUsername(username); 
     if (!userFromDatabase.isPresent()) { 
      throw new UsernameNotFoundException("User " + username + " was not found in the database"); 
     } else if (!userFromDatabase.get().getActivated()) { 
      throw new UserNotActivatedException("User " + username + " was not activated"); 
     } 

     Collection<GrantedAuthority> grantedAuthorities = new ArrayList<>(); 
     for (Authority authority : userFromDatabase.get().getAuthorities()) { 
      GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(authority.getName()); 
      grantedAuthorities.add(grantedAuthority); 
     } 
     return new org.springframework.security.core.userdetails.User(username,username, grantedAuthorities); 
    } 
} 

И с некоторыми дополнительными конфигурациями весны-безопасность работала, чтобы проверить роли пользователей доступа на моих контроллерах снабженных @Secured.

@Controller 
@RequestMapping("/app/*") 
public class SecureController { 

    @Secured("ROLE_ADMIN") 
    @RequestMapping("/secure/admins") 
    public String admins(Model model) { 
     model.addAttribute("roleName", "ROLE_ADMIN"); 
     return "secure"; 
    } 

    @Secured("ROLE_USER") 
    @RequestMapping("/secure/users") 
    public String users(Model model) { 
     model.addAttribute("roleName", "ROLE_USER"); 
     return "secure"; 
    } 
} 

С версии 2.0.0 из весны-безопасность-pac4j, даже не глядя в демосе я до сих пор я понятия не имею, с чего начать, чтобы сделать обновил свой проект с новой версией pac4j и сохраните его с помощью аннотации @Secured. Если кто-то может помочь с любыми советами и/или направлениями, мы будем очень благодарны.

ответ

0

Я являюсь создателем pac4j и spring-security-pac4j.

Да, версия 2.0 действительно отличается, но это было необходимо для использования всех функций pac4j.

После успешной аутентификации CAS создается и сохраняется в вашем контексте безопасности CasProfile (в токене Pac4jAuthentication). Чтобы вычислить определенные роли для вашего профиля (например, извлекая их из базы данных), вам необходимо создать новый AuthorizationGenerator и прикрепить его к клиенту: casClient.addAuthorizationGenerator(myAuthGenerator);

+0

Я попытался перенести проект в новую версию на основе образца и информацию, которую вы мне дали, но я получаю сообщение об ошибке при переадресации в браузере. Я могу что-то потерять, потому что в примере используется xml, и я использую аннотированный подход класса @Configuration. –

+0

Можете ли вы опубликовать трассировку стека и подробную ошибку в списке рассылки: https://groups.google.com/forum/?fromgroups#!forum/pac4j-users? – jleleu

+0

уверен, я собираюсь создать ветку на github, а также mak post post на форуме pac4-users. еще раз спасибо –

Смежные вопросы