2015-05-19 2 views
0

Мои требования должны использовать SSO на основе SAML. Извлеките группы пользователей из утверждений SAML и закрепите остальные конечные точки api. Я использую Spring SAML расширения Spring и Spring MVC. Я предпринял шаги.Весна Безопасность Расширение SAML и @PreAuthorize

  1. Настроить приложение для SP с использованием удлинителя SAML с пружиной. [Готово]
  2. Получить утверждения и назначить роли [Готово]
  3. Создать конечную точку отдыха. [Готово]
  4. Безопасная конечная точка отдыха и услуги, основанные на ролях. [Не работает]

Я реализовал SAMLUserDetailsService, который возвращает объект UserDetails с полномочиями. 'loadUserBySAML' ниже.

@Override 
public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException { 

    final String userId = credential.getNameID().getValue(); 

    final String emailAddress = credential.getAttributeAsString("EmailAddress"); 
    final String firstName = credential.getAttributeAsString("FirstName"); 
    final String lastName = credential.getAttributeAsString("LastName"); 

    List<GrantedAuthority> authorities = new ArrayList<>(); 
    authorities.add(new SimpleGrantedAuthority("ROLE_STUDENT")); 

    return new User(userId, emailAddress, firstName, lastName, authorities); 
} 

Я добавил <!-- Enable security annotations on methods --> <security:global-method-security pre-post-annotations="enabled" /> к securityContext.xml.

На RestController и на сервисах, которые я использую @PreAuthorize, но эта аннотация, похоже, не имеет никакого эффекта.

@PreAuthorize("hasRole('ROLE_PROGRAMLEAD')") 
@RequestMapping(method = RequestMethod.GET) 
public String hello() { 
    return "Hello.";} 

Может кто-то, пожалуйста, помогите мне понять, почему PreAuthorize не стреляет? Не хватает ли какой-либо конфигурации?

ответ