diff --git a/security-modules/cas/cas-secured-app/pom.xml b/security-modules/cas/cas-secured-app/pom.xml
index 6f1ec22cb5..7c4864b1c0 100644
--- a/security-modules/cas/cas-secured-app/pom.xml
+++ b/security-modules/cas/cas-secured-app/pom.xml
@@ -36,6 +36,15 @@
spring-boot-devtools
runtime
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
org.springframework.boot
spring-boot-starter-test
@@ -46,6 +55,11 @@
spring-security-test
test
+
+ com.h2database
+ h2
+ ${h2.version}
+
diff --git a/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredApplication.java b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredApplication.java
index 62da9cf725..f78d7a45d5 100644
--- a/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredApplication.java
+++ b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredApplication.java
@@ -1,7 +1,6 @@
package com.baeldung.cassecuredapp;
import org.jasig.cas.client.session.SingleSignOutFilter;
-import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.validation.Cas30ServiceTicketValidator;
import org.jasig.cas.client.validation.TicketValidator;
import org.slf4j.Logger;
@@ -9,21 +8,16 @@ import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-import org.springframework.context.event.EventListener;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.cas.ServiceProperties;
import org.springframework.security.cas.authentication.CasAuthenticationProvider;
-import org.springframework.security.cas.web.CasAuthenticationEntryPoint;
import org.springframework.security.cas.web.CasAuthenticationFilter;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
-import org.springframework.security.web.AuthenticationEntryPoint;
-import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.authentication.logout.LogoutFilter;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
-import javax.servlet.http.HttpSessionEvent;
+import com.baeldung.cassecuredapp.service.CasUserDetailsService;
@SpringBootApplication
public class CasSecuredApplication {
@@ -34,6 +28,7 @@ public class CasSecuredApplication {
SpringApplication.run(CasSecuredApplication.class, args);
}
+
@Bean
public CasAuthenticationFilter casAuthenticationFilter(
AuthenticationManager authenticationManager,
@@ -58,6 +53,10 @@ public class CasSecuredApplication {
return new Cas30ServiceTicketValidator("https://localhost:8443/cas");
}
+ @Bean
+ public CasUserDetailsService getUser(){
+ return new CasUserDetailsService();
+ }
@Bean
public CasAuthenticationProvider casAuthenticationProvider(
TicketValidator ticketValidator,
@@ -68,6 +67,8 @@ public class CasSecuredApplication {
provider.setUserDetailsService(
s -> new User("casuser", "Mellon", true, true, true, true,
AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
+ //For Authentication with a Database-backed UserDetailsService
+ //provider.setUserDetailsService(getUser());
provider.setKey("CAS_PROVIDER_LOCALHOST_8900");
return provider;
}
diff --git a/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/service/CasUserDetailsService.java b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/service/CasUserDetailsService.java
new file mode 100644
index 0000000000..801f5726b7
--- /dev/null
+++ b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/service/CasUserDetailsService.java
@@ -0,0 +1,37 @@
+package com.baeldung.cassecuredapp.service;
+
+import java.util.Collections;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+
+import com.baeldung.cassecuredapp.user.CasUser;
+import com.baeldung.cassecuredapp.user.UserRepository;
+
+public class CasUserDetailsService implements UserDetailsService {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ // Get the user from the database.
+ CasUser casUser = getUserFromDatabase(username);
+
+ // Create a UserDetails object.
+ UserDetails userDetails = new User(
+ casUser.getEmail(),
+ casUser.getPassword(),
+ Collections.singletonList(new SimpleGrantedAuthority("ROLE_ADMIN")));
+
+ return userDetails;
+ }
+
+ private CasUser getUserFromDatabase(String username) {
+ return userRepository.findByEmail(username);
+ }
+}
diff --git a/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/CasUser.java b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/CasUser.java
new file mode 100644
index 0000000000..2bf96d0994
--- /dev/null
+++ b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/CasUser.java
@@ -0,0 +1,41 @@
+package com.baeldung.cassecuredapp.user;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class CasUser {
+ @Id
+ private Long id;
+
+ @Column(nullable = false, unique = true)
+ private String email;
+
+ private String password;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/UserRepository.java b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/UserRepository.java
new file mode 100644
index 0000000000..623ccf2e38
--- /dev/null
+++ b/security-modules/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/user/UserRepository.java
@@ -0,0 +1,12 @@
+package com.baeldung.cassecuredapp.user;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserRepository extends CrudRepository {
+
+ CasUser findByEmail(@Param("email") String email);
+
+}
diff --git a/security-modules/cas/cas-secured-app/src/main/resources/application.properties b/security-modules/cas/cas-secured-app/src/main/resources/application.properties
index f8789997d5..5c93c67ff1 100644
--- a/security-modules/cas/cas-secured-app/src/main/resources/application.properties
+++ b/security-modules/cas/cas-secured-app/src/main/resources/application.properties
@@ -1,2 +1,8 @@
server.port=8900
-spring.freemarker.suffix=.ftl
\ No newline at end of file
+spring.freemarker.suffix=.ftl
+
+#spring.jpa.generate-ddl=false
+#spring.datasource.url= jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
+#spring.datasource.username=root
+#spring.datasource.password=root
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
\ No newline at end of file
diff --git a/security-modules/cas/cas-server/src/main/resources/application.yml b/security-modules/cas/cas-server/src/main/resources/application.yml
index 0c4e4ffde2..a49e86dd09 100644
--- a/security-modules/cas/cas-server/src/main/resources/application.yml
+++ b/security-modules/cas/cas-server/src/main/resources/application.yml
@@ -8,3 +8,19 @@ server:
spring:
main:
allow-bean-definition-overriding: true
+#cas:
+# authn:
+# accept:
+# users:
+# jdbc:
+# query[0]:
+# sql: SELECT * FROM users WHERE email = ?
+# url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
+# dialect: org.hibernate.dialect.MySQLDialect
+# user: root
+# password: root
+# ddlAuto: none
+# driverClass: com.mysql.cj.jdbc.Driver
+# fieldPassword: password
+# passwordEncoder:
+# type: NONE