У меня относительно сложная конфигурация защиты пружины, как показано ниже. Я пытаюсь добиться следующего:
запросы к /passport/**
будут аутентифицированы, с альтернативой formLogin()
("/passport/login")
. Это отличается от стандартного formLogin, который разрешается в ("/login")
Обе формы будут использовать один и тот же механизм аутентификации (или очень похожи за кулисами).
На данный момент запросы /passport/123
et c. так или иначе являются «открытыми» и не прошедшими проверку подлинности, в то время как их нужно перенаправить на /passport/login
. Кто-нибудь может увидеть, что я делаю неправильно или как лучше всего этого добиться?
Во многих документах, которые я читал в Интернете, предлагается использовать два разных класса конфигурации , тогда как у меня есть один, но logi c для входа будет аналогичным. Принимая во внимание, что есть также достаточно много других битов, которые нужно будет реплицировать, если это вообще возможно, я хотел бы иметь только одну конфигурацию.
http
.antMatcher( "/passport/**" )
.authorizeRequests().and()
.formLogin().loginPage( "/passport/login" )
.successHandler( authSuccessHandler() )
.failureHandler( authFailureHandler() )
.and()
.antMatcher( "/**" )
.authorizeRequests()
.antMatchers( HttpMethod.OPTIONS, "/" ).permitAll()
.antMatchers( HttpMethod.GET, "/app/**" ).permitAll()
.antMatchers( LOGIN_DESTINATION + "**" ).permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.loginPage( LOGIN_DESTINATION )
.authorizationEndpoint()
.baseUri( "/oauth2/authorize" )
.authorizationRequestRepository( cookieAuthorizationRequestRepository() )
.and()
.redirectionEndpoint()
.baseUri( "/oauth2/callback/*" )
.and()
.userInfoEndpoint()
.userService( customOAuth2UserService )
.and()
.successHandler( oAuth2AuthenticationSuccessHandler )
.failureHandler( oAuth2AuthenticationFailureHandler )
.and()
.formLogin()
.loginPage( "/login" )
.successHandler( authSuccessHandler() )
.failureHandler( authFailureHandler() )
.and()
.logout()
.logoutUrl( "/logout" )
.logoutSuccessUrl( "/" )
.deleteCookies( "cookieLogin" )
.logoutSuccessHandler( ( httpServletRequest, httpServletResponse, authentication ) -> {
httpServletResponse.setStatus( HttpServletResponse.SC_OK );
} )
.and()
.rememberMe()
.rememberMeServices( new RememberMeServices( loginService, tokenService ) )
.key( TokenService.HASH_SECRET )
.and()
.csrf()
.csrfTokenRepository( new CsrfTokenRepository( tokenService ) )
.and()
.sessionManagement()
.sessionCreationPolicy( SessionCreationPolicy.STATELESS )
.and()
.addFilterBefore( new TokenFilter( tokenService, sessionManager ), CsrfFilter.class );