lab6-7
This commit is contained in:
@@ -28,6 +28,7 @@ dependencies {
|
|||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
|
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
implementation 'org.springframework.security:spring-security-core'
|
implementation 'org.springframework.security:spring-security-core'
|
||||||
implementation 'org.springframework.security:spring-security-web'
|
implementation 'org.springframework.security:spring-security-web'
|
||||||
@@ -39,6 +40,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation 'org.hibernate.orm:hibernate-community-dialects'
|
implementation 'org.hibernate.orm:hibernate-community-dialects'
|
||||||
implementation 'org.xerial:sqlite-jdbc:3.46.1.3'
|
implementation 'org.xerial:sqlite-jdbc:3.46.1.3'
|
||||||
|
implementation 'com.h2database:h2'
|
||||||
|
|
||||||
compileOnly 'org.projectlombok:lombok'
|
compileOnly 'org.projectlombok:lombok'
|
||||||
annotationProcessor 'org.projectlombok:lombok'
|
annotationProcessor 'org.projectlombok:lombok'
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.springframework.security.authentication.AuthenticationManager;
|
|||||||
import org.springframework.security.authentication.ProviderManager;
|
import org.springframework.security.authentication.ProviderManager;
|
||||||
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
|
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
@@ -19,21 +20,18 @@ public class SecurityConfig {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||||
http.authorizeHttpRequests(auth -> auth
|
http.csrf(AbstractHttpConfigurer::disable)
|
||||||
|
.authorizeHttpRequests(auth -> auth
|
||||||
.requestMatchers("/").permitAll()
|
.requestMatchers("/").permitAll()
|
||||||
.requestMatchers("/login").permitAll()
|
.requestMatchers("/login").permitAll()
|
||||||
.requestMatchers("/register").permitAll()
|
.requestMatchers("/register").permitAll()
|
||||||
.requestMatchers("/logout").permitAll()
|
.requestMatchers("/logout").permitAll()
|
||||||
|
// .requestMatchers("/api/**").permitAll()
|
||||||
.requestMatchers("/css/**").permitAll()
|
.requestMatchers("/css/**").permitAll()
|
||||||
.requestMatchers("/js/**").permitAll()
|
.requestMatchers("/js/**").permitAll()
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
);
|
);
|
||||||
// http.formLogin(form -> form
|
|
||||||
// .loginPage("/login")
|
|
||||||
// .loginProcessingUrl("/login")
|
|
||||||
// .usernameParameter("email")
|
|
||||||
// .failureHandler(authenticationFailureHandler())
|
|
||||||
// .permitAll());
|
|
||||||
http.exceptionHandling(exception -> exception.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));
|
http.exceptionHandling(exception -> exception.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));
|
||||||
http.logout(logout -> logout.logoutSuccessUrl("/").permitAll());
|
http.logout(logout -> logout.logoutSuccessUrl("/").permitAll());
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package ru.lionarius.isdojplab.config;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties(prefix = "store")
|
||||||
|
public class StoreProperties {
|
||||||
|
private String name = "Магазин электротоваров";
|
||||||
|
private String description = "Все для вашего дома и офиса";
|
||||||
|
}
|
||||||
@@ -9,8 +9,11 @@ import ru.lionarius.isdojplab.repository.ProductRepository;
|
|||||||
@Controller
|
@Controller
|
||||||
public class HomeController {
|
public class HomeController {
|
||||||
|
|
||||||
@Autowired
|
private final ProductRepository productRepository;
|
||||||
private ProductRepository productRepository;
|
|
||||||
|
public HomeController(ProductRepository productRepository) {
|
||||||
|
this.productRepository = productRepository;
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/")
|
@GetMapping("/")
|
||||||
public String home(Model model) {
|
public String home(Model model) {
|
||||||
|
|||||||
@@ -35,14 +35,6 @@ public class LoginFormController {
|
|||||||
return "login_form";
|
return "login_form";
|
||||||
}
|
}
|
||||||
|
|
||||||
// @PostMapping("/login")
|
|
||||||
// public String submitForm(@RequestParam String email, @RequestParam String password) {
|
|
||||||
// System.out.println(email);
|
|
||||||
// System.out.println(password);
|
|
||||||
//
|
|
||||||
// return "redirect:/";
|
|
||||||
// }
|
|
||||||
|
|
||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
public String submitForm(@ModelAttribute("user") User user, BindingResult bindingResult, Model model, HttpSession httpSession) {
|
public String submitForm(@ModelAttribute("user") User user, BindingResult bindingResult, Model model, HttpSession httpSession) {
|
||||||
if (bindingResult.hasErrors()) {
|
if (bindingResult.hasErrors()) {
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package ru.lionarius.isdojplab.rest;
|
||||||
|
|
||||||
|
import org.springframework.data.rest.core.annotation.HandleBeforeCreate;
|
||||||
|
import org.springframework.data.rest.core.annotation.HandleBeforeSave;
|
||||||
|
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.lionarius.isdojplab.model.User;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RepositoryEventHandler
|
||||||
|
public class UserEventHandler {
|
||||||
|
|
||||||
|
private final PasswordEncoder passwordEncoder;
|
||||||
|
|
||||||
|
public UserEventHandler(PasswordEncoder passwordEncoder) {
|
||||||
|
this.passwordEncoder = passwordEncoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@HandleBeforeCreate
|
||||||
|
public void handleBeforeCreate(User user) {
|
||||||
|
encodePassword(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@HandleBeforeSave
|
||||||
|
public void handleBeforeSave(User user) {
|
||||||
|
encodePassword(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void encodePassword(User user) {
|
||||||
|
if (user.getPassword() != null) {
|
||||||
|
user.setPassword(passwordEncoder.encode(user.getPassword()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package ru.lionarius.isdojplab.runner;
|
||||||
|
|
||||||
|
import org.springframework.boot.CommandLineRunner;
|
||||||
|
import org.springframework.context.annotation.Profile;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.lionarius.isdojplab.model.Product;
|
||||||
|
import ru.lionarius.isdojplab.repository.ProductRepository;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Profile("dev")
|
||||||
|
public class DevDataInitializer implements CommandLineRunner {
|
||||||
|
|
||||||
|
private final ProductRepository productRepository;
|
||||||
|
|
||||||
|
public DevDataInitializer(ProductRepository productRepository) {
|
||||||
|
this.productRepository = productRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) throws Exception {
|
||||||
|
productRepository.save(new Product(null, "Тестовый товар 1", 1000.0, "Описание товара", null));
|
||||||
|
productRepository.save(new Product(null, "Тестовый товар 2", 2000.0, "Описание товара", null));
|
||||||
|
productRepository.save(new Product(null, "Тестовый товар 3", 3000.0, "Описание товара", null));
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/main/resources/application-dev.properties
Normal file
6
src/main/resources/application-dev.properties
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
spring.datasource.driver-class-name=org.sqlite.JDBC
|
||||||
|
spring.datasource.url=jdbc:sqlite::memory:
|
||||||
|
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
|
||||||
|
spring.jpa.generate-ddl=true
|
||||||
|
spring.jpa.hibernate.ddl-auto=create-drop
|
||||||
|
spring.jpa.show-sql=true
|
||||||
6
src/main/resources/application-prod.properties
Normal file
6
src/main/resources/application-prod.properties
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
spring.datasource.driver-class-name=org.sqlite.JDBC
|
||||||
|
spring.datasource.url=jdbc:sqlite:./database/data.db
|
||||||
|
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
|
||||||
|
spring.jpa.generate-ddl=true
|
||||||
|
spring.jpa.hibernate.ddl-auto=update
|
||||||
|
spring.jpa.show-sql=false
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
|
spring.profiles.active=dev
|
||||||
spring.application.name=isdojp-lab
|
spring.application.name=isdojp-lab
|
||||||
spring.datasource.driver-class-name=org.sqlite.JDBC
|
spring.data.rest.base-path=/api
|
||||||
spring.datasource.url=jdbc:sqlite:./database/data.db
|
|
||||||
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
|
store.name=asdfasfsdfs
|
||||||
spring.jpa.generate-ddl=true
|
store.description=\u0412\u0441\u0435 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0430 \u0438 \u043e\u0444\u0438\u0441\u0430
|
||||||
spring.jpa.hibernate.ddl-auto=update
|
|
||||||
spring.jpa.show-sql=true
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<header>
|
<header>
|
||||||
<h1>Магазин электротоваров</h1>
|
<h1 th:text="${@storeProperties.name}"></h1>
|
||||||
<p>Все для вашего дома и офиса</p>
|
<p th:text="${@storeProperties.description}"></p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
Reference in New Issue
Block a user