0
我有一個名爲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
不會更改任何東西。
控制器可能使用servlet應用程序上下文,而不是根上下文。看到這個:http://stackoverflow.com/questions/11890544/spring-value-annotation-in-controller-class-not-evaluating-to-value-inside-pro – ataylor
你是完全正確的。感謝您的鏈接。我會發佈一個答案。 – lcarsos