|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2020 the original author or authors. |
|
|
|
|
* Copyright 2002-2022 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -26,48 +26,56 @@ import org.springframework.context.annotation.Configuration;
@@ -26,48 +26,56 @@ import org.springframework.context.annotation.Configuration;
|
|
|
|
|
import org.springframework.context.annotation.Import; |
|
|
|
|
import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication; |
|
|
|
|
import org.springframework.security.config.annotation.web.WebSecurityConfigurer; |
|
|
|
|
import org.springframework.security.web.SecurityFilterChain; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Add this annotation to an {@code @Configuration} class to have the Spring Security |
|
|
|
|
* configuration defined in any {@link WebSecurityConfigurer} or more likely by extending |
|
|
|
|
* the {@link WebSecurityConfigurerAdapter} base class and overriding individual methods: |
|
|
|
|
* configuration defined in any {@link WebSecurityConfigurer} or more likely by exposing a |
|
|
|
|
* {@link SecurityFilterChain} bean: |
|
|
|
|
* |
|
|
|
|
* <pre class="code"> |
|
|
|
|
* @Configuration |
|
|
|
|
* @EnableWebSecurity |
|
|
|
|
* public class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter { |
|
|
|
|
* public class MyWebSecurityConfiguration { |
|
|
|
|
* |
|
|
|
|
* @Override |
|
|
|
|
* public void configure(WebSecurity web) throws Exception { |
|
|
|
|
* web.ignoring() |
|
|
|
|
* @Bean |
|
|
|
|
* public WebSecurityCustomizer webSecurityCustomizer() { |
|
|
|
|
* return (web) -> web.ignoring() |
|
|
|
|
* // Spring Security should completely ignore URLs starting with /resources/
|
|
|
|
|
* .antMatchers("/resources/**"); |
|
|
|
|
* } |
|
|
|
|
* |
|
|
|
|
* @Override |
|
|
|
|
* protected void configure(HttpSecurity http) throws Exception { |
|
|
|
|
* @Bean |
|
|
|
|
* public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { |
|
|
|
|
* http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest() |
|
|
|
|
* .hasRole("USER").and() |
|
|
|
|
* // Possibly more configuration ...
|
|
|
|
|
* .formLogin() // enable form based log in
|
|
|
|
|
* // set permitAll for all URLs associated with Form Login
|
|
|
|
|
* .permitAll(); |
|
|
|
|
* return http.build(); |
|
|
|
|
* } |
|
|
|
|
* |
|
|
|
|
* @Override |
|
|
|
|
* protected void configure(AuthenticationManagerBuilder auth) throws Exception { |
|
|
|
|
* auth |
|
|
|
|
* // enable in memory based authentication with a user named "user" and "admin"
|
|
|
|
|
* .inMemoryAuthentication().withUser("user").password("password").roles("USER") |
|
|
|
|
* .and().withUser("admin").password("password").roles("USER", "ADMIN"); |
|
|
|
|
* @Bean |
|
|
|
|
* public UserDetailsService userDetailsService() { |
|
|
|
|
* UserDetails user = User.withDefaultPasswordEncoder() |
|
|
|
|
* .username("user") |
|
|
|
|
* .password("password") |
|
|
|
|
* .roles("USER") |
|
|
|
|
* .build(); |
|
|
|
|
* UserDetails admin = User.withDefaultPasswordEncoder() |
|
|
|
|
* .username("admin") |
|
|
|
|
* .password("password") |
|
|
|
|
* .roles("ADMIN", "USER") |
|
|
|
|
* .build(); |
|
|
|
|
* return new InMemoryUserDetailsManager(user, admin); |
|
|
|
|
* } |
|
|
|
|
* |
|
|
|
|
* // Possibly more overridden methods ...
|
|
|
|
|
* // Possibly more bean methods ...
|
|
|
|
|
* } |
|
|
|
|
* </pre> |
|
|
|
|
* |
|
|
|
|
* @see WebSecurityConfigurer |
|
|
|
|
* @see WebSecurityConfigurerAdapter |
|
|
|
|
* |
|
|
|
|
* @author Rob Winch |
|
|
|
|
* @since 3.2 |
|
|
|
|
|