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

Spring Security: аутентификация с помощью базы данных

Я реализовал этот способ подключения и извлечения моих пользователей из моей базы данных:

 @Configuration
 @EnableWebSecurity
 public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
DataSource dataSource;

@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {

  auth.jdbcAuthentication().dataSource(dataSource)
    .usersByUsernameQuery(
        "select username,password, enabled from users where username=?")
    .authoritiesByUsernameQuery(
        "select username, role from user_roles where username=?");
}   

Итак, у меня есть пользователи со своими ролями. В этом примере кода столбец user_roles будет иметь значение «ROLE_USER» или «ROLE_ADMIN». Я хотел бы изменить это поле на логическое значение с 0 для ROLE_ADMIN и 1 для ROLE_USER.

Я не могу сохранить свои user_roles из-за ограничений.

Как я мог это сделать?


  • Пожалуйста, не забывайте, что обычно администратор также является пользователем. 13.10.2015
  • Существует ли тег Authorities для одновременного получения авторизации ROLE_ADMIN и ROLE_USER? 13.10.2015
  • Вы можете проверить условие AND в аннотации PreAuthorize или Secured. 13.10.2015
  • Ok. Это не решает моей основной проблемы с логическими значениями. Но это хорошая информация. 13.10.2015
  • Я бы не рекомендовал использовать логическое значение для ролей, потому что в будущем, если их будет больше, у вас также возникнут проблемы. Кроме того, у пользователя может быть несколько РОЛИ. Идеально иметь новую таблицу ролей и иметь связь «многие к одному» с пользователем. Таким образом, для каждого пользователя можно получить роли. 13.10.2015

Ответы:


1

Вы можете адаптировать свой запрос для сопоставления 0 с «ROLE_USER» и 1 с «ROLE_ADMIN» с помощью оператор CASE

.authoritiesByUsernameQuery(
"select username, case when role=1 then 'ROLE_USER' else 'ROLE_ADMIN' as role from user_roles where username=?")
13.10.2015
  • Не работает :/ Но я думаю, это хороший способ поиска. Вы знаете, как я могу проверить эти запросы в Интернете? Все еще не знаю, почему я делаю WHERE login = ? 13.10.2015
  • Что значит не работает? (в вашем коде нет login=?) Я не вижу смысла тестировать запрос к базе данных онлайн 13.10.2015
  • Новые материалы

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

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

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

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

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

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

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