试图通过从AuthenticationManager of SpringBootSecurity中获取值来设置application.properties中的一些参数,但这些值只是默认设置的参数,而不是application.properties文件中的参数。
在我的应用程序的其他地方使用@Value是没有问题的,但是在这个类中,命名是错误的.无论我在application.properties中设置了什么,这些值都是缺省值。例如,refreshTokenExpiredDays应该是4(参见下面的applicationproperties文件),但实际上它是1
import org.springframework.beans.factory.annotation.Value
class ApplicationAuthenticationFilters(
authenticationManager: AuthenticationManager
):UsernamePasswordAuthenticationFilter(authenticationManager) {
@Value("\${security-json-token-secret}")
private val jsonTokenSecret: String = "secret"
@Value("\${security-access-token-expired-mns}")
private val accessTokenExpiredMns: Int = 10
@Value("\${security-refresh-token-expired-days}")
private val refreshTokenExpiredDays: Int = 1
@Value("\${security-tokens-in-header}")
private val tokensInHeader: Boolean=false
...
...}application.properties
cors-origin-patterns=http://localhost:3000,https://localhost,http://localhost:8080
security-json-token-secret=secret
security-access-token-expired-mns=20
security-refresh-token-expired-days=4
security-tokens-in-header=true编辑想知道为什么有人对我的问题设置了-1 .顺便说一句,是的,当重写WebSecurityConfigurerAdapter中的配置函数时,会调用这个过滤器类。
override fun configure(http: HttpSecurity) {
val applicationAuthenticationFilter:ApplicationAuthenticationFilters = ApplicationAuthenticationFilters(authenticationManagerBean())
applicationAuthenticationFilter.setFilterProcessesUrl("/auth/login")
http.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
http.authorizeRequests().antMatchers("/auth/login/**", "/auth/token/refresh/**").permitAll();
http.authorizeRequests().anyRequest().authenticated()
// filtre ici pour gérer la JWT vai authentificationManager
http.addFilter(applicationAuthenticationFilter)
}编辑2我的解决方案最后创建了一个数据类,我在所有需要application.properties变量的构造函数中注入该类
@Component
data class EnvVariables(
@Value("\${security-json-token-secret}")
val jsonTokenSecret: String = "secret",
@Value("\${security-access-token-expired-mns}")
val accessTokenExpiredMns: Int = 10,
@Value("\${security-refresh-token-expired-days}")
val refreshTokenExpiredDays: Int = 1,
@Value("\${security-tokens-in-header}")
val tokensInHeader: Boolean = false
)发布于 2022-04-18 21:43:17
您可以执行以下操作:
@Value("\${security-json-token-secret:secret}")
lateinit var jsonTokenSecret: String
@Value("\${security-access-token-expired-mns:10}")
lateinit var accessTokenExpiredMns: Int
@Value("\${security-refresh-token-expired-days:1}")
lateinit var refreshTokenExpiredDays: Int
@Value("\${security-tokens-in-header: false}")
lateinit var tokensInHeader: Boolean注意:为了将值注入到类中,类(筛选器或其他)需要是@Bean或@Component。在您的编辑中,您似乎正在手动构造它,在这种情况下,您的属性将不会被Spring处理。
此外,还有其他技术代替了@Value,例如使用@ConfigurationProperties。
https://stackoverflow.com/questions/71904504
复制相似问题