Skip to content

Commit deb37c1

Browse files
committed
Spring Session Authentication
1 parent 596257a commit deb37c1

15 files changed

Lines changed: 596 additions & 1 deletion

File tree

stateless-auth/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<modules>
1111
<module>simple-auth-service</module>
1212
<module>stateless-auth-dto</module>
13+
<module>spring-session-auth</module>
1314
</modules>
1415
<packaging>pom</packaging>
1516

stateless-auth/simple-auth-service/src/main/resources/database.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ hibernate.c3p0.maxStatements = 50
2121
hibernate.show_sql=true
2222
hibernate.format_sql=true
2323
hibernate.tablePrefix=none
24-
hibernate.hbm2ddl_auto=create
24+
hibernate.hbm2ddl_auto=update
2525
hibernate.entities_scan=com.fd
2626
hibernate.repositories_scan=com.fd
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>stateless-auth</artifactId>
7+
<groupId>com.fd</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>spring-session-auth</artifactId>
13+
14+
<properties>
15+
<mapstruct.version>1.2.0.Final</mapstruct.version>
16+
<hibernate.jpamodelgen-version>5.3.2.Final</hibernate.jpamodelgen-version>
17+
<jaxb.version>2.3.0</jaxb.version>
18+
</properties>
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>org.springframework.boot</groupId>
23+
<artifactId>spring-boot-starter-web</artifactId>
24+
<exclusions>
25+
<exclusion>
26+
<groupId>ch.qos.logback</groupId>
27+
<artifactId>logback-classic</artifactId>
28+
</exclusion>
29+
30+
<exclusion>
31+
<groupId>org.apache.logging.log4j</groupId>
32+
<artifactId>log4j-to-slf4j</artifactId>
33+
</exclusion>
34+
</exclusions>
35+
</dependency>
36+
37+
<dependency>
38+
<groupId>org.springframework.boot</groupId>
39+
<artifactId>spring-boot-starter-security</artifactId>
40+
<exclusions>
41+
<exclusion>
42+
<groupId>ch.qos.logback</groupId>
43+
<artifactId>logback-classic</artifactId>
44+
</exclusion>
45+
46+
<exclusion>
47+
<groupId>org.apache.logging.log4j</groupId>
48+
<artifactId>log4j-to-slf4j</artifactId>
49+
</exclusion>
50+
</exclusions>
51+
</dependency>
52+
53+
<dependency>
54+
<groupId>org.springframework.boot</groupId>
55+
<artifactId>spring-boot-starter-data-jpa</artifactId>
56+
<exclusions>
57+
<exclusion>
58+
<groupId>ch.qos.logback</groupId>
59+
<artifactId>logback-classic</artifactId>
60+
</exclusion>
61+
62+
<exclusion>
63+
<groupId>org.apache.logging.log4j</groupId>
64+
<artifactId>log4j-to-slf4j</artifactId>
65+
</exclusion>
66+
</exclusions>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>org.springframework.session</groupId>
71+
<artifactId>spring-session-data-redis</artifactId>
72+
</dependency>
73+
74+
<dependency>
75+
<groupId>io.lettuce</groupId>
76+
<artifactId>lettuce-core</artifactId>
77+
</dependency>
78+
79+
<dependency>
80+
<groupId>org.hibernate</groupId>
81+
<artifactId>hibernate-c3p0</artifactId>
82+
</dependency>
83+
84+
<dependency>
85+
<groupId>org.postgresql</groupId>
86+
<artifactId>postgresql</artifactId>
87+
</dependency>
88+
89+
<dependency>
90+
<groupId>org.mapstruct</groupId>
91+
<artifactId>mapstruct-jdk8</artifactId>
92+
<version>${mapstruct.version}</version>
93+
</dependency>
94+
95+
<dependency>
96+
<groupId>javax.xml.bind</groupId>
97+
<artifactId>jaxb-api</artifactId>
98+
<version>${jaxb.version}</version>
99+
</dependency>
100+
101+
<dependency>
102+
<groupId>com.fd</groupId>
103+
<artifactId>stateless-auth-dto</artifactId>
104+
<version>1.0-SNAPSHOT</version>
105+
</dependency>
106+
</dependencies>
107+
108+
<build>
109+
<plugins>
110+
111+
<!-- MAVEN COMPILER PLUGIN -->
112+
<plugin>
113+
<groupId>org.apache.maven.plugins</groupId>
114+
<artifactId>maven-compiler-plugin</artifactId>
115+
<version>${maven.plugin.compiler.version}</version>
116+
<configuration>
117+
<source>${java-version}</source>
118+
<target>${java-version}</target>
119+
<encoding>UTF-8</encoding>
120+
121+
<annotationProcessorPaths>
122+
<path>
123+
<groupId>org.mapstruct</groupId>
124+
<artifactId>mapstruct-processor</artifactId>
125+
<version>${mapstruct.version}</version>
126+
</path>
127+
<path>
128+
<groupId>org.projectlombok</groupId>
129+
<artifactId>lombok</artifactId>
130+
<version>${lombok-version}</version>
131+
</path>
132+
</annotationProcessorPaths>
133+
</configuration>
134+
</plugin>
135+
136+
<!-- MAVEN ADD GENERATED-SOURCES TO CLASSPATH -->
137+
<plugin>
138+
<groupId>org.codehaus.mojo</groupId>
139+
<artifactId>build-helper-maven-plugin</artifactId>
140+
<version>${maven.plugin.build-helper.version}</version>
141+
<executions>
142+
<execution>
143+
<phase>generate-sources</phase>
144+
<goals>
145+
<goal>add-source</goal>
146+
</goals>
147+
<configuration>
148+
<sources>
149+
<source>target/generated-sources/annotations</source>
150+
</sources>
151+
</configuration>
152+
</execution>
153+
</executions>
154+
</plugin>
155+
156+
<!-- Hibernate Type Safe metamodel -->
157+
<plugin>
158+
<groupId>org.bsc.maven</groupId>
159+
<artifactId>maven-processor-plugin</artifactId>
160+
<version>${maven.plugin.processor.version}</version>
161+
<executions>
162+
<execution>
163+
<id>process</id>
164+
<goals>
165+
<goal>process</goal>
166+
</goals>
167+
<phase>generate-sources</phase>
168+
<configuration>
169+
<processors>
170+
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
171+
</processors>
172+
<outputDirectory>target/generated-sources/annotations</outputDirectory>
173+
</configuration>
174+
</execution>
175+
</executions>
176+
<dependencies>
177+
<dependency>
178+
<groupId>org.hibernate</groupId>
179+
<artifactId>hibernate-jpamodelgen</artifactId>
180+
<version>${hibernate.jpamodelgen-version}</version>
181+
</dependency>
182+
</dependencies>
183+
</plugin>
184+
</plugins>
185+
</build>
186+
187+
</project>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.fd.tryout.security.springsession;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.boot.SpringApplication;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
7+
/**
8+
* @author fdanismaz
9+
* date: 10/7/18 8:34 PM
10+
*/
11+
@Slf4j
12+
@SpringBootApplication
13+
public class App {
14+
15+
public static void main(String[] args) {
16+
SpringApplication.run(App.class);
17+
log.info("Application started...");
18+
}
19+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.fd.tryout.security.springsession.config;
2+
3+
import com.mchange.v2.c3p0.ComboPooledDataSource;
4+
import org.hibernate.jpa.HibernatePersistenceProvider;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.context.annotation.PropertySource;
9+
import org.springframework.core.env.Environment;
10+
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
11+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
12+
import org.springframework.orm.jpa.JpaTransactionManager;
13+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
14+
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
15+
import org.springframework.transaction.annotation.EnableTransactionManagement;
16+
17+
import java.beans.PropertyVetoException;
18+
import java.util.Properties;
19+
20+
/**
21+
* @author fdanismaz
22+
* date: 10/7/18 1:59 PM
23+
*/
24+
@Configuration
25+
@PropertySource("database.properties")
26+
@EnableTransactionManagement
27+
@EnableJpaRepositories(basePackages = "${hibernate.repositories_scan}")
28+
public class DatabaseConfig {
29+
30+
@Autowired
31+
private Environment environment;
32+
33+
@Bean
34+
public ComboPooledDataSource dataSource() throws PropertyVetoException {
35+
ComboPooledDataSource dataSource = new ComboPooledDataSource();
36+
dataSource.setDriverClass(this.environment.getProperty("hibernate.driver"));
37+
dataSource.setJdbcUrl(this.environment.getProperty("hibernate.db_url"));
38+
dataSource.setUser(this.environment.getProperty("hibernate.db_user"));
39+
dataSource.setPassword(this.environment.getProperty("hibernate.db_password"));
40+
41+
// C3P0 Connection Pool Settings
42+
dataSource.setAcquireIncrement(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.acquire_increment")));
43+
dataSource.setInitialPoolSize(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.initialPoolSize")));
44+
dataSource.setMinPoolSize(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.minPoolSize")));
45+
dataSource.setMaxPoolSize(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.maxPoolSize")));
46+
dataSource.setMaxIdleTime(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.maxIdleTime")));
47+
dataSource.setIdleConnectionTestPeriod(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.idleConnectionTestPeriod")));
48+
dataSource.setMaxStatements(Integer.parseInt(this.environment.getProperty("hibernate.c3p0.maxStatements")));
49+
50+
return dataSource;
51+
}
52+
53+
@Bean
54+
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws PropertyVetoException {
55+
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
56+
vendorAdapter.setGenerateDdl(true);
57+
58+
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
59+
factory.setJpaVendorAdapter(vendorAdapter);
60+
factory.setPackagesToScan(this.environment.getProperty("hibernate.entities_scan"));
61+
factory.setDataSource(this.dataSource());
62+
factory.setPersistenceProviderClass(HibernatePersistenceProvider.class);
63+
factory.setJpaProperties(this.hibernateProperties());
64+
65+
return factory;
66+
}
67+
68+
@Bean
69+
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
70+
return new PersistenceExceptionTranslationPostProcessor();
71+
}
72+
73+
@Bean
74+
public JpaTransactionManager transactionManager() throws PropertyVetoException {
75+
JpaTransactionManager transactionManager = new JpaTransactionManager();
76+
transactionManager.setEntityManagerFactory(this.entityManagerFactory().getObject());
77+
return transactionManager;
78+
}
79+
80+
private Properties hibernateProperties() {
81+
Properties properties = new Properties();
82+
properties.put("hibernate.dialect", this.environment.getProperty("hibernate.dialect"));
83+
properties.put("hibernate.show_sql", this.environment.getProperty("hibernate.show_sql"));
84+
properties.put("hibernate.format_sql", this.environment.getProperty("hibernate.format_sql"));
85+
properties.put("hibernate.hbm2ddl.auto", this.environment.getProperty("hibernate.hbm2ddl_auto"));
86+
return properties;
87+
}
88+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.fd.tryout.security.springsession.config;
2+
3+
import com.fd.tryout.security.springsession.repository.user.UserRepository;
4+
import com.fd.tryout.security.springsession.security.DbAuthenticationProvider;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.security.authentication.AuthenticationProvider;
10+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
11+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
12+
13+
/**
14+
* @author fdanismaz
15+
* date: 10/7/18 1:23 PM
16+
*/
17+
@Slf4j
18+
@Configuration
19+
public class SecurityConfig extends WebSecurityConfigurerAdapter {
20+
21+
@Autowired
22+
private UserRepository userRepository;
23+
24+
@Bean
25+
public AuthenticationProvider authenticationProvider() {
26+
return new DbAuthenticationProvider(this.userRepository);
27+
}
28+
29+
@Override
30+
protected void configure(HttpSecurity http) throws Exception {
31+
http.authorizeRequests()
32+
.anyRequest().authenticated()
33+
.and()
34+
.httpBasic()
35+
.and()
36+
.formLogin().permitAll();
37+
}
38+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.fd.tryout.security.springsession.controller;
2+
3+
import com.fd.tryout.security.dto.Customer;
4+
import org.springframework.web.bind.annotation.GetMapping;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.time.LocalDate;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
/**
13+
* @author fdanismaz
14+
* date: 10/7/18 12:40 PM
15+
*/
16+
@RestController
17+
@RequestMapping("/customer")
18+
public class CustomerController {
19+
20+
@GetMapping
21+
public List<Customer> list() {
22+
Customer c1 = Customer.builder()
23+
.id("1").name("john doe").company("acme").birthdate(LocalDate.now().minusYears(28)).build();
24+
Customer c2 = Customer.builder()
25+
.id("2").name("jane doe").company("acme").birthdate(LocalDate.now().minusYears(24)).build();
26+
List<Customer> result = new ArrayList<>();
27+
result.add(c1);
28+
result.add(c2);
29+
return result;
30+
}
31+
}

0 commit comments

Comments
 (0)