尝试通过从application.properties
获取值来设置SpringBootSecurity
的AuthenticationManager
中的一些参数,但这些值仅为默认设置的值,而不是www.example.com文件中的值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
...
...}
应用.属性
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中覆盖configure函数时会调用这个过滤器类
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
)
1条答案
按热度按时间b4wnujal1#
您可以执行以下操作:
**注意:您的类(过滤器或其他)需要是
@Bean
或@Component
才能将值注入其中。在您的[EDIT]**中,您似乎正在手动构建它,在这种情况下,Spring将不会处理您的属性。此外,存在其他技术来代替
@Value
,例如使用@ConfigurationProperties
。