diff --git a/build.gradle b/build.gradle index 42abff46..5c48fa98 100644 --- a/build.gradle +++ b/build.gradle @@ -27,9 +27,12 @@ jar { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' compileOnly 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' diff --git a/src/main/java/ac/knu/likeknu/config/SecurityConfiguration.java b/src/main/java/ac/knu/likeknu/config/SecurityConfiguration.java new file mode 100644 index 00000000..62647ee2 --- /dev/null +++ b/src/main/java/ac/knu/likeknu/config/SecurityConfiguration.java @@ -0,0 +1,51 @@ +package ac.knu.likeknu.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +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.configurers.AbstractHttpConfigurer; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration { + + @Value("${admin.username}") + private String username; + @Value("${admin.password}") + private String password; + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + return http.authorizeHttpRequests(registry -> registry.requestMatchers("/api/**").permitAll() + .anyRequest().authenticated()) + .formLogin(security -> security.loginPage("/admin/login") + .defaultSuccessUrl("/admin/messages") + .permitAll()).csrf(AbstractHttpConfigurer::disable) + .build(); + } + + @Bean + public UserDetailsService userDetailsService() { + BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + UserDetails admin = User.withUsername(username) + .password(password) + .passwordEncoder(encoder::encode) + .roles("USER", "ADMIN") + .build(); + return new InMemoryUserDetailsManager(admin); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/ac/knu/likeknu/controller/AdminController.java b/src/main/java/ac/knu/likeknu/controller/AdminController.java new file mode 100644 index 00000000..aaba74d7 --- /dev/null +++ b/src/main/java/ac/knu/likeknu/controller/AdminController.java @@ -0,0 +1,21 @@ +package ac.knu.likeknu.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@RequestMapping("/admin") +@Controller +public class AdminController { + + @GetMapping("/login") + public String loginForm() { + return "login"; + } + + @GetMapping("/messages") + public String registerMessageForm(Model model) { + return "registerMessage"; + } +} diff --git a/src/main/java/ac/knu/likeknu/domain/value/CafeteriaName.java b/src/main/java/ac/knu/likeknu/domain/value/CafeteriaName.java index f8474861..b3cbd8a1 100644 --- a/src/main/java/ac/knu/likeknu/domain/value/CafeteriaName.java +++ b/src/main/java/ac/knu/likeknu/domain/value/CafeteriaName.java @@ -5,13 +5,13 @@ @Getter public enum CafeteriaName { - STUDENT_CAFETERIA("학생식당", 1), - DORMITORY("생활관식당", 2), + STUDENT_CAFETERIA("학생식당", 10), + DORMITORY("생활관식당", 20), EMPLOYEE_CAFETERIA("직원식당", 3), - SODAM("소담", 4), - NEULSOM("늘솜", 5), - EUNHAENGSA_VISION("은행사/비전", 6), - DREAM("드림", 7); + SODAM("소담", 40), + NEULSOM("늘솜", 50), + EUNHAENGSA_VISION("은행사/비전", 1), + DREAM("드림", 2); private final String cafeteriaName; private final int sequence; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 91cbb157..257b3064 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1 @@ -spring.datasource.url=jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_SCHEMA}?characterEncoding=UTF-8&serverTimezone=UTC -spring.datasource.username=${DB_USERNAME} -spring.datasource.password=${DB_PASSWORD} - -spring.jpa.hibernate.ddl-auto=validate +spring.profiles.active=dev \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 00000000..2a776b69 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,132 @@ + + +
+ + +ID | +알림 요약 | +알림 내용 | +알림 시간 | ++ |
---|---|---|---|---|
+ | + | + | + | + 삭제 + | +