Skip to content

Commit 4c0bbf0

Browse files
authored
example code for BAEL-3749 (eugenp#8815)
* example code for BAEL-3749 * added live test * added live test * improved exception handling in response log filter * propage exception in example code * updated repo with upstream * added example code for BAEL-3293 * updated the example code for BAEL-3749 * updated the example code for BAEL-3749 * updated the example code for BAEL-3749 * updated the example code for BAEL-3749
1 parent 00911b4 commit 4c0bbf0

57 files changed

Lines changed: 1381 additions & 1889 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cas/cas-secured-app/pom.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111

1212
<parent>
1313
<groupId>com.baeldung</groupId>
14-
<artifactId>parent-boot-1</artifactId>
14+
<artifactId>parent-boot-2</artifactId>
1515
<version>0.0.1-SNAPSHOT</version>
16-
<relativePath>../../parent-boot-1</relativePath>
16+
<relativePath>../../parent-boot-2</relativePath>
1717
</parent>
1818

19+
<properties>
20+
<spring-boot.version>2.2.6.RELEASE</spring-boot.version>
21+
</properties>
22+
1923
<dependencies>
2024
<dependency>
2125
<groupId>org.springframework.boot</groupId>

cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java

Lines changed: 0 additions & 91 deletions
This file was deleted.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.baeldung.cassecuredapp;
2+
3+
import org.jasig.cas.client.session.SingleSignOutFilter;
4+
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
5+
import org.jasig.cas.client.validation.Cas30ServiceTicketValidator;
6+
import org.jasig.cas.client.validation.TicketValidator;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.boot.SpringApplication;
10+
import org.springframework.boot.autoconfigure.SpringBootApplication;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Primary;
13+
import org.springframework.context.event.EventListener;
14+
import org.springframework.security.authentication.AuthenticationManager;
15+
import org.springframework.security.cas.ServiceProperties;
16+
import org.springframework.security.cas.authentication.CasAuthenticationProvider;
17+
import org.springframework.security.cas.web.CasAuthenticationEntryPoint;
18+
import org.springframework.security.cas.web.CasAuthenticationFilter;
19+
import org.springframework.security.core.authority.AuthorityUtils;
20+
import org.springframework.security.core.userdetails.User;
21+
import org.springframework.security.web.AuthenticationEntryPoint;
22+
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
23+
import org.springframework.security.web.authentication.logout.LogoutFilter;
24+
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
25+
26+
import javax.servlet.http.HttpSessionEvent;
27+
28+
@SpringBootApplication
29+
public class CasSecuredApplication {
30+
31+
private static final Logger logger = LoggerFactory.getLogger(CasSecuredApplication.class);
32+
33+
public static void main(String... args) {
34+
SpringApplication.run(CasSecuredApplication.class, args);
35+
}
36+
37+
@Bean
38+
public CasAuthenticationFilter casAuthenticationFilter(
39+
AuthenticationManager authenticationManager,
40+
ServiceProperties serviceProperties) throws Exception {
41+
CasAuthenticationFilter filter = new CasAuthenticationFilter();
42+
filter.setAuthenticationManager(authenticationManager);
43+
filter.setServiceProperties(serviceProperties);
44+
return filter;
45+
}
46+
47+
@Bean
48+
public ServiceProperties serviceProperties() {
49+
logger.info("service properties");
50+
ServiceProperties serviceProperties = new ServiceProperties();
51+
serviceProperties.setService("http://cas-client:8900/login/cas");
52+
serviceProperties.setSendRenew(false);
53+
return serviceProperties;
54+
}
55+
56+
@Bean
57+
public TicketValidator ticketValidator() {
58+
return new Cas30ServiceTicketValidator("https://localhost:8443");
59+
}
60+
61+
@Bean
62+
public CasAuthenticationProvider casAuthenticationProvider(
63+
TicketValidator ticketValidator,
64+
ServiceProperties serviceProperties) {
65+
CasAuthenticationProvider provider = new CasAuthenticationProvider();
66+
provider.setServiceProperties(serviceProperties);
67+
provider.setTicketValidator(ticketValidator);
68+
provider.setUserDetailsService(
69+
s -> new User("[email protected]", "Mellon", true, true, true, true,
70+
AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
71+
provider.setKey("CAS_PROVIDER_LOCALHOST_8900");
72+
return provider;
73+
}
74+
75+
76+
@Bean
77+
public SecurityContextLogoutHandler securityContextLogoutHandler() {
78+
return new SecurityContextLogoutHandler();
79+
}
80+
81+
@Bean
82+
public LogoutFilter logoutFilter() {
83+
LogoutFilter logoutFilter = new LogoutFilter("https://localhost:8443/logout", securityContextLogoutHandler());
84+
logoutFilter.setFilterProcessesUrl("/logout/cas");
85+
return logoutFilter;
86+
}
87+
88+
@Bean
89+
public SingleSignOutFilter singleSignOutFilter() {
90+
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
91+
singleSignOutFilter.setCasServerUrlPrefix("https://localhost:8443");
92+
singleSignOutFilter.setLogoutCallbackPath("/exit/cas");
93+
singleSignOutFilter.setIgnoreInitConfiguration(true);
94+
return singleSignOutFilter;
95+
}
96+
97+
}

cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.baeldung.cassecuredapp.config;
2+
3+
import org.jasig.cas.client.session.SingleSignOutFilter;
4+
import org.jasig.cas.client.validation.Cas30ServiceTicketValidator;
5+
import org.jasig.cas.client.validation.TicketValidator;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.context.annotation.Bean;
10+
import org.springframework.context.annotation.Primary;
11+
import org.springframework.security.authentication.AuthenticationManager;
12+
import org.springframework.security.authentication.ProviderManager;
13+
import org.springframework.security.cas.ServiceProperties;
14+
import org.springframework.security.cas.authentication.CasAuthenticationProvider;
15+
import org.springframework.security.cas.web.CasAuthenticationEntryPoint;
16+
import org.springframework.security.cas.web.CasAuthenticationFilter;
17+
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
18+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
19+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
20+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
21+
import org.springframework.security.core.authority.AuthorityUtils;
22+
import org.springframework.security.core.userdetails.User;
23+
import org.springframework.security.web.AuthenticationEntryPoint;
24+
import org.springframework.security.web.authentication.logout.LogoutFilter;
25+
26+
import java.util.Collections;
27+
28+
@EnableWebSecurity
29+
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
30+
31+
private Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);
32+
private SingleSignOutFilter singleSignOutFilter;
33+
private LogoutFilter logoutFilter;
34+
private CasAuthenticationProvider casAuthenticationProvider;
35+
private ServiceProperties serviceProperties;
36+
37+
@Autowired
38+
public WebSecurityConfig(SingleSignOutFilter singleSignOutFilter, LogoutFilter logoutFilter,
39+
CasAuthenticationProvider casAuthenticationProvider,
40+
ServiceProperties serviceProperties) {
41+
this.logoutFilter = logoutFilter;
42+
this.singleSignOutFilter = singleSignOutFilter;
43+
this.serviceProperties = serviceProperties;
44+
this.casAuthenticationProvider = casAuthenticationProvider;
45+
}
46+
47+
48+
@Override
49+
protected void configure(HttpSecurity http) throws Exception {
50+
http.authorizeRequests().antMatchers( "/secured", "/login").authenticated()
51+
.and()
52+
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
53+
.and()
54+
.addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class)
55+
.addFilterBefore(logoutFilter, LogoutFilter.class)
56+
.csrf().ignoringAntMatchers("/exit/cas");
57+
}
58+
59+
@Override
60+
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
61+
auth.authenticationProvider(casAuthenticationProvider);
62+
}
63+
64+
@Bean
65+
@Override
66+
protected AuthenticationManager authenticationManager() throws Exception {
67+
return new ProviderManager(Collections.singletonList(casAuthenticationProvider));
68+
}
69+
70+
public AuthenticationEntryPoint authenticationEntryPoint() {
71+
CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint();
72+
entryPoint.setLoginUrl("https://localhost:8443/login");
73+
entryPoint.setServiceProperties(serviceProperties);
74+
return entryPoint;
75+
}
76+
77+
78+
79+
}

0 commit comments

Comments
 (0)