Merge pull request #15923 from michael-pratt/BAEL-7438
[BAEL-7438] Custom Spring AuthorizationManager example
This commit is contained in:
		
						commit
						5e24e9d495
					
				| @ -0,0 +1,28 @@ | ||||
| package com.baeldung.authorizationmanager; | ||||
| 
 | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| 
 | ||||
| @RestController | ||||
| public class DemoController { | ||||
|     @GetMapping("/anonymous") | ||||
|     public String anonymousResource() { | ||||
|         return "anonymous"; | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/adminonly") | ||||
|     public String adminResource() { | ||||
|         return "admin only"; | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/authororeditor") | ||||
|     public String authorOrEditorResource() { | ||||
|         return "author or editor"; | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/custom") | ||||
|     public String customResource() { | ||||
|         return "custom"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -0,0 +1,65 @@ | ||||
| package com.baeldung.authorizationmanager; | ||||
| 
 | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.security.authorization.AuthorizationDecision; | ||||
| import org.springframework.security.authorization.AuthorizationManager; | ||||
| import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; | ||||
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.security.core.userdetails.User; | ||||
| import org.springframework.security.core.userdetails.UserDetails; | ||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||
| import org.springframework.security.crypto.password.PasswordEncoder; | ||||
| import org.springframework.security.provisioning.InMemoryUserDetailsManager; | ||||
| import org.springframework.security.web.SecurityFilterChain; | ||||
| import org.springframework.security.web.access.intercept.RequestAuthorizationContext; | ||||
| 
 | ||||
| import java.util.Random; | ||||
| import java.util.function.Supplier; | ||||
| 
 | ||||
| import static org.springframework.security.config.Customizer.withDefaults; | ||||
| 
 | ||||
| @Configuration | ||||
| @EnableMethodSecurity | ||||
| public class DemoSecurityConfig { | ||||
| 
 | ||||
|     @Bean | ||||
|     SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { | ||||
|         http.authorizeHttpRequests((authorize) -> authorize | ||||
|             .requestMatchers("/custom/**").access(customAuthManager()) | ||||
|             .requestMatchers("/adminonly/**").hasRole("ADMIN") | ||||
|             .requestMatchers("/editororauthor/**").hasAnyRole("EDITOR","AUTHOR") | ||||
|             .anyRequest().permitAll()) | ||||
|             .formLogin(withDefaults()); | ||||
|         return http.build(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public InMemoryUserDetailsManager userDetailsService() { | ||||
|         UserDetails admin = User.withUsername("admin") | ||||
|             .password(passwordEncoder().encode("admin")) | ||||
|             .roles("ADMIN") | ||||
|             .build(); | ||||
|         UserDetails author = User.withUsername("author") | ||||
|             .password(passwordEncoder().encode("author")) | ||||
|             .roles("AUTHOR") | ||||
|             .build(); | ||||
|         UserDetails editor = User.withUsername("editor") | ||||
|             .password(passwordEncoder().encode("editor")) | ||||
|             .roles("EDITOR") | ||||
|             .build(); | ||||
|         return new InMemoryUserDetailsManager(admin, author, editor); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     PasswordEncoder passwordEncoder() { | ||||
|         return new BCryptPasswordEncoder(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     AuthorizationManager<RequestAuthorizationContext> customAuthManager() { | ||||
|         return (authentication, object) -> new AuthorizationDecision(new Random().nextBoolean()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -0,0 +1,14 @@ | ||||
| package com.baeldung.authorizationmanager; | ||||
| 
 | ||||
| import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
| 
 | ||||
| @SpringBootApplication | ||||
| public class SpringSecurityAuthManagerDemoApplication { | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         SpringApplication.run(SpringSecurityAuthManagerDemoApplication.class, args); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user