Spring Boot,与数据库链接的 Spring 安全性
Posted
技术标签:
【中文标题】Spring Boot,与数据库链接的 Spring 安全性【英文标题】:Spring Boot, Spring security linked with database 【发布时间】:2017-05-16 17:43:32 【问题描述】:抱歉我的英语不好..
我是 Spring 的初学者。一位同事建议我使用 Spring boot 开始。目前我喜欢这样。
首先,我想创建一个与 mysql 数据库链接的身份验证/登录模块。
我正在研究 IntelliJ 和 phpMyAdmin。
这项工作有 3 个部分: - 认证系统 - OK - 数据库链接和基本操作 - OK - 身份验证和数据库之间的链接 - 不正常。
目前,对于身份验证,我有这个文件:
WebSecurityConfig.java
package hello;
//imports
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
要将我的应用程序与数据库连接,我有这个文件:
application.properties
spring.datasource.url = jdbc:mysql://localhost/simulateur
spring.datasource.username = root
spring.datasource.password =
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
我喜欢这个解决方案,因为它是使用 Play Framework 的记住我的解决方案,也是我企业的解决方案。我希望保留这个文件:application.properties。一个配置文件看起来很棒。
为了链接所有这些,我在 website 上找到了解决方案。 我必须在我的 WebSecurityConfig.java 中添加这个:
@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=?");
并将其添加到文件 MvcConfig.java 中,并带有正确参数的路由和其他功能:
@Bean(name = "dataSource")
public DriverManagerDataSource dataSource()
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost/simulateur");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");
return driverManagerDataSource;
我的问题是我有重新定义数据库连接的印象。我想使用我的文件:application.properties。 你有想法使用这个文件而不使用 MvcConfig.java 中的代码部分吗?
提前感谢您的帮助! :)
【问题讨论】:
您正在创建一个数据源 bean,如果您同时使用多个数据源,例如 Mysql 和 Oracle,这将非常有用。如果我正确理解了您的问题,那么您只使用一个数据源,因此您可以在没有 MyConfig.java 类的情况下实现这一目标。当您在 application.properties 中指定数据源参数时,springboot 会创建一个 bean 供您使用。您需要做的就是自动装配 JdbcTemplate 对象.. 你已经完全理解了我的问题。我想在我的 application.properties 中定义我的数据源参数,但现在,我该如何使用它?我没有在网上找到没有 MyConfig.java 的实现示例.. 试试这个***.com/questions/27697190/… 【参考方案1】:在 Spring Boot 中,您有两种定义数据源的方法,要么在 application.properties 上定义它,要么以编程方式进行。除非您需要一些非常具体的配置,或者您有多个数据源,否则您应该在 application.properties 中定义您的数据源配置,以便 springboot 为您自动配置所有内容。
在您提供的示例中,您定义了两次数据源,您应该删除 MvcConfig.java。
我建议你阅读这篇关于如何使用sql数据库和spring bootWorking with SQL databases的文章
【讨论】:
非常感谢您的帮助。但是如果我删除 MvcConfig.java 中的代码,我的应用程序将如何理解 WebSecurityConfig.java 中添加的代码? Springboot 应该使用您在 application.properties 中提供的配置实例化一个数据源。您的 WebSecurityConfig 应该可以正常工作。 我刚刚检查了您的 application.properties 配置。确保您提供了 spring 配置数据源所需的所有信息。至少,您需要定义以下属性:spring.datasource.url、spring.datasource.username、spring.datasource.password、spring.datasource.driver-class-name【参考方案2】:server.port = 8084
#create and drop tables and sequences, loads import.sql
spring.jpa.hibernate.ddl-auto=update
# MySQL settings
#spring.datasource.url=jdbc:Mysql://localhost:3306/simplehr
spring.datasource.url=jdbc:mysql://localhost:3306/myProject
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.show-sql=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# HikariCP settings
spring.datasource.hikari.*
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=5
# logging
logging.pattern.console=%dyyyy-MM-dd HH:mm:ss %-5level %logger36 -
%msg%n
logging.level.org.hibernate.SQL=debug
#logging.level.org.hibernate.type.descriptor.sql=trace
logging.level.=error
spring.mvc.view.prefix:/WEB-INF/jsp/
spring.mvc.view.suffix:.jsp
【讨论】:
以上是关于Spring Boot,与数据库链接的 Spring 安全性的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + 安全 + 多 HTTP Web 配置
让 oauth2 与 spring-boot 和 rest 一起工作
Spring Boot,与数据库链接的 Spring 安全性