I have the following directories and files structure:
src
main
java
casSecuredApp
config
- WebSecurityConfig.java
controller
AuthController.java
IndexController.java
SecuredController.java
CasSecuredAppApplication.java
WebSecurityConfig:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
private Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);
private Filter singleSignOutFilter;
private LogoutFilter logoutFilter;
private CasAuthenticationProvider casAuthenticationProvider;
private ServiceProperties serviceProperties;
@Autowired
public WebSecurityConfig(Filter singleSignOutFilter, LogoutFilter logoutFilter,
CasAuthenticationProvider casAuthenticationProvider,
ServiceProperties serviceProperties) {
this.logoutFilter = logoutFilter;
this.singleSignOutFilter = singleSignOutFilter;
this.serviceProperties = serviceProperties;
this.casAuthenticationProvider = casAuthenticationProvider;
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests().requestMatchers( "/secured", "/login").authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
.and()
.addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class)
.addFilterBefore(logoutFilter, LogoutFilter.class)
.csrf().ignoringRequestMatchers("/exit/cas");
return http.build();
}
@Autowired
void registerProvider(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(casAuthenticationProvider);
}
@Bean
AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
public AuthenticationEntryPoint authenticationEntryPoint() {
CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint();
entryPoint.setLoginUrl("https://localhost:8443/cas/login");
entryPoint.setServiceProperties(serviceProperties);
return entryPoint;
}
}
CasSecuredAppApplication
@SpringBootApplication
public class CasSecuredAppApplication {
private static final Logger logger = LoggerFactory.getLogger(CasSecuredAppApplication.class);
public static void main(String[] args) {
SpringApplication.run(CasSecuredAppApplication.class, args);
}
@Bean
public CasAuthenticationFilter casAuthenticationFilter(
AuthenticationManager authenticationManager,
ServiceProperties serviceProperties) throws Exception {
CasAuthenticationFilter filter = new CasAuthenticationFilter();
filter.setAuthenticationManager(authenticationManager);
filter.setServiceProperties(serviceProperties);
return filter;
}
@Bean
public ServiceProperties serviceProperties() {
logger.info("service properties");
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService("http://cas-client:8900/login/cas");
serviceProperties.setSendRenew(false);
return serviceProperties;
}
@Bean
public TicketValidator ticketValidator() {
return new Cas30ServiceTicketValidator("https://localhost:8443");
}
@Bean
public CasAuthenticationProvider casAuthenticationProvider(
TicketValidator ticketValidator,
ServiceProperties serviceProperties) {
CasAuthenticationProvider provider = new CasAuthenticationProvider();
provider.setServiceProperties(serviceProperties);
provider.setTicketValidator(ticketValidator);
provider.setUserDetailsService(
s -> new User("test", "test", true, true, true, true,
AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
provider.setKey("CAS_PROVIDER_LOCALHOST_8900");
return provider;
}
@Bean
public SecurityContextLogoutHandler securityContextLogoutHandler() {
return new SecurityContextLogoutHandler();
}
@Bean
public LogoutFilter logoutFilter() {
LogoutFilter logoutFilter = new LogoutFilter("https://localhost:8443/logout", securityContextLogoutHandler());
logoutFilter.setFilterProcessesUrl("/logout/cas");
return logoutFilter;
}
@Bean
public SingleSignOutFilter singleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
singleSignOutFilter.setLogoutCallbackPath("/exit/cas");
singleSignOutFilter.setIgnoreInitConfiguration(true);
return singleSignOutFilter;
}
}
I am not able to start and use this spring boot application, because I always get different exceptions.
The current problem that I have is the following error message:
Parameter 0 of constructor in casSecuredApp.casSecuredApp.config.WebSecurityConfig required a single bean, but 6 were found:
- springSecurityFilterChain: defined by method 'springSecurityFilterChain' in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]
- casAuthenticationFilter: defined by method 'casAuthenticationFilter' in casSecuredApp.CasSecuredAppApplication
- logoutFilter: defined by method 'logoutFilter' in casSecuredApp.CasSecuredAppApplication
- requestContextFilter: defined by method 'requestContextFilter' in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]
- formContentFilter: defined by method 'formContentFilter' in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class]
- characterEncodingFilter: defined by method 'characterEncodingFilter' in class path resource [org/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguratio
What do I need to change in the above code to remove this error message?