1+ package org .cloudfoundry .identity .uaa .approval .beans ;
2+
3+ import org .cloudfoundry .identity .uaa .oauth .UaaTokenServices ;
4+ import org .cloudfoundry .identity .uaa .oauth .provider .authentication .OAuth2AuthenticationManager ;
5+ import org .cloudfoundry .identity .uaa .oauth .provider .authentication .OAuth2AuthenticationProcessingFilter ;
6+ import org .cloudfoundry .identity .uaa .oauth .provider .error .OAuth2AccessDeniedHandler ;
7+ import org .cloudfoundry .identity .uaa .oauth .provider .error .OAuth2AuthenticationEntryPoint ;
8+ import org .cloudfoundry .identity .uaa .web .FilterChainOrder ;
9+ import org .cloudfoundry .identity .uaa .web .UaaFilterChain ;
10+ import org .springframework .beans .factory .annotation .Autowired ;
11+ import org .springframework .beans .factory .annotation .Qualifier ;
12+ import org .springframework .context .annotation .Bean ;
13+ import org .springframework .context .annotation .Configuration ;
14+ import org .springframework .core .annotation .Order ;
15+ import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
16+ import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
17+ import org .springframework .security .config .annotation .web .configurers .CsrfConfigurer ;
18+ import org .springframework .security .config .http .SessionCreationPolicy ;
19+ import org .springframework .security .web .SecurityFilterChain ;
20+ import org .springframework .security .web .authentication .www .BasicAuthenticationFilter ;
21+
22+ import static org .cloudfoundry .identity .uaa .web .AuthorizationManagersUtils .anyOf ;
23+
24+ @ Configuration
25+ @ EnableWebSecurity
26+ public class ApprovalsSecurityConfiguration {
27+
28+ @ Autowired
29+ @ Qualifier ("tokenServices" )
30+ private UaaTokenServices tokenServices ;
31+
32+ @ Autowired
33+ @ Qualifier ("oauthAuthenticationEntryPoint" )
34+ OAuth2AuthenticationEntryPoint oauthAuthenticationEntryPoint ;
35+
36+ @ Autowired
37+ @ Qualifier ("oauthAccessDeniedHandler" )
38+ OAuth2AccessDeniedHandler oauthAccessDeniedHandler ;
39+
40+
41+ @ Bean
42+ OAuth2AuthenticationProcessingFilter approvalsResourceAuthenticationFilter () {
43+ OAuth2AuthenticationProcessingFilter bean = new OAuth2AuthenticationProcessingFilter ();
44+ OAuth2AuthenticationManager authenticationManager = new OAuth2AuthenticationManager ();
45+ authenticationManager .setResourceId ("oauth" );
46+ authenticationManager .setTokenServices (tokenServices );
47+ bean .setAuthenticationManager (authenticationManager );
48+ return bean ;
49+ }
50+ @ Bean
51+ @ Order (FilterChainOrder .APPROVAL )
52+ UaaFilterChain approvalsSecurity (HttpSecurity http ) throws Exception {
53+ SecurityFilterChain chain = http
54+ .securityMatcher ("/approvals/**" )
55+ .authorizeHttpRequests ( auth -> {
56+ auth .requestMatchers ("/**" ).access (anyOf (true ).hasScope ("oauth.approvals" ));
57+ auth .anyRequest ().denyAll ();
58+ })
59+ .sessionManagement (session -> session .sessionCreationPolicy (SessionCreationPolicy .STATELESS ))
60+ .addFilterBefore (approvalsResourceAuthenticationFilter (), BasicAuthenticationFilter .class )
61+ .csrf (CsrfConfigurer ::disable )
62+ .exceptionHandling (exception ->
63+ exception .authenticationEntryPoint (oauthAuthenticationEntryPoint )
64+ .accessDeniedHandler (oauthAccessDeniedHandler )
65+ )
66+ .build ();
67+
68+ return new UaaFilterChain (chain , "approvalsSecurity" );
69+ }
70+ }
0 commit comments