From f3700246c0acb0979cb4b268576ba0cc79107706 Mon Sep 17 00:00:00 2001 From: liquidjoo Date: Fri, 12 Jul 2019 17:02:35 +0900 Subject: [PATCH] filter order fix --- .../AuthorizationServerApplication.java | 2 +- authorization-server2/build.gradle | 2 + .../config/AuthorizationServer2Config.java | 3 + .../config/ResourceServerConfig.java | 13 +-- .../config/WebMvcConfig2.java | 17 ++++ .../config/WebSecurity2Config.java | 38 +++++--- .../controller/AuthController.java | 60 ++++++------ .../domain/client/OAuthClientDetails.java | 49 ++++++++++ .../client/OAuthClientDetailsRepository.java | 10 ++ .../domain/oauth/OAuthUser.java | 42 +++++++++ .../domain/oauth/OAuthUserRepository.java | 11 +++ .../domain/oauth/OAuthUserRole.java | 34 +++++++ .../domain/oauth/OAuthUserRoleRepository.java | 9 ++ .../domain/user/CustomUserDetails.java | 7 +- .../domain/user/User.java | 63 ------------- .../domain/user/UserRepository.java | 11 --- .../domain/user/UserRole.java | 30 ------ .../domain/user/UserRoleRepository.java | 10 -- .../user/CustomUserDetailsServiceImpl.java | 44 +++++---- .../service/user/OAuthUserService.java | 16 ++++ .../service/user/OAuthUserServiceImpl.java | 93 +++++++++++++++++++ .../service/user/UserService.java | 15 --- .../service/user/UserServiceImpl.java | 83 ----------------- .../utils/APIRequest.java | 22 +++-- .../src/main/resources/application.properties | 22 ++--- .../src/main/resources/templates/signIn.html | 39 ++++++++ .../src/main/resources/templates/signUp.html | 39 ++++++++ .../testservice/domain/oauth/OAuthUser.java | 4 +- .../domain/oauth/OAuthUserRepository.java | 11 +++ .../domain/oauth/OAuthUserRole.java | 6 +- .../domain/oauth/OAuthUserRoleRepository.java | 6 ++ .../domain/user/UserRepository.java | 1 - .../service/oauth/OAuthUserService.java | 9 ++ .../service/oauth/OAuthUserServiceImpl.java | 22 +++++ .../service/user/UserEventListener.java | 29 +++++- .../service/user/UserServiceImpl.java | 29 +++++- .../testservice/utils/APIRequest.java | 36 ++----- 37 files changed, 590 insertions(+), 347 deletions(-) create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebMvcConfig2.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetails.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetailsRepository.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUser.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRepository.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRole.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRoleRepository.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/User.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRepository.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRole.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRoleRepository.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserService.java create mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserServiceImpl.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserService.java delete mode 100644 authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserServiceImpl.java create mode 100644 authorization-server2/src/main/resources/templates/signIn.html create mode 100644 authorization-server2/src/main/resources/templates/signUp.html create mode 100644 test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRepository.java create mode 100644 test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRoleRepository.java create mode 100644 test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserService.java create mode 100644 test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserServiceImpl.java diff --git a/authorization-server/src/main/java/io/bluemoon/authorizationserver/AuthorizationServerApplication.java b/authorization-server/src/main/java/io/bluemoon/authorizationserver/AuthorizationServerApplication.java index 4c336bf..a769941 100644 --- a/authorization-server/src/main/java/io/bluemoon/authorizationserver/AuthorizationServerApplication.java +++ b/authorization-server/src/main/java/io/bluemoon/authorizationserver/AuthorizationServerApplication.java @@ -8,7 +8,7 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E import java.util.Date; @SpringBootApplication -@EnableResourceServer +//@EnableResourceServer public class AuthorizationServerApplication { public static void main(String[] args) { diff --git a/authorization-server2/build.gradle b/authorization-server2/build.gradle index d3bc0f7..362153d 100644 --- a/authorization-server2/build.gradle +++ b/authorization-server2/build.gradle @@ -29,11 +29,13 @@ dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-oauth2' // implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE' implementation 'org.springframework.cloud:spring-cloud-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.squareup.okhttp3:okhttp:3.9.1' implementation 'com.google.code.gson:gson' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' +// runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/AuthorizationServer2Config.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/AuthorizationServer2Config.java index 3af4b38..7c04ada 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/AuthorizationServer2Config.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/AuthorizationServer2Config.java @@ -2,9 +2,11 @@ package io.bluemoon.authorizationserver2.config; import io.bluemoon.authorizationserver2.service.user.CustomUserDetailsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; @@ -31,6 +33,7 @@ public class AuthorizationServer2Config extends AuthorizationServerConfigurerAda private ClientDetailsService clientDetailsService; private AuthenticationManager authenticationManager; + private DataSource dataSource; private CustomUserDetailsServiceImpl customUserDetailsService; diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/ResourceServerConfig.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/ResourceServerConfig.java index 72f1e3e..63dc8dc 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/ResourceServerConfig.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/ResourceServerConfig.java @@ -4,23 +4,24 @@ import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter; -@Configuration //@Order(SecurityProperties.BASIC_AUTH_ORDER) +@Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http -// .requestMatchers().antMatchers("/createOAuthUser") -// .and() .authorizeRequests() - .antMatchers("/createOAuthUser").permitAll() - .antMatchers("/createToken").permitAll() -// .antMatchers("/oauth/token").permitAll() + .antMatchers("/signIn").permitAll() + .antMatchers("/signUp").permitAll() + .antMatchers("/signInMiddleWare").permitAll() + .antMatchers("/signUpMiddleWare").permitAll() + .antMatchers("/projectCreateMiddleWare").permitAll() .anyRequest() .authenticated(); } diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebMvcConfig2.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebMvcConfig2.java new file mode 100644 index 0000000..52574ec --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebMvcConfig2.java @@ -0,0 +1,17 @@ +package io.bluemoon.authorizationserver2.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@EnableWebMvc +@Configuration +public class WebMvcConfig2 implements WebMvcConfigurer { + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/signIn").setViewName("signIn"); + registry.addViewController("/signUp").setViewName("signUp"); + } +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebSecurity2Config.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebSecurity2Config.java index 3e126a2..3bde92b 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebSecurity2Config.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/config/WebSecurity2Config.java @@ -1,9 +1,9 @@ package io.bluemoon.authorizationserver2.config; import io.bluemoon.authorizationserver2.service.user.CustomUserDetailsServiceImpl; -import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; +import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; @@ -11,25 +11,19 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.util.matcher.AnyRequestMatcher; -import org.springframework.security.web.util.matcher.RequestMatcher; +import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; @Configuration +@EnableWebSecurity public class WebSecurity2Config extends WebSecurityConfigurerAdapter { private CustomUserDetailsServiceImpl customUserDetailsService; - private PasswordEncoder passwordEncoder; -// private PasswordEncoder passwordEncoder; - public WebSecurity2Config( - CustomUserDetailsServiceImpl customUserDetailsService, - PasswordEncoder passwordEncoder + CustomUserDetailsServiceImpl customUserDetailsService ) { this.customUserDetailsService = customUserDetailsService; - this.passwordEncoder = passwordEncoder; } @Bean @@ -43,19 +37,37 @@ public class WebSecurity2Config extends WebSecurityConfigurerAdapter { auth.authenticationProvider(daoAuthenticationProvider()); } + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .antMatchers("/oauth/token").permitAll() + .anyRequest().authenticated() + .and() + .headers().frameOptions().disable() + .and() + .exceptionHandling(); + } @Bean public DaoAuthenticationProvider daoAuthenticationProvider() { DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); daoAuthenticationProvider.setUserDetailsService(customUserDetailsService); - daoAuthenticationProvider.setPasswordEncoder(passwordEncoder); + daoAuthenticationProvider.setPasswordEncoder(passwordEncoder()); return daoAuthenticationProvider; } + // 패스워드 인코딩 수정 // @Bean -// public static PasswordEncoder passwordEncoder() { -// return new BCryptPasswordEncoder(); +// @SuppressWarnings("deprecation") +// public static NoOpPasswordEncoder passwordEncoder() { +// return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance(); // } + @Bean + public static PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + } diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/controller/AuthController.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/controller/AuthController.java index 4a5d63a..48718a4 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/controller/AuthController.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/controller/AuthController.java @@ -1,59 +1,65 @@ package io.bluemoon.authorizationserver2.controller; -import io.bluemoon.authorizationserver2.domain.user.User; -import io.bluemoon.authorizationserver2.service.user.UserService; -import org.springframework.context.annotation.Bean; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.validation.Errors; +import io.bluemoon.authorizationserver2.domain.client.OAuthClientDetails; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUser; +import io.bluemoon.authorizationserver2.service.user.OAuthUserService; +import io.bluemoon.authorizationserver2.utils.APIRequest; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotNull; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.security.Principal; -import java.util.Map; @RestController public class AuthController { - private UserService userService; + + private OAuthUserService oAuthUserService; public AuthController( - UserService userService + OAuthUserService oAuthUserService ) { - this.userService = userService; + this.oAuthUserService = oAuthUserService; } - @RequestMapping(value = "/user") public Principal getUser(Principal user) { return user; } - @RequestMapping(value = "/createOAuthUser", method = RequestMethod.POST) - public User createOAuthUser(@RequestBody @NotNull User user, @RequestHeader Map header, Errors errors) { - System.out.println(errors.toString()); - System.out.println(user); - System.out.println(header); + @PostMapping("/signInMiddleWare") + public String signInMiddleWare(HttpServletRequest request) throws IOException { + OAuthUser user = requestToUser(request); - return userService.createOAuthUser(user); + return oAuthUserService.readUser(user); } - @RequestMapping(value = "/createToken", method = RequestMethod.POST) - public String createToken(@RequestBody User user, @RequestHeader Map header) throws IOException { - return userService.createOAuthToken(user); + @PostMapping("/signUpMiddleWare") + public OAuthUser signUpMiddleWare(HttpServletRequest request) { + + OAuthUser user = requestToUser(request); + + return oAuthUserService.createUser(user); + } - @PutMapping(value = "/updateOAuthUser") - public User updateOAuthUser(@RequestBody User user, @RequestHeader Map header) { - System.out.println(user); - System.out.println(header); + @PostMapping("/projectCreateMiddleWare") + public OAuthClientDetails proejctCreateMiddleWare(HttpServletRequest request) { + OAuthClientDetails authClientDetails = new OAuthClientDetails(); + authClientDetails.setClientId(request.getParameter("client_id")); + authClientDetails.setClientSecret(request.getParameter("client_secret")); + return oAuthUserService.createProject(authClientDetails); + } + + private OAuthUser requestToUser(HttpServletRequest request) { + OAuthUser user = new OAuthUser(); + user.setUsername(request.getParameter("username")); + user.setPassword(request.getParameter("password")); return user; } + } diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetails.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetails.java new file mode 100644 index 0000000..89109d3 --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetails.java @@ -0,0 +1,49 @@ +package io.bluemoon.authorizationserver2.domain.client; + +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Data +@Entity +@Table(name = "oauth_client_details") +public class OAuthClientDetails { + + @Id + @Column + private String clientId; + + @Column + private String resourceIds; + + @Column + private String clientSecret; + + @Column + private String scope; + + @Column + private String authorizedGrantTypes; + + @Column + private String webServerRedirectUri; + + @Column + private String authorities; + + @Column + private Integer accessTokenValidity; + + @Column + private Integer refreshTokenValidity; + + @Column + private String additionalInformation; + + @Column + private String autoApprove; + +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetailsRepository.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetailsRepository.java new file mode 100644 index 0000000..838c2e1 --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/client/OAuthClientDetailsRepository.java @@ -0,0 +1,10 @@ +package io.bluemoon.authorizationserver2.domain.client; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface OAuthClientDetailsRepository extends JpaRepository { + + Optional findByClientId(String clientId); +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUser.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUser.java new file mode 100644 index 0000000..cb75fde --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUser.java @@ -0,0 +1,42 @@ +package io.bluemoon.authorizationserver2.domain.oauth; + +import lombok.Data; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.Collection; + +@Data +@Entity +@Table(name = "oauth_user") +public class OAuthUser { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column + private String username; + + @Column + private String password; + + @Column + private String name; + + @Column + private String status; + + @Column + private String reSellerId; + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "oAuthUser", fetch = FetchType.EAGER) + private Collection userRole; + + @Column + private LocalDateTime createdAt; + + @Column + private LocalDateTime updatedAt; + +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRepository.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRepository.java new file mode 100644 index 0000000..dae6c6d --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRepository.java @@ -0,0 +1,11 @@ +package io.bluemoon.authorizationserver2.domain.oauth; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface OAuthUserRepository extends JpaRepository { + + Optional findByUsername(String username); + +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRole.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRole.java new file mode 100644 index 0000000..b12ca8e --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRole.java @@ -0,0 +1,34 @@ +package io.bluemoon.authorizationserver2.domain.oauth; + +import lombok.Data; +import lombok.ToString; + +import javax.persistence.*; +import java.time.LocalDateTime; + +@Data +@Entity +@ToString(exclude = "oAuthUser") +@Table(name = "oauth_user_role") +public class OAuthUserRole { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column + private String role; + + @Column + private String resourceIds; + + @ManyToOne(optional = false) + @JoinColumn(name = "userId") + private OAuthUser oAuthUser; + + @Column + private LocalDateTime createdAt; + + @Column + private LocalDateTime updatedAt; +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRoleRepository.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRoleRepository.java new file mode 100644 index 0000000..1c19962 --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/oauth/OAuthUserRoleRepository.java @@ -0,0 +1,9 @@ +package io.bluemoon.authorizationserver2.domain.oauth; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface OAuthUserRoleRepository extends JpaRepository { + List findByOAuthUser(OAuthUser user); +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/CustomUserDetails.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/CustomUserDetails.java index 25cf81b..66ea3cb 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/CustomUserDetails.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/CustomUserDetails.java @@ -1,5 +1,6 @@ package io.bluemoon.authorizationserver2.domain.user; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUser; import lombok.Data; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -13,16 +14,16 @@ import java.util.List; public class CustomUserDetails implements UserDetails { private static final long serialVersionUID = 6396079419309274853L; - private Long id; + private Integer id; private String username; private String password; private List userRole; - public CustomUserDetails(User user, List userRole) { + public CustomUserDetails(OAuthUser user, List userRoles) { this.id = user.getId(); this.username = user.getUsername(); this.password = user.getPassword(); - this.userRole = userRole; + this.userRole = userRoles; } @Override diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/User.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/User.java deleted file mode 100644 index 0afa48e..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/User.java +++ /dev/null @@ -1,63 +0,0 @@ -package io.bluemoon.authorizationserver2.domain.user; - -import lombok.*; - -import javax.persistence.*; -import java.time.LocalDateTime; -import java.util.Collection; - -@Entity -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column - private String username; - - @Column - private String name; - - @Column - private String password; - - @Column - private String email; - - @Column - private String principal; - - @OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER) - private Collection userRole; - - @Column - private LocalDateTime createdAt; - - @Column - private LocalDateTime updatedAt; - - - -// //1:수퍼관리자, 2:관리자, 3:사용자 -// @Column -// private String userType; - -// @Column -// @Temporal(TemporalType.TIMESTAMP) -// private Date regDate = new Date(); - - @Builder - public User(String username, String name, String password, String email, String principal, LocalDateTime createdAt, LocalDateTime updatedAt) { - this.username = username; - this.name = name; - this.password = password; - this.email = email; - this.principal = principal; - this.createdAt = createdAt; - this.updatedAt = updatedAt; - } -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRepository.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRepository.java deleted file mode 100644 index eb9955b..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.bluemoon.authorizationserver2.domain.user; - -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.Optional; - -public interface UserRepository extends JpaRepository { -// User findByUsername(String username); - User findByEmail(String email); - Optional findByUsername(String username); -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRole.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRole.java deleted file mode 100644 index e6c73ec..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRole.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.bluemoon.authorizationserver2.domain.user; - -import lombok.*; - -import javax.persistence.*; - -@Getter -@Setter -@Entity -@ToString(exclude = "user") -@NoArgsConstructor -@AllArgsConstructor -public class UserRole { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column - private String role; - - @ManyToOne(optional = false) - @JoinColumn(name = "userId") - private User user; - - @Builder - public UserRole(User user, String role) { - this.user = user; - this.role = role; - } -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRoleRepository.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRoleRepository.java deleted file mode 100644 index f1680e0..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/domain/user/UserRoleRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.bluemoon.authorizationserver2.domain.user; - -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -public interface UserRoleRepository extends JpaRepository { - List findByUser(User user); - -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/CustomUserDetailsServiceImpl.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/CustomUserDetailsServiceImpl.java index 9b12e3e..0824946 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/CustomUserDetailsServiceImpl.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/CustomUserDetailsServiceImpl.java @@ -1,5 +1,9 @@ package io.bluemoon.authorizationserver2.service.user; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUser; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUserRepository; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUserRole; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUserRoleRepository; import io.bluemoon.authorizationserver2.domain.user.*; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -8,42 +12,44 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service public class CustomUserDetailsServiceImpl implements UserDetailsService { // User Info - private UserRepository userRepository; - private UserRoleRepository userRoleRepository; + private OAuthUserRepository oAuthUserRepository; + private OAuthUserRoleRepository oAuthUserRoleRepository; public CustomUserDetailsServiceImpl( - UserRepository userRepository, - UserRoleRepository userRoleRepository + OAuthUserRepository oAuthUserRepository, + OAuthUserRoleRepository oAuthUserRoleRepository ) { - this.userRepository = userRepository; - this.userRoleRepository = userRoleRepository; + this.oAuthUserRepository = oAuthUserRepository; + this.oAuthUserRoleRepository = oAuthUserRoleRepository; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { System.out.println("why?????????????"+username); - User user = userRepository.findByUsername(username).get(); - System.out.println(user); - List userRole = userRoleRepository.findByUser(user); - System.out.println(userRole); - System.out.println("---------------------------"); - List urs = new ArrayList<>(); - for (UserRole ur : userRole) { - urs.add(ur.getRole()); - } + Optional user = oAuthUserRepository.findByUsername(username); + if (user.isPresent()) { + System.out.println(user); + List userRoles = oAuthUserRoleRepository.findByOAuthUser(user.get()); + System.out.println(userRoles); + System.out.println("---------------------------"); + List urs = new ArrayList<>(); + for (OAuthUserRole ur : userRoles) { + urs.add(ur.getRole()); + } - if (user == null) { + CustomUserDetails userDetail = new CustomUserDetails(user.get(), urs); + return userDetail; + + } else { throw new UsernameNotFoundException("UsernameNotFound[" + username + "]"); } - CustomUserDetails userDetail = new CustomUserDetails(user, urs); - System.out.println(userDetail); - return userDetail; } /** diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserService.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserService.java new file mode 100644 index 0000000..4d2b30a --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserService.java @@ -0,0 +1,16 @@ +package io.bluemoon.authorizationserver2.service.user; + +import io.bluemoon.authorizationserver2.domain.client.OAuthClientDetails; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUser; +import io.bluemoon.authorizationserver2.utils.APIRequest; + +import java.io.IOException; + +public interface OAuthUserService { + OAuthUser createUser(OAuthUser user); + + String readUser(OAuthUser user) throws IOException; + + OAuthClientDetails createProject(OAuthClientDetails clientDetails); + +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserServiceImpl.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserServiceImpl.java new file mode 100644 index 0000000..0908176 --- /dev/null +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/OAuthUserServiceImpl.java @@ -0,0 +1,93 @@ +package io.bluemoon.authorizationserver2.service.user; + +import io.bluemoon.authorizationserver2.domain.client.OAuthClientDetails; +import io.bluemoon.authorizationserver2.domain.client.OAuthClientDetailsRepository; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUser; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUserRepository; +import io.bluemoon.authorizationserver2.domain.oauth.OAuthUserRoleRepository; +import io.bluemoon.authorizationserver2.utils.APIRequest; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +@Service +public class OAuthUserServiceImpl implements OAuthUserService { + + private OAuthUserRepository userRepository; + private OAuthUserRoleRepository userRoleRepository; + private PasswordEncoder passwordEncoder; + private OAuthClientDetailsRepository oAuthClientDetailsRepository; + + public OAuthUserServiceImpl( + OAuthUserRepository userRepository, + OAuthUserRoleRepository userRoleRepository, + PasswordEncoder passwordEncoder, + OAuthClientDetailsRepository oAuthClientDetailsRepository + ) { + this.userRepository = userRepository; + this.userRoleRepository = userRoleRepository; + this.passwordEncoder = passwordEncoder; + this.oAuthClientDetailsRepository = oAuthClientDetailsRepository; + } + + @Override + public OAuthUser createUser(OAuthUser user) { + // 중복 체크 + user.setPassword(passwordEncoder.encode(user.getPassword())); + return userRepository.saveAndFlush(user); + } + + @Override + public String readUser(OAuthUser user) throws IOException { + Optional optionalOAuthUser = + userRepository.findByUsername(user.getUsername()); + + if (optionalOAuthUser.isPresent()) { + + if (passwordEncoder.matches(user.getPassword(), optionalOAuthUser.get().getPassword())) { + // client id + Optional optionalOAuthClientDetails = oAuthClientDetailsRepository.findByClientId(user.getUsername()); + + if (optionalOAuthClientDetails.isPresent()) { + // token 발급 + Map userInfo = new HashMap<>(); + userInfo.put("grant_type", "password"); + userInfo.put("username", user.getUsername()); + userInfo.put("password", user.getPassword()); + + Map authInfo = new HashMap<>(); + authInfo.put("client_id", optionalOAuthClientDetails.get().getClientId()); + authInfo.put("client_secret", "1234"); + + APIRequest.ResponseWrapper responseWrapper = APIRequest.getIRequestExecutor().createOAuthToken(userInfo, authInfo); + + return responseWrapper.getBody(); + +// return optionalOAuthClientDetails.get(); + } else { + + } +// if (optionalOAuthClientDetails.isPresent()) { +// System.out.println(optionalOAuthClientDetails.get()); +// } else { +// System.out.println(user.getUsername()); +// System.out.println(user.getPassword()); +// } + + } + } + + return null; + + } + + @Override + public OAuthClientDetails createProject(OAuthClientDetails clientDetails) { + clientDetails.setClientSecret(passwordEncoder.encode(clientDetails.getClientSecret())); + return oAuthClientDetailsRepository.save(clientDetails); + } +} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserService.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserService.java deleted file mode 100644 index 2f02e03..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserService.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.bluemoon.authorizationserver2.service.user; - -import io.bluemoon.authorizationserver2.domain.user.User; - -import java.io.IOException; -import java.util.Map; - -public interface UserService { - - User createOAuthUser(User user); - - String createOAuthToken(User user) throws IOException; - - User updateOAuthUser(User user); -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserServiceImpl.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserServiceImpl.java deleted file mode 100644 index 48dee52..0000000 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/service/user/UserServiceImpl.java +++ /dev/null @@ -1,83 +0,0 @@ -package io.bluemoon.authorizationserver2.service.user; - -import io.bluemoon.authorizationserver2.domain.user.User; -import io.bluemoon.authorizationserver2.domain.user.UserRepository; -import io.bluemoon.authorizationserver2.utils.APIRequest; -import org.springframework.context.annotation.Bean; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.NoOpPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -@Service -public class UserServiceImpl implements UserService{ - - private UserRepository userRepository; - - public UserServiceImpl( - UserRepository userRepository - ) { - this.userRepository = userRepository; - } - - - @Override - public User createOAuthUser(User user) { -// user.setPassword(passwordEncoder().encode(user.getPassword())); -// user.setPassword(); - return userRepository.save(user); - } - - @Override - public String createOAuthToken(User user) throws IOException { - - Optional optionalUser = userRepository.findByUsername(user.getUsername()); - - System.out.println(passwordEncoder().matches(user.getPassword(), optionalUser.get().getPassword())); -// System.out.println(passwordEncoder().matches("1234", optionalUser.get().getPassword())); - if (optionalUser.isPresent()) { - if (passwordEncoder().matches(user.getPassword(), optionalUser.get().getPassword())) { - //token 발급 - Map tokenInfo = new HashMap<>(); - tokenInfo.put("username", user.getUsername()); - tokenInfo.put("password", user.getPassword()); -// tokenInfo.put("password", "1234"); - tokenInfo.put("grant_type", "password"); - APIRequest.ResponseWrapper response = APIRequest.getIRequestExecutor().createOAuthToken(tokenInfo); - System.out.println(response.getBody()); - return response.getBody(); - - } - System.out.println("-----------------------11"); - } - System.out.println("-----------------------22"); - return null; - } - - @Override - public User updateOAuthUser(User user) { - Optional getUser = userRepository.findById(user.getId()); - if (getUser.isPresent()) { - user.setId(getUser.get().getId()); - return userRepository.save(user); - - } else { - return null; - } - } - -// @Bean -// public PasswordEncoder passwordEncoder() { -// return new BCryptPasswordEncoder(); -// } - @Bean - @SuppressWarnings("deprecation") - public static NoOpPasswordEncoder passwordEncoder() { - return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance(); - } -} diff --git a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/utils/APIRequest.java b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/utils/APIRequest.java index 61724e0..93f183d 100644 --- a/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/utils/APIRequest.java +++ b/authorization-server2/src/main/java/io/bluemoon/authorizationserver2/utils/APIRequest.java @@ -19,7 +19,7 @@ public class APIRequest { } public interface IRequestExecutor { - ResponseWrapper createOAuthToken(Map tokenInfo) throws IOException; + ResponseWrapper createOAuthToken(Map userInfo, Map authInfo) throws IOException; } @@ -32,18 +32,22 @@ public class APIRequest { init(); } - @Override - public ResponseWrapper createOAuthToken(Map tokenInfo) throws IOException { + public ResponseWrapper createOAuthToken(Map userInfo, Map authInfo) throws IOException { String url = "http://localhost:8081/auth/oauth/token"; Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String jsonString = gson.toJson(tokenInfo); - RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString); + RequestBody formBody = new FormBody.Builder() + .add("grant_type", userInfo.get("grant_type").toString()) + .add("username", userInfo.get("username").toString()) + .add("password", userInfo.get("password").toString()) + .build(); +// String jsonString = gson.toJson(userInfo); +// RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString); Request request = new Request.Builder() .url(url) - .addHeader("Authorization", Credentials.basic("a","1")) - .post(body) - .header("Content-type", "application/json") + .addHeader("Authorization", Credentials.basic(authInfo.get("client_id").toString(),authInfo.get("client_secret").toString())) + .post(formBody) +// .header("Content-type", "application/json") .build(); Call call = client.newCall(request); @@ -51,8 +55,8 @@ public class APIRequest { ResponseWrapper result = new ResponseWrapper(response.body().string(), convertToString(response.headers())); System.out.println("----------===================------------"); System.out.println(result.getBody()); - return result; + return result; } } diff --git a/authorization-server2/src/main/resources/application.properties b/authorization-server2/src/main/resources/application.properties index 994c766..a4d01e0 100644 --- a/authorization-server2/src/main/resources/application.properties +++ b/authorization-server2/src/main/resources/application.properties @@ -4,24 +4,16 @@ server.servlet.context-path=/auth security.oauth2.authorization.check-token-access=isAuthenticated() spring.main.allow-bean-definition-overriding=true -#spring.datasource.url=jdbc:mysql://127.0.0.1/oauth2?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC -#spring.datasource.username=root -#spring.datasource.password=bluemoon -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.platform=schema -#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect -#spring.jpa.database = MYSQL +spring.datasource.url=jdbc:mysql://127.0.0.1/oauth2?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=bluemoon +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.platform=schema +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect -spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false -spring.datasource.url=jdbc:postgresql://localhost:5432/mk2 -#spring.datasource.platform=postgres -#spring.datasource.driver-class-name=org.postgresql.Driver -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect - -spring.jpa.database = POSTGRESQL - +spring.jpa.database = MYSQL spring.jpa.hibernate.ddl-auto=update spring.jpa.generate-ddl=true spring.jpa.show-sql=true diff --git a/authorization-server2/src/main/resources/templates/signIn.html b/authorization-server2/src/main/resources/templates/signIn.html new file mode 100644 index 0000000..45feb81 --- /dev/null +++ b/authorization-server2/src/main/resources/templates/signIn.html @@ -0,0 +1,39 @@ + + + + + + +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ + + +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/authorization-server2/src/main/resources/templates/signUp.html b/authorization-server2/src/main/resources/templates/signUp.html new file mode 100644 index 0000000..1cd5b46 --- /dev/null +++ b/authorization-server2/src/main/resources/templates/signUp.html @@ -0,0 +1,39 @@ + + + + + + +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ + + +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUser.java b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUser.java index f3754aa..ba78502 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUser.java +++ b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUser.java @@ -8,12 +8,12 @@ import java.util.Collection; @Data @Entity -@Table(name = "user", schema = "oauth2") +@Table(name = "oauth_user", schema = "oauth2") public class OAuthUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private int id; @Column private String username; diff --git a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRepository.java b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRepository.java new file mode 100644 index 0000000..b4c8e44 --- /dev/null +++ b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRepository.java @@ -0,0 +1,11 @@ +package io.bluemoon.testservice.domain.oauth; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface OAuthUserRepository extends JpaRepository { + + Optional findByUsername(String username); + +} diff --git a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRole.java b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRole.java index e82dbc8..2b2ed0f 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRole.java +++ b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRole.java @@ -1,18 +1,20 @@ package io.bluemoon.testservice.domain.oauth; import lombok.Data; +import lombok.ToString; import javax.persistence.*; import java.time.LocalDateTime; @Data @Entity -@Table(name = "user_role", schema = "oauth2") +@ToString(exclude = "oAuthUser") +@Table(name = "oauth_user_role", schema = "oauth2") public class OAuthUserRole { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private int id; @Column private String role; diff --git a/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRoleRepository.java b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRoleRepository.java new file mode 100644 index 0000000..3c23789 --- /dev/null +++ b/test-service/src/main/java/io/bluemoon/testservice/domain/oauth/OAuthUserRoleRepository.java @@ -0,0 +1,6 @@ +package io.bluemoon.testservice.domain.oauth; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface OAuthUserRoleRepository extends JpaRepository { +} diff --git a/test-service/src/main/java/io/bluemoon/testservice/domain/user/UserRepository.java b/test-service/src/main/java/io/bluemoon/testservice/domain/user/UserRepository.java index 6335193..b605b0a 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/domain/user/UserRepository.java +++ b/test-service/src/main/java/io/bluemoon/testservice/domain/user/UserRepository.java @@ -7,5 +7,4 @@ import java.util.Optional; public interface UserRepository extends JpaRepository { Optional findByUsername(String username); - } diff --git a/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserService.java b/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserService.java new file mode 100644 index 0000000..8c96ee2 --- /dev/null +++ b/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserService.java @@ -0,0 +1,9 @@ +package io.bluemoon.testservice.service.oauth; + +import io.bluemoon.testservice.domain.oauth.OAuthUser; +import io.bluemoon.testservice.domain.user.User; + +public interface OAuthUserService { + + +} diff --git a/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserServiceImpl.java b/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserServiceImpl.java new file mode 100644 index 0000000..a5699bb --- /dev/null +++ b/test-service/src/main/java/io/bluemoon/testservice/service/oauth/OAuthUserServiceImpl.java @@ -0,0 +1,22 @@ +package io.bluemoon.testservice.service.oauth; + +import io.bluemoon.testservice.domain.oauth.OAuthUser; +import io.bluemoon.testservice.domain.oauth.OAuthUserRepository; +import io.bluemoon.testservice.domain.oauth.OAuthUserRoleRepository; +import org.springframework.stereotype.Service; + +@Service +public class OAuthUserServiceImpl implements OAuthUserService { + + private OAuthUserRepository oAuthUserRepository; + private OAuthUserRoleRepository oAuthUserRoleRepository; + + public OAuthUserServiceImpl( + OAuthUserRepository oAuthUserRepository, + OAuthUserRoleRepository oAuthUserRoleRepository + ) { + this.oAuthUserRepository = oAuthUserRepository; + this.oAuthUserRoleRepository = oAuthUserRoleRepository; + } + +} diff --git a/test-service/src/main/java/io/bluemoon/testservice/service/user/UserEventListener.java b/test-service/src/main/java/io/bluemoon/testservice/service/user/UserEventListener.java index 03a7857..0bcedf2 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/service/user/UserEventListener.java +++ b/test-service/src/main/java/io/bluemoon/testservice/service/user/UserEventListener.java @@ -1,9 +1,13 @@ package io.bluemoon.testservice.service.user; +import io.bluemoon.testservice.domain.oauth.OAuthUser; +import io.bluemoon.testservice.domain.oauth.OAuthUserRepository; import io.bluemoon.testservice.domain.user.User; +import io.bluemoon.testservice.service.oauth.OAuthUserService; import io.bluemoon.testservice.utils.APIRequest; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; @@ -12,15 +16,32 @@ import java.io.IOException; @Component public class UserEventListener { +// private OAuthUserService oAuthUserService; + private OAuthUserRepository oAuthUserRepository; + + public UserEventListener( + OAuthUserRepository oAuthUserRepository + ) { + this.oAuthUserRepository = oAuthUserRepository; + } + @Async - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, classes = UserServiceImpl.UserCreateEvent.class) + @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT, classes = UserServiceImpl.UserCreateEvent.class) public void userCreateEventHandle(UserServiceImpl.UserCreateEvent event) throws IOException { User user = event.getUser(); System.out.println("----------handler"); System.out.println(user); - APIRequest.ResponseWrapper responseWrapper = APIRequest.getIRequestExecutor().createOAuthUser(user); - System.out.println(responseWrapper.getHeader()); - System.out.println(responseWrapper.getBody()); + OAuthUser oAuthUser = new OAuthUser(); + oAuthUser.setUsername(user.getUsername()); + oAuthUser.setPassword(user.getPassword()); + + oAuthUserRepository.saveAndFlush(oAuthUser); + + + +// APIRequest.ResponseWrapper responseWrapper = APIRequest.getIRequestExecutor().createOAuthUser(user); +// System.out.println(responseWrapper.getHeader()); +// System.out.println(responseWrapper.getBody()); // oauth } diff --git a/test-service/src/main/java/io/bluemoon/testservice/service/user/UserServiceImpl.java b/test-service/src/main/java/io/bluemoon/testservice/service/user/UserServiceImpl.java index b093a4a..641b7d0 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/service/user/UserServiceImpl.java +++ b/test-service/src/main/java/io/bluemoon/testservice/service/user/UserServiceImpl.java @@ -1,7 +1,10 @@ package io.bluemoon.testservice.service.user; +import io.bluemoon.testservice.domain.oauth.OAuthUser; +import io.bluemoon.testservice.domain.oauth.OAuthUserRepository; import io.bluemoon.testservice.domain.user.User; import io.bluemoon.testservice.domain.user.UserRepository; +import io.bluemoon.testservice.service.oauth.OAuthUserService; import io.bluemoon.testservice.utils.APIRequest; import lombok.Getter; import lombok.NonNull; @@ -25,11 +28,14 @@ public class UserServiceImpl implements UserService, ApplicationEventPublisherAw private UserRepository userRepository; private ApplicationEventPublisher eventPublisher; + private OAuthUserRepository oAuthUserRepository; public UserServiceImpl( - UserRepository userRepository + UserRepository userRepository, + OAuthUserRepository oAuthUserRepository ) { this.userRepository = userRepository; + this.oAuthUserRepository = oAuthUserRepository; } @@ -39,6 +45,10 @@ public class UserServiceImpl implements UserService, ApplicationEventPublisherAw user.setPassword(passwordEncoder().encode(user.getPassword())); System.out.println(passwordEncoder().matches("1234", user.getPassword())); userRepository.save(user); +// OAuthUser o = new OAuthUser(); +// o.setPassword("123"); +// o.setName("tomz"); +// oAuthUserRepository.save(o); eventPublisher.publishEvent(new UserCreateEvent(user)); return user; } @@ -54,10 +64,19 @@ public class UserServiceImpl implements UserService, ApplicationEventPublisherAw if (optionalUser.isPresent()) { System.out.println(optionalUser.get().toString()); if (passwordEncoder().matches(user.getPassword(),optionalUser.get().getPassword())) { - APIRequest.ResponseWrapper response = APIRequest.getIRequestExecutor().createOAuthToken(user); - Map a = new HashMap(); - a.put("data", response); - return a; + + Optional optionalOAuthUser = oAuthUserRepository.findByUsername(user.getUsername()); + if (passwordEncoder().matches(user.getPassword(), optionalOAuthUser.get().getPassword())) { + // client id + Map tokenInfo = new HashMap<>(); + tokenInfo.put("username", user.getUsername()); + tokenInfo.put("password", user.getPassword()); + tokenInfo.put("grant_type", "password"); + APIRequest.ResponseWrapper response = APIRequest.getIRequestExecutor().createOAuthToken(tokenInfo); + System.out.println(); + + } + } } diff --git a/test-service/src/main/java/io/bluemoon/testservice/utils/APIRequest.java b/test-service/src/main/java/io/bluemoon/testservice/utils/APIRequest.java index 3e109be..08b7cc5 100644 --- a/test-service/src/main/java/io/bluemoon/testservice/utils/APIRequest.java +++ b/test-service/src/main/java/io/bluemoon/testservice/utils/APIRequest.java @@ -20,8 +20,7 @@ public class APIRequest { } public interface IRequestExecutor { - ResponseWrapper createOAuthUser(User user) throws IOException; - ResponseWrapper createOAuthToken(User user) throws IOException; + ResponseWrapper createOAuthToken(Map tokenInfo) throws IOException; ResponseWrapper updateOAuthUser(User user); ResponseWrapper createOAuthClientDetails(); @@ -38,37 +37,16 @@ public class APIRequest { } + @Override - public ResponseWrapper createOAuthUser(User user) throws IOException { - String url = "http://localhost:8081/auth/createOAuthUser"; + public ResponseWrapper createOAuthToken(Map tokenInfo) throws IOException { + String url = "http://localhost:8081/auth/oauth/token"; Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String jsonString = gson.toJson(user); - + String jsonString = gson.toJson(tokenInfo); RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString); - - Request request = new Request.Builder() - .url(url) - .post(body) - .header("Content-type", "application/json") - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - ResponseWrapper result = new ResponseWrapper(response.body().string(), convertToString(response.headers())); - - return result; - } - - @Override - public ResponseWrapper createOAuthToken(User user) throws IOException { - String url = "http://localhost:8081/auth/auth"; - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String jsonString = gson.toJson(user); - - RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString); - Request request = new Request.Builder() .url(url) + .addHeader("Authorization", Credentials.basic("a","1")) .post(body) .header("Content-type", "application/json") .build(); @@ -76,6 +54,8 @@ public class APIRequest { Call call = client.newCall(request); Response response = call.execute(); ResponseWrapper result = new ResponseWrapper(response.body().string(), convertToString(response.headers())); + System.out.println("----------===================------------"); + System.out.println(result.getBody()); return result; }