Сегодня я перестраиваю свой проект и получаю это сообщение об ошибке:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'SecurityConfig' may not be final. Remove the final modifier to continue.
Offending resource: class path resource [com/easythings/booky/config/SecurityConfig.class]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
Если я изменю свой класс на «открытый», я получу следующие ошибки о моих полях в этом классе.
Класс:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true, prePostEnabled = true)
class SecurityConfig : WebSecurityConfigurerAdapter() {
@Autowired
internal var customUserDetailsService: CustomUserDetailsService? = null
@Autowired
private val unauthorizedHandler: JwtAuthenticationEntryPoint? = null
@Bean
fun jwtAuthenticationFilter(): JwtAuthenticationFilter {
return JwtAuthenticationFilter()
}
@Throws(Exception::class)
public override fun configure(authenticationManagerBuilder: AuthenticationManagerBuilder?) {
authenticationManagerBuilder!!
.userDetailsService<UserDetailsService>(customUserDetailsService)
.passwordEncoder(passwordEncoder())
}
@Bean(BeanIds.AUTHENTICATION_MANAGER)
@Throws(Exception::class)
override fun authenticationManagerBean(): AuthenticationManager {
return super.authenticationManagerBean()
}
@Bean
fun passwordEncoder(): PasswordEncoder {
return BCryptPasswordEncoder()
}
@Throws(Exception::class)
override fun configure(http: HttpSecurity) {
http
.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js")
.permitAll()
.antMatchers("/api/auth/**")
.permitAll()
.antMatchers("/api/user/checkUsernameAvailability", "/api/user/checkEmailAvailability")
.permitAll()
.antMatchers(HttpMethod.GET, "/api/users/**")
.permitAll()
.anyRequest()
.authenticated()
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter::class.java)
}
}
Это работает вчера, я ничего не изменил в коде. Единственное изменение, которое мне пришлось сделать, - это снова установить версию JVM в конфигурации.
Как это исправить?