Mar*_*rco 18 spring spring-boot
我已在需要配置的Web服务中实现了一些授权.
目前,用户/密码组合被硬编码到bean配置中.我想将带有用户和密码的地图配置到application.properties中,以便配置可以是外部的.
有关如何做到这一点的任何线索?
<bean id="BasicAuthorizationInterceptor" class="com.test.BasicAuthAuthorizationInterceptor">
<property name="users">
<map>
<entry key="test1" value="test1"/>
<entry key="test2" value="test2"/>
</map>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
And*_*son 41
您可以使用绑定到bean的@ConfigurationProperties值application.properties.为此,您需要注释@Bean创建bean的方法:
@Bean
@ConfigurationProperties
public BasicAuthAuthorizationInterceptor interceptor() {
return new BasicAuthAuthorizationInterceptor();
}
Run Code Online (Sandbox Code Playgroud)
作为bean初始化的一部分,BasicAuthAuthorizationInterceptor将根据应用程序的环境设置任何属性.例如,如果这是您的bean的类:
public class BasicAuthAuthorizationInterceptor {
private Map<String, String> users = new HashMap<String, String>();
public Map<String, String> getUsers() {
return this.users;
}
}
Run Code Online (Sandbox Code Playgroud)
这是你的application.properties:
users.alice=alpha
users.bob=bravo
Run Code Online (Sandbox Code Playgroud)
然后users地图将填充两个条目:alice:alpha和bob:bravo.
这是一个小样本应用程序,将所有这些放在一起:
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
public class Application {
public static void main(String[] args) throws Exception {
System.out.println(SpringApplication.run(Application.class, args)
.getBean(BasicAuthAuthorizationInterceptor.class).getUsers());
}
@Bean
@ConfigurationProperties
public BasicAuthAuthorizationInterceptor interceptor() {
return new BasicAuthAuthorizationInterceptor();
}
public static class BasicAuthAuthorizationInterceptor {
private Map<String, String> users = new HashMap<String, String>();
public Map<String, String> getUsers() {
return this.users;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关其各种配置选项的更多信息,请查看javadocConfigurationProperties.例如,您可以设置前缀以将配置划分为多个不同的命名空间:
@ConfigurationProperties(prefix="foo")
Run Code Online (Sandbox Code Playgroud)
要使绑定起作用,您必须在application.properties中声明的属性上使用相同的前缀:
foo.users.alice=alpha
foo.users.bob=bravo
Run Code Online (Sandbox Code Playgroud)
Mar*_*nes 37
你可以使用@Value.
属性文件:
users={test1:'test1',test2:'test2'}
Run Code Online (Sandbox Code Playgroud)
Java代码:
@Value("#{${users}}")
private Map<String,String> users;
Run Code Online (Sandbox Code Playgroud)
一个java.util.Properties对象已经是一个Map,实际上是一个对象HashTable实现的对象Map.
因此,当您创建属性文件(让我们命名users.properties)时,您应该能够使用PropertiesFactoryBeanor 加载它<util:properties />并将其注入您的类.
test1=test1
test2=test2
Run Code Online (Sandbox Code Playgroud)
然后做类似的事情
<util:properties location="classpath:users.properties" id="users" />
<bean id="BasicAuthorizationInterceptor" class="com.test.BasicAuthAuthorizationInterceptor">
<property name="users" ref="users" />
</bean>
Run Code Online (Sandbox Code Playgroud)
虽然如果你有一个Map<String, String>user属性的类型,它可能会失败...我不会把它们放在application.properties文件中.但那可能就是我......
| 归档时间: |
|
| 查看次数: |
47103 次 |
| 最近记录: |