Spring Security - CouchDB - PullRequest
       8

Spring Security - CouchDB

2 голосов
/ 23 сентября 2010

Я хочу написать Авторизацию использовал Spring Security.Данные пользователей будут сохранены в couchDB.У меня есть проблема с доступом к методам.

@PreAuthorize("hasAuthority('ROLE_ADMIN')")
    @Transactional
    public void deleteDriver(Driver driver) {
        dataService.deleteDrivers(driver);
    }..

Эта аннотация @PreAuthorize не работает.Я написал:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" jsr250-annotations="enabled"> 

в Aplication-context-security.xml

1 Ответ

0 голосов
/ 24 февраля 2015

Бьюсь об заклад, вы уже решили свою проблему, но, возможно, это может помочь кому-то еще ...

1- Конфигурация приложения

Вам необходимо добавить собственную реализацию UserDetailsService .

public class AppConfig extends WebMvcAutoConfiguration {
...
    @Bean
    public UserSecurityService userSecurityService() {
        return new UserSecurityService();
    }
...
}

2 - объект пользователя

public class CustomUserDetail extends org.springframework.security.core.userdetails.User {

    public CustomUserDetail(String username, String password, Collection<? extends GrantedAuthority> authorities) {
        super(username, password, authorities);
    }
}

3 - Репозиторий пользователей

@Component
public class UserRepository extends CouchDbRepositorySupport<User> {
        ...
        @View( name = "findUserByUsername", map = "function(doc) { if (doc.docType == 'User' ) emit( doc.username, doc._id ) }")
        public User findUserByUsername(String username) {
            return queryViewReturnSingleEntity("findUserByUsername",username);          
        }
        ...
}

4 - Реализация UserDetailsService , UserSecurityService

public class UserSecurityService implements UserDetailsService {

    @Autowired
    private UserRepository userRepo;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException
    {
        //Spring user
        UserDetails userDetails = null;

        //CouchDB Object
        User user = userRepo.getByUsername(username);

        List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
        String rol = user.getRol();
        grantedAuths.add(new SimpleGrantedAuthority(rol));

        if(user != null){
            //Spring user implementation
            userDetails = new CustomUserDetail(user.getUsername(), user.getPassword(), grantedAuths);
        }

        if (userDetails == null) {
            throw new UsernameNotFoundException("User not found");
        }

        return userDetails;
    }
}

5- Наконец, вы должны расширить GlobalMethodSecurityConfiguration

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {                   

    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
        return expressionHandler;
    }
}

Теперь все это можно добавить:

@PreAuthorize("hasRole('ROLE_SUPER_USER')")

Для проверки доступа к роли пользователя.

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