WedX - журнал о программировании и компьютерных науках

Аутентификация пользователя с Spring Security и Neo4j

У меня есть загрузочное приложение sprig и база данных neo4J. Мой файл application.properties выглядит так:

spring.data.neo4j.uri = https://127.0.0.1:7474
spring.data.neo4j.username = neo4j
spring.data.neo4j.password = neo4jpass

Приложение имеет базового пользователя:

@NodeEntity
public class User {

  @GraphId
  private Long id;

  @Property (name="username")
  private String username;

  @Property (name="password")
  private String password;

  @Property (name="name")
  private String name;

  @Property (name="role")
  private String role;
}

Простой пользовательский репозиторий:

public interface UserRepository extends GraphRepository<User>{
}

Моя текущая конфигурация безопасности Spring:

@Configuration
@EnableWebSecurity
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/","/index").permitAll()
            .anyRequest().authenticated()
        .and()
            .authorizeRequests()
            .antMatchers("/css/**”)
            .permitAll()
        .and()
            .authorizeRequests()
            .antMatchers("/resources/**")
            .permitAll();

        http
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/home")
            .permitAll()
        .and()
            .logout()
            .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }


    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers("/vendors/**", "/local/**");
    }

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


  • Создайте пользовательскую службу UserDetailService, которая может загружать пользователя по имени пользователя из базы данных, а затем внедрить ваш источник данных в приведенной выше конфигурации вместо inMemoryAuthentication(). 17.07.2017
  • @Afridi Меня немного смущает часть источника данных. Я не использовал какой-либо объект источника данных и подключался к базе данных через datauri neo4j, определенный в application.properties. Вы имеете в виду, что я должен создать собственный объект доступа к данным, как показано здесь?: docs.spring.io/spring-boot/docs/current/reference/html/ 17.07.2017
  • Да, и поскольку вы используете загрузку Spring и файл application.properties, вам необходимо определить bean-компонент dataSource, просто объект @Autowire dataSource в файле конфигурации, а затем определить собственный UserDetailService (который будет использоваться для извлечения пользователя с использованием имени пользователя из базы данных Neo4j ). Для получения дополнительной информации проверьте это: dzone.com/articles/< /а> 17.07.2017

Ответы:


1

Здесь у вас есть несколько вариантов, и они будут зависеть от того, насколько профессиональным и безопасным вы хотите, чтобы ваше приложение было.

  1. Вы можете просто поместить реальную информацию о базе данных в свой application.properties вместо локальной/в памяти, которую вы загружаете локально, поэтому каждый раз, когда вы загружаете свое приложение, вы будете указывать на эту базу данных.
  2. Если вы говорите о развертывании вашего приложения во многих средах (dev, prod и т. д.), вы должны экспортировать эти конфигурации и загружать их как переменные среды в момент развертывания (у вас есть много способов сделать это, в зависимости от того, что вы будете размещать свое приложение) . Используя этот случай, вы сделаете то, что @Afridi сказал в комментариях: создайте bean-компонент DataSource для загрузить переменные среды, установленные в момент развертывания
  3. Вы можете использовать внешние файлы конфигурации, чтобы к моменту запуска сгенерированный файл .jar, вам просто нужно передать дополнительные параметры, чтобы использовать разные конфигурации для вашей среды

Наверняка есть много других вариантов сделать то же самое, но это те, которые у вас есть. Надеюсь, я помог вам, даже спустя столько времени после вопроса.

11.01.2020
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]