Re: Spring Security обновить права пользователя в рантайме
От: axtavt  
Дата: 25.02.10 15:11
Оценка: 4 (1)
Здравствуйте, dotidot, Вы писали:

D>Как динамически обновлять права пользователя в spring security?


Права пользователя кэшируются в объекте Authentication. Можно создать обертку над этим объектом, переопределив соответствующим образом метод getAuthorities. Например, установив такой фильтр после всех аутентификационных фильтров:

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        SecurityContext context = SecurityContextHolder.getContext();
        Authentication auth = context.getAuthentication();
        
        if (auth != null && auth.isAuthenticated() && !(auth instanceof MyAuthenticationWrapper)) {
            // Новый пользователь - создать обертку
            context.setAuthentication(new MyAuthenticationWrapper(auth));
        } else if (auth instanceof MyAuthenticationWrapper) {
            // Обновить права
            ((MyAuthenticationWrapper) auth).updateAuthorities();
        } 
        
        chain.doFilter(request, response);
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.