2014-09-18 2 views
2

У меня есть приложение загрузки весны, для которого я пытаюсь реализовать специальную схему авторизации, расширяющую стандарт @RolesAllowed.spring-boot расширенная авторизация

Я создал обычай AccessDecisionManage r, который читает @RolesAllowed, и если есть аргумент, аннотированный моей пользовательской аннотацией, я проверю, имеет ли пользователь указанную роль в указанной области.

@RequestMapping(value = "/{id}/user/list", method = RequestMethod.GET) 
@RolesAllowed("manager") 
public List<User> userList(@PathVariable("id") @AuthScope Project project) throws NotFoundException { 
      return projectService.findUsersByProject(project); 
} 

Я реализовал AccessDecisionManager с логикой, необходимой для моей пользовательской схемы авторизации теперь я не может настроить свою безопасность приложений, чтобы использовать эту AccessDecisionManager.

@Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http 
       .authorizeRequests() 
        .accessDecisionManager(accessDecisionManager()) 
        .anyRequest().permitAll() 
        .and() 
       .csrf() 
        .disable() 
        .httpBasic(); 
    } 

Здесь ошибка я получаю:

AccessDecisionManager does not support secure object class: class org.springframework.security.web.FilterInvocation 

Любые идеи о том, что я делаю неправильно? Приветствия

+1

Вам действительно нужны заказные материалы. Разве это не то, что вы могли бы сделать с аннотацией @ @ Secured с помощью какой-то магии EL? –

+0

Или использовать авторизацию Sprnig Security 'Pre/Post'. –

+0

Я понимаю, что то, что я хочу сделать, может быть выполнено либо: -acessDecisionManager; -pre-post-annotations; -объявленные аннотации; Проблема заключается в том, что я должен выполнить свою собственную авторизацию либо на accessDecisionManager, как сейчас, либо изменить эту логику на @Secured или предварительно опубликовать аннотации. В конце концов я должен настроить свою безопасность приложения, чтобы использовать эту логику, это моя проблема прямо сейчас. – danielgmarcos

ответ

0

вы просите для AccessDecisionManager быть применены к цепи HTTP фильтра (по bunging его в HttpSecurity), но (не видя кода) Я предполагаю, что он не имел в виду, чтобы поддержать это. Скорее всего, он будет работать с GlobalMethodSecurityConfiguration. Я думаю, вам нужно расширить этот класс, добавив переопределить метод accessDecisionManager(). Пример: https://spring.io/blog/2013/07/04/spring-security-java-config-preview-method-security/.

0

Вы правы @Dave, вот как мне удается заставить его работать.

public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration { 

    @Override 
    protected AccessDecisionManager accessDecisionManager() { 
     return new AuthScopeDecisionManager(); 
    } 
}