我有一个名为security.properties
的文件,如下所示:
com.example.test.admins=username,username1,username2
我希望将该文件作为字符串数组读入。这实际上适用于一个包:
package com.example.test.security
import org.springframework.beans.factory.annotation.Value
import org.springframework.ldap.core.DirContextOperations
import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.authority.SimpleGrantedAuthority
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator
class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {
@Value('${com.example.test.admins}')
private String[] admins
@Override
public Collection<? extends GrantedAuthority> getGrantedAuthorities(
DirContextOperations userData, String username) {
def roles = [new SimpleGrantedAuthority("user")]
if (username in admins)
roles.add(new SimpleGrantedAuthority("admin"))
roles
}
}
我已经检查了每个导入,每个导入都是由导入文件以外的东西使用的。
在另一个包中,它会忽略字符串插值:
package com.example.test.controller
// imports excluded for brevity
@Controller
class UserController {
@Value('${com.example.test.admins}')
private String[] admins
public User get() {
def name = // Name gets put here
def admin = name in admins
println admins
println admin
return new User(name: name, admin: admin)
}
}
在控制台中产生此输出:
[${com.example.test.admins}]
false
唯一提到的文件是security-applicationContext.xml
<context:property-placeholder
location="classpath:security.properties"
ignore-resource-not-found="true"
ignore-unresolvable="true"/>
但是,将其复制到applicationContext.xml
并不会改变任何内容。
答案 0 :(得分:1)
感谢@ataylor指出我正确的方向。
Spring中的控制器不使用相同的上下文。所以我创建了一个名为UserService
的服务:
@Service
class UserService {
@Value('${com.example.test.admins}')
private String[] admins
boolean getUserIsAdmin(String username) {
username in admins
}
}
在服务中自动装配的UserController中,它就像魅力一样。