Nano Hash - криптовалюты, майнинг, программирование

Полномочия, предоставленные пользователем, всегда: ROLE_ANONYMOUS?

Я использую следующий метод для программного входа в систему после регистрации.

private void autoLogin(User user,
            HttpServletRequest request)
    {

GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
                "ROLE_ADMIN") };

        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
                user.getUsername(), user.getPassword(),grantedAuthorities);

        // generate session if one doesn't exist
        request.getSession();

        token.setDetails(new WebAuthenticationDetails(request));
        Authentication authenticatedUser = authenticationManager.authenticate(token);

        SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
    }

пользователь аутентифицирован, но всегда имеет ROLE_ANONYMOUS, не знаю почему? Любые идеи ?


  • я думаю, что это связано с тем, что страница требует принципала ROLE_ADMIN, а роль пользователя после аутентификации является анонимной, кто-нибудь знает, как сделать пользователя-пользователя администратором при входе в систему? 13.10.2010

Ответы:


1

Такое поведение выглядит очень странно. Хави предлагает сохранить контекст безопасности в сеансе вручную, но это должно быть сделано автоматически с помощью Spring Security SecurityContextPersistenceFilter.

Одна из возможных причин, которую я могу себе представить, это filters = "none" в <intercept-url> вашей страницы обработки регистрации.

filters = "none" отключает все фильтры безопасности для указанного URL. Как видите, это может мешать другим функциям Spring Security. Таким образом, лучший подход — оставить фильтры включенными, но настроить их так, чтобы разрешить доступ всем пользователям. У вас есть несколько вариантов:

  • With old syntax of access attribute (i.e. without <http use-expressions = "true" ...>):
    • access = "ROLE_ANONYMOUS" allows access for non-authenticated users, but denies for the authenticated ones
    • Чтобы разрешить доступ всем пользователям, вы можете написать access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"
  • Использование нового синтаксиса на основе языка Spring Expression Language (<http use-expressions = "true" ...>) вы просто пишете access = "true", чтобы разрешить доступ всем пользователям (но другие <intercept-url> тоже должны использовать этот синтаксис).
13.10.2010
  • да, вы правы, я использую filter=none на странице регистрации, в чем разница между ним и access=ROLE_ANONYMOUS? 13.10.2010
  • поэтому, если я использую access = true, это означает, что любой может получить доступ к странице, но как насчет фильтров, они тоже выполняются? а как насчет того, чтобы использовать как access=true, так и filter=none, возможно ли это? 13.10.2010
  • @ меч101: Если вы пишете filters="none", фильтры не выполняются. В противном случае их казнят. 13.10.2010
  • Вы говорите but other <intercept-url>s should use this syntax too, однако я использую оба варианта access=true и filter=none и работают хорошо. Что вы имеете в виду? Означает ли это, что я не могу использовать filter=none и access=true на разных перехватчиках, если я установил ‹http use-expressions = true ...›? 12.09.2011

  • 2

    У меня была аналогичная проблема, и мне пришлось вручную установить сеанс после выполнения аутентификации.

    request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());
    

    Попробуй.

    13.10.2010
  • спасибо, чувак, у меня сработало нормально, но мне любопытно, в чем польза этой строки кода? 13.10.2010
  • Как говорит axtavt, он просто устанавливает сеанс менеджера безопасности. Я согласен с тем, что это должно быть сделано автоматически, но когда я попытался, мне пришлось настроить его, чтобы он заработал. 13.10.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..