diff --git a/src/main/java/com/example/vue/config/SecurityConfiguration.java b/src/main/java/com/example/vue/config/SecurityConfiguration.java new file mode 100644 index 0000000..e3eec71 --- /dev/null +++ b/src/main/java/com/example/vue/config/SecurityConfiguration.java @@ -0,0 +1,52 @@ +package com.example.vue.config; + +import com.example.vue.security.UserDetailsAuthenticationProvider; +import com.example.vue.service.UserDetailsServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +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.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@Configuration +@EnableWebMvc +@EnableWebSecurity +@RequiredArgsConstructor +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + private final UserDetailsServiceImpl userDetailService; + + @Override + protected void configure(AuthenticationManagerBuilder auth) { + auth.authenticationProvider(authenticationProvider()); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + + http.cors().disable() + .authorizeRequests() + .antMatchers("/auth/login").permitAll() + .antMatchers("/auth/register").permitAll() + .and() + .formLogin().disable() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); + + } + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + public AuthenticationProvider authenticationProvider() { + return new UserDetailsAuthenticationProvider(userDetailService, bCryptPasswordEncoder()); + } +} diff --git a/src/main/java/com/example/vue/domain/User.java b/src/main/java/com/example/vue/domain/User.java new file mode 100644 index 0000000..28eee1d --- /dev/null +++ b/src/main/java/com/example/vue/domain/User.java @@ -0,0 +1,13 @@ +package com.example.vue.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class User { + + @Id @GeneratedValue + Long id; + +} diff --git a/src/main/java/com/example/vue/security/UserDetailsAuthenticationProvider.java b/src/main/java/com/example/vue/security/UserDetailsAuthenticationProvider.java new file mode 100644 index 0000000..00dc341 --- /dev/null +++ b/src/main/java/com/example/vue/security/UserDetailsAuthenticationProvider.java @@ -0,0 +1,26 @@ +package com.example.vue.security; + +import com.example.vue.service.UserDetailsServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.password.PasswordEncoder; + +@RequiredArgsConstructor +public class UserDetailsAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { + + private final UserDetailsServiceImpl userService; + private final PasswordEncoder passwordEncoder; + + @Override + protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken) throws AuthenticationException { + + } + + @Override + protected UserDetails retrieveUser(String s, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken) throws AuthenticationException { + return null; + } +} diff --git a/src/main/java/com/example/vue/service/UserDetailsServiceImpl.java b/src/main/java/com/example/vue/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000..1cef413 --- /dev/null +++ b/src/main/java/com/example/vue/service/UserDetailsServiceImpl.java @@ -0,0 +1,13 @@ +package com.example.vue.service; + +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +public class UserDetailsServiceImpl implements UserDetailsService { + + @Override + public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { + return null; + } +}