filter order fix
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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<OAuthClientDetails, String> {
|
||||
|
||||
Optional<OAuthClientDetails> findByClientId(String clientId);
|
||||
}
|
||||
@@ -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<OAuthUserRole> userRole;
|
||||
|
||||
@Column
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@Column
|
||||
private LocalDateTime updatedAt;
|
||||
|
||||
}
|
||||
@@ -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<OAuthUser, Integer> {
|
||||
|
||||
Optional<OAuthUser> findByUsername(String username);
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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<OAuthUserRole, Integer> {
|
||||
List<OAuthUserRole> findByOAuthUser(OAuthUser user);
|
||||
}
|
||||
@@ -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<String> userRole;
|
||||
|
||||
public CustomUserDetails(User user, List<String> userRole) {
|
||||
public CustomUserDetails(OAuthUser user, List<String> userRoles) {
|
||||
this.id = user.getId();
|
||||
this.username = user.getUsername();
|
||||
this.password = user.getPassword();
|
||||
this.userRole = userRole;
|
||||
this.userRole = userRoles;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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> 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;
|
||||
}
|
||||
}
|
||||
@@ -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, Long> {
|
||||
// User findByUsername(String username);
|
||||
User findByEmail(String email);
|
||||
Optional<User> findByUsername(String username);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<UserRole, Integer> {
|
||||
List<UserRole> findByUser(User user);
|
||||
|
||||
}
|
||||
@@ -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> userRole = userRoleRepository.findByUser(user);
|
||||
System.out.println(userRole);
|
||||
System.out.println("---------------------------");
|
||||
List<String> urs = new ArrayList<>();
|
||||
for (UserRole ur : userRole) {
|
||||
urs.add(ur.getRole());
|
||||
}
|
||||
Optional<OAuthUser> user = oAuthUserRepository.findByUsername(username);
|
||||
if (user.isPresent()) {
|
||||
System.out.println(user);
|
||||
List<OAuthUserRole> userRoles = oAuthUserRoleRepository.findByOAuthUser(user.get());
|
||||
System.out.println(userRoles);
|
||||
System.out.println("---------------------------");
|
||||
List<String> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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<OAuthUser> optionalOAuthUser =
|
||||
userRepository.findByUsername(user.getUsername());
|
||||
|
||||
if (optionalOAuthUser.isPresent()) {
|
||||
|
||||
if (passwordEncoder.matches(user.getPassword(), optionalOAuthUser.get().getPassword())) {
|
||||
// client id
|
||||
Optional<OAuthClientDetails> optionalOAuthClientDetails = oAuthClientDetailsRepository.findByClientId(user.getUsername());
|
||||
|
||||
if (optionalOAuthClientDetails.isPresent()) {
|
||||
// token 발급
|
||||
Map<String, Object> userInfo = new HashMap<>();
|
||||
userInfo.put("grant_type", "password");
|
||||
userInfo.put("username", user.getUsername());
|
||||
userInfo.put("password", user.getPassword());
|
||||
|
||||
Map<String, Object> 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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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<User> 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<String, Object> 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<User> 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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<form role="form" th:action="@{/signInMiddleWare}" method="post">
|
||||
<div class="form-group row">
|
||||
<label for="username" class="col-sm-2 col-form-label">ID</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="username" placeholder="id" name="username">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="password" class="col-sm-2 col-form-label">Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" id="password" placeholder="password" name="password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="csrf_token" name="${_csrf.parameterName}" value="${_csrf.token}"/>
|
||||
<button type="submit" class="btn btn-primary">Sign in</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||
</html>
|
||||
@@ -0,0 +1,39 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<form role="form" th:action="@{/signUpMiddleWare}" method="post">
|
||||
<div class="form-group row">
|
||||
<label for="username" class="col-sm-2 col-form-label">ID</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="username" placeholder="id" name="username">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="password" class="col-sm-2 col-form-label">Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" id="password" placeholder="password" name="password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="csrf_token" name="${_csrf.parameterName}" value="${_csrf.token}"/>
|
||||
<button type="submit" class="btn btn-primary">Sign in</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||
</html>
|
||||
@@ -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;
|
||||
|
||||
@@ -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<OAuthUser, Integer> {
|
||||
|
||||
Optional<OAuthUser> findByUsername(String username);
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package io.bluemoon.testservice.domain.oauth;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface OAuthUserRoleRepository extends JpaRepository<OAuthUserRole, Integer> {
|
||||
}
|
||||
@@ -7,5 +7,4 @@ import java.util.Optional;
|
||||
public interface UserRepository extends JpaRepository<User, Integer> {
|
||||
|
||||
Optional<User> findByUsername(String username);
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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<OAuthUser> optionalOAuthUser = oAuthUserRepository.findByUsername(user.getUsername());
|
||||
if (passwordEncoder().matches(user.getPassword(), optionalOAuthUser.get().getPassword())) {
|
||||
// client id
|
||||
Map<String, Object> 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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user