Spring boot 使用spring security和Neo4j进行用户身份验证
我有一个sprig启动应用程序和一个neo4J数据库。 我的application.properties文件如下所示: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
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中,而不是本地加载的本地/内存中的信息,因此每次加载应用程序时,您都会指向该数据库
DataSource
bean,以便在部署时进行设置.jar
文件时,您只需要传递额外的参数,以便为您的环境使用不同的配置当然,做同样的事情还有很多其他的选择,但这些都是你有的。我希望我能帮助你,即使是在问了这么多问题之后。你在这里有一些选择,这取决于你希望你的应用程序有多专业和安全
应用程序.properties中,而不是本地加载的本地/内存中的信息,因此每次加载应用程序时,您都会指向该数据库
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/**");
}