Skip to content

Commit d07908f

Browse files
committed
add source code for Facebook login
1 parent 979b678 commit d07908f

File tree

14 files changed

+528
-0
lines changed

14 files changed

+528
-0
lines changed

spring-social-login/pom.xml

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<artifactId>spring-social-login</artifactId>
5+
6+
<name>spring-social-login</name>
7+
<packaging>war</packaging>
8+
9+
<parent>
10+
<groupId>org.springframework.boot</groupId>
11+
<artifactId>spring-boot-starter-parent</artifactId>
12+
<version>1.4.0.RELEASE</version>
13+
<relativePath></relativePath>
14+
</parent>
15+
16+
<dependencies>
17+
18+
<dependency>
19+
<groupId>org.springframework.boot</groupId>
20+
<artifactId>spring-boot-starter-web</artifactId>
21+
</dependency>
22+
23+
<dependency>
24+
<groupId>org.springframework.boot</groupId>
25+
<artifactId>spring-boot-starter-thymeleaf</artifactId>
26+
</dependency>
27+
28+
29+
<dependency>
30+
<groupId>org.springframework.security</groupId>
31+
<artifactId>spring-security-web</artifactId>
32+
</dependency>
33+
34+
<dependency>
35+
<groupId>org.springframework.security</groupId>
36+
<artifactId>spring-security-config</artifactId>
37+
</dependency>
38+
39+
<dependency>
40+
<groupId>org.springframework.security</groupId>
41+
<artifactId>spring-security-taglibs</artifactId>
42+
</dependency>
43+
44+
<dependency>
45+
<groupId>org.thymeleaf.extras</groupId>
46+
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
47+
</dependency>
48+
49+
50+
<dependency>
51+
<groupId>org.springframework.social</groupId>
52+
<artifactId>spring-social-facebook</artifactId>
53+
</dependency>
54+
55+
<dependency>
56+
<groupId>org.springframework.boot</groupId>
57+
<artifactId>spring-boot-starter-data-jpa</artifactId>
58+
</dependency>
59+
60+
<dependency>
61+
<groupId>com.h2database</groupId>
62+
<artifactId>h2</artifactId>
63+
</dependency>
64+
65+
<!-- test -->
66+
<dependency>
67+
<groupId>org.springframework.boot</groupId>
68+
<artifactId>spring-boot-starter-test</artifactId>
69+
</dependency>
70+
71+
<dependency>
72+
<groupId>org.springframework</groupId>
73+
<artifactId>spring-test</artifactId>
74+
<scope>test</scope>
75+
</dependency>
76+
77+
<dependency>
78+
<groupId>junit</groupId>
79+
<artifactId>junit</artifactId>
80+
<scope>test</scope>
81+
</dependency>
82+
83+
<dependency>
84+
<groupId>org.apache.commons</groupId>
85+
<artifactId>commons-lang3</artifactId>
86+
<version>${commons-lang3.version}</version>
87+
</dependency>
88+
89+
</dependencies>
90+
91+
92+
<build>
93+
<finalName>spring-social-login</finalName>
94+
<resources>
95+
<resource>
96+
<directory>src/main/resources</directory>
97+
<filtering>true</filtering>
98+
</resource>
99+
</resources>
100+
101+
<plugins>
102+
<plugin>
103+
<groupId>org.apache.maven.plugins</groupId>
104+
<artifactId>maven-compiler-plugin</artifactId>
105+
<configuration>
106+
<source>1.8</source>
107+
<target>1.8</target>
108+
</configuration>
109+
</plugin>
110+
111+
<plugin>
112+
<groupId>org.apache.maven.plugins</groupId>
113+
<artifactId>maven-war-plugin</artifactId>
114+
</plugin>
115+
116+
<plugin>
117+
<groupId>org.apache.maven.plugins</groupId>
118+
<artifactId>maven-surefire-plugin</artifactId>
119+
<configuration>
120+
<excludes>
121+
<exclude>**/*IntegrationTest.java</exclude>
122+
<exclude>**/*LiveTest.java</exclude>
123+
</excludes>
124+
</configuration>
125+
</plugin>
126+
</plugins>
127+
</build>
128+
129+
<profiles>
130+
<profile>
131+
<id>integration</id>
132+
<build>
133+
<plugins>
134+
<plugin>
135+
<groupId>org.apache.maven.plugins</groupId>
136+
<artifactId>maven-surefire-plugin</artifactId>
137+
<executions>
138+
<execution>
139+
<phase>integration-test</phase>
140+
<goals>
141+
<goal>test</goal>
142+
</goals>
143+
<configuration>
144+
<excludes>
145+
<exclude>**/*LiveTest.java</exclude>
146+
</excludes>
147+
<includes>
148+
<include>**/*IntegrationTest.java</include>
149+
</includes>
150+
</configuration>
151+
</execution>
152+
</executions>
153+
<configuration>
154+
<systemPropertyVariables>
155+
<test.mime>json</test.mime>
156+
</systemPropertyVariables>
157+
</configuration>
158+
</plugin>
159+
</plugins>
160+
</build>
161+
</profile>
162+
</profiles>
163+
164+
<properties>
165+
<java.version>1.8</java.version>
166+
<commons-lang3.version>3.3.2</commons-lang3.version>
167+
</properties>
168+
169+
</project>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.baeldung.config;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.boot.autoconfigure.domain.EntityScan;
6+
import org.springframework.boot.web.support.SpringBootServletInitializer;
7+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
8+
9+
@SpringBootApplication
10+
@EnableJpaRepositories("org.baeldung.persistence.dao")
11+
@EntityScan("org.baeldung.persistence.model")
12+
public class Application extends SpringBootServletInitializer {
13+
14+
public static void main(String[] args) {
15+
SpringApplication.run(Application.class, args);
16+
}
17+
18+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.baeldung.config;
2+
3+
import org.baeldung.security.FacebookSignInAdapter;
4+
import org.baeldung.security.FacebookConnectionSignup;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.ComponentScan;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
10+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
11+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
12+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
13+
import org.springframework.security.core.userdetails.UserDetailsService;
14+
import org.springframework.social.connect.ConnectionFactoryLocator;
15+
import org.springframework.social.connect.UsersConnectionRepository;
16+
import org.springframework.social.connect.mem.InMemoryUsersConnectionRepository;
17+
import org.springframework.social.connect.web.ProviderSignInController;
18+
19+
@Configuration
20+
@EnableWebSecurity
21+
@ComponentScan(basePackages = { "org.baeldung.security" })
22+
public class SecurityConfig extends WebSecurityConfigurerAdapter {
23+
24+
@Autowired
25+
private UserDetailsService userDetailsService;
26+
27+
@Autowired
28+
private ConnectionFactoryLocator connectionFactoryLocator;
29+
30+
@Autowired
31+
private UsersConnectionRepository usersConnectionRepository;
32+
33+
@Autowired
34+
private FacebookConnectionSignup facebookConnectionSignup;
35+
36+
@Override
37+
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
38+
auth.userDetailsService(userDetailsService);
39+
}
40+
41+
@Override
42+
protected void configure(final HttpSecurity http) throws Exception {
43+
// @formatter:off
44+
http
45+
.csrf().disable()
46+
.authorizeRequests()
47+
.antMatchers("/login*","/signin/**","/signup/**").permitAll()
48+
.anyRequest().authenticated()
49+
.and()
50+
.formLogin().loginPage("/login").permitAll()
51+
.and()
52+
.logout();
53+
} // @formatter:on
54+
55+
@Bean
56+
// @Primary
57+
public ProviderSignInController providerSignInController() {
58+
((InMemoryUsersConnectionRepository) usersConnectionRepository).setConnectionSignUp(facebookConnectionSignup);
59+
return new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, new FacebookSignInAdapter());
60+
}
61+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.baeldung.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
6+
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
7+
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
8+
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
9+
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
10+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
11+
12+
@Configuration
13+
@EnableWebMvc
14+
public class WebConfig extends WebMvcConfigurerAdapter {
15+
16+
@Bean
17+
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
18+
return new PropertySourcesPlaceholderConfigurer();
19+
}
20+
21+
@Override
22+
public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) {
23+
configurer.enable();
24+
}
25+
26+
@Override
27+
public void addViewControllers(final ViewControllerRegistry registry) {
28+
super.addViewControllers(registry);
29+
registry.addViewController("/").setViewName("forward:/index");
30+
registry.addViewController("/index");
31+
registry.addViewController("/login");
32+
}
33+
34+
@Override
35+
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
36+
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
37+
}
38+
39+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.User;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface UserRepository extends JpaRepository<User, Long> {
7+
8+
User findByUsername(final String username);
9+
10+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.baeldung.persistence.model;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.GeneratedValue;
6+
import javax.persistence.GenerationType;
7+
import javax.persistence.Id;
8+
9+
@Entity
10+
public class User {
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.AUTO)
13+
private Long id;
14+
15+
@Column(nullable = false, unique = true)
16+
private String username;
17+
18+
private String password;
19+
20+
public User() {
21+
super();
22+
}
23+
24+
public Long getId() {
25+
return id;
26+
}
27+
28+
public void setId(Long id) {
29+
this.id = id;
30+
}
31+
32+
public String getUsername() {
33+
return username;
34+
}
35+
36+
public void setUsername(String username) {
37+
this.username = username;
38+
}
39+
40+
public String getPassword() {
41+
return password;
42+
}
43+
44+
public void setPassword(String password) {
45+
this.password = password;
46+
}
47+
48+
@Override
49+
public String toString() {
50+
final StringBuilder builder = new StringBuilder();
51+
builder.append("User [id=").append(id).append(", username=").append(username).append(", password=").append(password).append("]");
52+
return builder.toString();
53+
}
54+
55+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.baeldung.security;
2+
3+
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
4+
5+
import org.baeldung.persistence.dao.UserRepository;
6+
import org.baeldung.persistence.model.User;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.social.connect.Connection;
9+
import org.springframework.social.connect.ConnectionSignUp;
10+
import org.springframework.stereotype.Service;
11+
12+
@Service
13+
public class FacebookConnectionSignup implements ConnectionSignUp {
14+
15+
@Autowired
16+
private UserRepository userRepository;
17+
18+
@Override
19+
public String execute(Connection<?> connection) {
20+
System.out.println("signup === ");
21+
final User user = new User();
22+
user.setUsername(connection.getDisplayName());
23+
user.setPassword(randomAlphabetic(8));
24+
userRepository.save(user);
25+
return user.getUsername();
26+
}
27+
28+
}

0 commit comments

Comments
 (0)