如何在 java class 中创建 Spring Security 3.1 数据源 bean
How to create Spring Security 3.1 Datasource bean in a java class
我是 JSF 和 Spring 安全的新手。
我正在构建一个基于 this tutorial 的 JSF 2 项目。我想将数据源 bean 放在 java class 中,因为我正在为另一个 class 中的 JDBC 连接和用户生成 url。
如何将此代码从我的安全-config.xml 放到 java class.
<beans:bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost:3306/spring_security_db" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
一种解决方案是使用 Spring 的 expression language。可以指定方法调用来检索,例如url参数:
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="#{someOtherBean.someMethod()}" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
您需要定义您正在引用其方法的另一个 bean。编程方法是这样的:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
public class AppConfig {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_security_db");
dataSource.setUsername("root");
dataSource.setPassword("");
return dataSource;
}
}
在您的 Spring 配置中,您需要使用适当的包指定组件扫描以获取 bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="yourpackage.configpackage"/>
</beans>
您应该创建一个新的 Class,它实现了 DriverManagerDataSource 的构造函数,然后在您的 beans 定义中的 class 标记中输入 Class 的名称。
你的 Class 是这样的:
package dao;
public class dataSource extends DriverManagerDataSource {
public dataSource() {
// TODO Auto-generated constructor stub
this.setDriverClassName("com.mysql.jdbc.Driver");
this.setUrl("jdbc:mysql://.../.....");
this.setUsername(""); this.setPassword("");
}
}
你的 bean 定义是这样的:
<beans:bean id="dataSource" class="dao.dataSource">
我是 JSF 和 Spring 安全的新手。 我正在构建一个基于 this tutorial 的 JSF 2 项目。我想将数据源 bean 放在 java class 中,因为我正在为另一个 class 中的 JDBC 连接和用户生成 url。 如何将此代码从我的安全-config.xml 放到 java class.
<beans:bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost:3306/spring_security_db" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
一种解决方案是使用 Spring 的 expression language。可以指定方法调用来检索,例如url参数:
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="#{someOtherBean.someMethod()}" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
您需要定义您正在引用其方法的另一个 bean。编程方法是这样的:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
public class AppConfig {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_security_db");
dataSource.setUsername("root");
dataSource.setPassword("");
return dataSource;
}
}
在您的 Spring 配置中,您需要使用适当的包指定组件扫描以获取 bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="yourpackage.configpackage"/>
</beans>
您应该创建一个新的 Class,它实现了 DriverManagerDataSource 的构造函数,然后在您的 beans 定义中的 class 标记中输入 Class 的名称。 你的 Class 是这样的:
package dao;
public class dataSource extends DriverManagerDataSource {
public dataSource() {
// TODO Auto-generated constructor stub
this.setDriverClassName("com.mysql.jdbc.Driver");
this.setUrl("jdbc:mysql://.../.....");
this.setUsername(""); this.setPassword("");
}
}
你的 bean 定义是这样的:
<beans:bean id="dataSource" class="dao.dataSource">