From 11c94ae8d62cf60ee1102841e48fb3082a281ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=8C=E1=85=B5=E1=86=AB=E1=84=89?= =?UTF-8?q?=E1=85=A5=E1=86=A8?= Date: Thu, 30 Jan 2020 18:10:16 +0900 Subject: [PATCH] backend --- .../vue/config/SecurityConfiguration.java | 52 +++++++++++++++++++ .../java/com/example/vue/domain/User.java | 13 +++++ .../UserDetailsAuthenticationProvider.java | 26 ++++++++++ .../vue/service/UserDetailsServiceImpl.java | 13 +++++ 4 files changed, 104 insertions(+) create mode 100644 src/main/java/com/example/vue/config/SecurityConfiguration.java create mode 100644 src/main/java/com/example/vue/domain/User.java create mode 100644 src/main/java/com/example/vue/security/UserDetailsAuthenticationProvider.java create mode 100644 src/main/java/com/example/vue/service/UserDetailsServiceImpl.java 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; + } +}