首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin @Value不设置变量spingboot安全性

Kotlin @Value不设置变量spingboot安全性
EN

Stack Overflow用户
提问于 2022-04-17 18:36:40
回答 1查看 175关注 0票数 -1

试图通过从AuthenticationManager of SpringBootSecurity中获取值来设置application.properties中的一些参数,但这些值只是默认设置的参数,而不是application.properties文件中的参数。

在我的应用程序的其他地方使用@Value是没有问题的,但是在这个类中,命名是错误的.无论我在application.properties中设置了什么,这些值都是缺省值。例如,refreshTokenExpiredDays应该是4(参见下面的applicationproperties文件),但实际上它是1

代码语言:javascript
复制
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

代码语言:javascript
复制
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中的配置函数时,会调用这个过滤器类。

代码语言:javascript
复制
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变量的构造函数中注入该类

代码语言:javascript
复制
@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
)
EN

回答 1

Stack Overflow用户

发布于 2022-04-18 21:43:17

您可以执行以下操作:

代码语言:javascript
复制
        @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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71904504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档