Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 使用spring security和Neo4j进行用户身份验证_Spring Boot_Spring Security_Neo4j_Graph Databases_Spring Data Neo4j 4 - Fatal编程技术网

Spring boot 使用spring security和Neo4j进行用户身份验证

Spring boot 使用spring security和Neo4j进行用户身份验证,spring-boot,spring-security,neo4j,graph-databases,spring-data-neo4j-4,Spring Boot,Spring Security,Neo4j,Graph Databases,Spring Data Neo4j 4,我有一个sprig启动应用程序和一个neo4J数据库。 我的application.properties文件如下所示: spring.data.neo4j.uri = http://127.0.0.1:7474 spring.data.neo4j.username = neo4j spring.data.neo4j.password = neo4jpass 该应用程序有一个基本用户: @NodeEntity public class User { @GraphId private L

我有一个sprig启动应用程序和一个neo4J数据库。 我的application.properties文件如下所示:

spring.data.neo4j.uri = http://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>{
}

使用内存身份验证登录后,我可以创建、读取和删除用户。我要做的是替换内存中的身份验证,并针对数据库中的现有用户进行身份验证。我在这里有哪些选择?

您在这里有一些选择,这取决于您希望应用程序的专业性和安全性

  • 您只需将真实的数据库信息放在
    应用程序.properties中,而不是本地加载的本地/内存中的信息,因此每次加载应用程序时,您都会指向该数据库
  • 如果您正在谈论在许多环境(dev、prod等)中部署应用程序,那么您应该在部署时将这些配置外部化并作为环境变量加载(您有很多方法可以做到这一点,具体取决于您的应用程序宿主)。在本例中,您将按照@Afridi在评论中所说的做:创建一个
    DataSource
    bean,以便在部署时进行设置
  • 您可以使用,因此在运行生成的
    .jar
    文件时,您只需要传递额外的参数,以便为您的环境使用不同的配置

  • 当然,做同样的事情还有很多其他的选择,但这些都是你有的。我希望我能帮助你,即使是在问了这么多问题之后。

    你在这里有一些选择,这取决于你希望你的应用程序有多专业和安全

  • 您只需将真实的数据库信息放在
    应用程序.properties中,而不是本地加载的本地/内存中的信息,因此每次加载应用程序时,您都会指向该数据库
  • 如果您正在谈论在许多环境(dev、prod等)中部署应用程序,那么您应该在部署时将这些配置外部化并作为环境变量加载(您有很多方法可以做到这一点,具体取决于您的应用程序宿主)。在本例中,您将按照@Afridi在评论中所说的做:创建一个
    DataSource
    bean,以便在部署时进行设置
  • 您可以使用,因此在运行生成的
    .jar
    文件时,您只需要传递额外的参数,以便为您的环境使用不同的配置

  • 当然,做同样的事情还有很多其他的选择,但这些都是你有的。我希望我能帮助您,即使是在问了这么多问题之后。

    创建一个自定义UserDetailService,它可以通过用户名从数据库加载用户,然后将您的数据源注入上述配置中,以代替inMemoryAuthentication()。@Afridi我对数据源部分有点困惑。我没有使用任何数据源对象,也没有通过application.properties中定义的neo4jdatauri连接到数据库。您的意思是我应该创建一个自定义数据访问对象,如图所示吗?:是的,由于您使用的是Spring boot和application.properties文件,所以需要定义dataSource bean,只需在配置文件中定义@Autowire dataSource对象,然后定义一个自定义UserDetailService(用于使用username从Neo4j数据库检索用户). 有关更多信息,请检查以下内容:创建一个自定义UserDetailService,该服务可以按用户名从数据库加载用户,然后将数据源插入上述配置中,以代替inMemoryAuthentication()。@Afridi我对数据源部分有点困惑。我没有使用任何数据源对象,也没有通过application.properties中定义的neo4jdatauri连接到数据库。您的意思是我应该创建一个自定义数据访问对象,如图所示吗?:是的,由于您使用的是Spring boot和application.properties文件,所以需要定义dataSource bean,只需在配置文件中定义@Autowire dataSource对象,然后定义一个自定义UserDetailService(用于使用username从Neo4j数据库检索用户). 有关详细信息,请检查以下内容:
    @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/**");
        }