Работа со спагетти-лямбдами и сборщиком в Spring Security v6JAVA

Программисты JAVA общаются здесь
Гость
Работа со спагетти-лямбдами и сборщиком в Spring Security v6

Сообщение Гость »

Я работаю над адаптацией Spring Security v6 в своем приложении, и один из проектов GitHub, который я использую в качестве модели, имеет следующую реализацию filterChain в своем классе @EnableWebSecurity Configuration:

Код: Выделить всё

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.securityContext((securityContext) -> securityContext.requireExplicitSave(true))
.authorizeHttpRequests(authz -> {
authz.requestMatchers(HttpMethod.GET, "/roleHierarchy")
.hasRole("STAFF")
.requestMatchers("/login*", "/logout*", "/signin/**", "/signup/**", "/customLogin", "/user/registration*", "/registrationConfirm*", "/expiredAccount*", "/registration*", "/badUser*", "/user/resendRegistrationToken*", "/forgetPassword*",
"/user/resetPassword*", "/user/savePassword*", "/updatePassword*", "/user/changePassword*", "/emailError*", "/resources/**", "/old/user/registration*", "/successRegister*", "/qrcode*", "/user/enableNewLoc*")
.permitAll()
.requestMatchers("/invalidSession*")
.anonymous()
.requestMatchers("/user/updatePassword*")
.hasAuthority("CHANGE_PASSWORD_PRIVILEGE")
.requestMatchers("/console")
.hasAuthority("READ_PRIVILEGE")
.anyRequest()
.hasAuthority("READ_PRIVILEGE");
})
.formLogin((formLogin) -> formLogin.loginPage("/login")
.defaultSuccessUrl("/homepage.html")
.failureUrl("/login?error=true")
.successHandler(myAuthenticationSuccessHandler)
.failureHandler(authenticationFailureHandler)
.authenticationDetailsSource(authenticationDetailsSource)
.permitAll())
.sessionManagement((sessionManagement) -> sessionManagement.invalidSessionUrl("/invalidSession.html")
.maximumSessions(1)
.sessionRegistry(sessionRegistry()))
.logout((logout) -> logout.logoutSuccessHandler(myLogoutSuccessHandler)
.invalidateHttpSession(true)
.logoutSuccessUrl("/logout.html?logSucc=true")
.deleteCookies("JSESSIONID")
.permitAll())
.rememberMe((remember) -> remember.rememberMeServices(rememberMeServices()));

return http.build();
}
Я могу смутно представить, что это делает, но разборчивость этого кода ужасна. Есть ли способ разбить этот огромный и неэлегантный оператор на несколько операторов, каждый из которых умещается в одной строке в средней IDE, не переходя на следующую строку?
Что-то вроде выделения каждой лямбды в отдельную строку кода и присвоения ее объекту, а затем передачи этого объекта в качестве аргумента, в который в настоящее время передается лямбда? Другими словами, есть ли альтернативный способ атомизировать этот код, не используя лямбды, как они используются здесь, или не используя сборщик?
Что-то вроде

Код: Выделить всё

Customizer formLoginCustomizer = (formLogin) -> formLogin.loginPage("/login")
.defaultSuccessUrl("/homepage.html")
.failureUrl("/login?error=true")
.successHandler(myAuthenticationSuccessHandler)
.failureHandler(authenticationFailureHandler)
.authenticationDetailsSource(authenticationDetailsSource)
.permitAll();

http.csrf(AbstractHttpConfigurer::disable)
.securityContext(securityContextCustomizer)
.authorizeHttpRequests(authorizeHttpRequestsCustomizer)
.formLogin(formLoginCustomizer)
Мне кажется, что сейчас это похоже на попытку проглотить целую курицу, а не разрезать ее на кусочки. Если у вас нет сверхчеловеческой концентрации внимания, это нечитаемые спагетти.

Подробнее: https://stackoverflow.com/questions/799 ... ecurity-v6

Вернуться в «JAVA»