Skip to content

Commit d32839f

Browse files
committed
add Spring Security Google OAuth2
1 parent 642f178 commit d32839f

File tree

5 files changed

+92
-20
lines changed

5 files changed

+92
-20
lines changed

Diff for: pom.xml

+14
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,20 @@
5454
<artifactId>spring-boot-devtools</artifactId>
5555
<optional>true</optional>
5656
</dependency>
57+
58+
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
59+
<dependency>
60+
<groupId>org.springframework.boot</groupId>
61+
<artifactId>spring-boot-starter-security</artifactId>
62+
<version>2.2.1.RELEASE</version>
63+
</dependency>
64+
65+
<dependency>
66+
<groupId>org.springframework.security.oauth.boot</groupId>
67+
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
68+
<version>2.0.0.RELEASE</version>
69+
</dependency>
70+
5771
</dependencies>
5872

5973

Diff for: src/main/java/marketplace/config/SecurityConfig.java

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package marketplace.config;
2+
3+
import marketplace.entity.User;
4+
import marketplace.repos.UserRepos;
5+
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
6+
import org.springframework.boot.autoconfigure.security.oauth2.resource.PrincipalExtractor;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
10+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
11+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
12+
13+
14+
@Configuration
15+
@EnableWebSecurity
16+
@EnableOAuth2Sso
17+
public class SecurityConfig extends WebSecurityConfigurerAdapter {
18+
19+
@Override
20+
protected void configure(HttpSecurity http) throws Exception {
21+
http.authorizeRequests()
22+
.mvcMatchers("/").permitAll()
23+
.anyRequest().permitAll()
24+
.and().csrf().disable();
25+
26+
}
27+
28+
@Bean
29+
PrincipalExtractor principalExtractor(UserRepos userRepos){
30+
return map -> {
31+
String id = (String) map.get("sub");
32+
33+
User user = userRepos.findById(id).orElseGet(() -> {
34+
User newUser = new User();
35+
36+
newUser.setId(id);
37+
newUser.setName((String) map.get("name"));
38+
newUser.setEmail((String) map.get("email"));
39+
newUser.setAvatar((String) map.get("picture"));
40+
41+
return newUser;
42+
});
43+
44+
return userRepos.save(user);
45+
};
46+
}
47+
}

Diff for: src/main/java/marketplace/controller/MainController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.util.List;
1313

14+
@CrossOrigin(origins = "http://localhost:8080")
1415
@Controller
1516
public class MainController {
1617

@@ -25,7 +26,7 @@ public class MainController {
2526
public MainController(HouseService houseService, UserService userService){
2627
this.userService = userService;
2728
this.houseService = houseService;
28-
User user = new User("login", "Password");
29+
User user = new User("id", "name","avatar", "email");
2930
userService.saveUser(user);
3031
houseService.saveHouse(new House(52.353226, 4.889268, user, HouseStatus.SALE, 100));
3132
houseService.saveHouse(new House(52.363049, 4.901847, user, HouseStatus.SALE, 100));
@@ -55,7 +56,6 @@ public List<House> getPointsByCoord(
5556
}
5657

5758

58-
@CrossOrigin(origins = "http://localhost:8080")
5959
@PutMapping("/points")
6060
@ResponseBody
6161
public void addPoints(@RequestBody House house){

Diff for: src/main/java/marketplace/entity/User.java

+28-17
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,56 @@
77
@Entity
88
public class User {
99
@Id
10-
@GeneratedValue(strategy = GenerationType.IDENTITY)
11-
private Long id;
12-
private String login;
13-
private String password;
10+
private String id;
11+
private String name;
12+
private String avatar;
13+
private String email;
14+
1415
@OneToMany(fetch = FetchType.LAZY, mappedBy = "owner")
1516
private List<House> houses;
1617

1718
public User() {
1819
this.houses = new ArrayList<>();
1920
}
2021

21-
public User(String login, String password) {
22+
public User(String id, String name, String avatar, String email) {
2223
this();
23-
this.login = login;
24-
this.password = password;
24+
this.id = id;
25+
this.name = name;
26+
this.avatar = avatar;
27+
this.email = email;
2528
}
2629

27-
public Long getId() {
30+
public String getId() {
2831
return id;
2932
}
3033

31-
public void setId(Long id) {
34+
public void setId(String id) {
3235
this.id = id;
3336
}
3437

35-
public String getLogin() {
36-
return login;
38+
public String getName() {
39+
return name;
40+
}
41+
42+
public void setName(String name) {
43+
this.name = name;
44+
}
45+
46+
public String getAvatar() {
47+
return avatar;
3748
}
3849

39-
public void setLogin(String login) {
40-
this.login = login;
50+
public void setAvatar(String avatar) {
51+
this.avatar = avatar;
4152
}
4253

43-
public String getPassword() {
44-
return password;
54+
public String getEmail() {
55+
return email;
4556
}
4657

47-
public void setPassword(String password) {
48-
this.password = password;
58+
public void setEmail(String email) {
59+
this.email = email;
4960
}
5061

5162
public List<House> getHouses() {

Diff for: src/main/java/marketplace/repos/UserRepos.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
import org.springframework.stereotype.Repository;
66

77
@Repository
8-
public interface UserRepos extends CrudRepository<User, Long> {
8+
public interface UserRepos extends CrudRepository<User, String> {
99

1010
}

0 commit comments

Comments
 (0)