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-validation'
|
||||
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.security:spring-security-core'
|
||||
implementation 'org.springframework.security:spring-security-web'
|
||||
@@ -39,7 +40,8 @@ dependencies {
|
||||
|
||||
implementation 'org.hibernate.orm:hibernate-community-dialects'
|
||||
implementation 'org.xerial:sqlite-jdbc:3.46.1.3'
|
||||
|
||||
implementation 'com.h2database:h2'
|
||||
|
||||
compileOnly '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.dao.DaoAuthenticationProvider;
|
||||
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.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
@@ -19,21 +20,18 @@ public class SecurityConfig {
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||
http.authorizeHttpRequests(auth -> auth
|
||||
http.csrf(AbstractHttpConfigurer::disable)
|
||||
.authorizeHttpRequests(auth -> auth
|
||||
.requestMatchers("/").permitAll()
|
||||
.requestMatchers("/login").permitAll()
|
||||
.requestMatchers("/register").permitAll()
|
||||
.requestMatchers("/logout").permitAll()
|
||||
// .requestMatchers("/api/**").permitAll()
|
||||
.requestMatchers("/css/**").permitAll()
|
||||
.requestMatchers("/js/**").permitAll()
|
||||
.anyRequest().authenticated()
|
||||
);
|
||||
// http.formLogin(form -> form
|
||||
// .loginPage("/login")
|
||||
// .loginProcessingUrl("/login")
|
||||
// .usernameParameter("email")
|
||||
// .failureHandler(authenticationFailureHandler())
|
||||
// .permitAll());
|
||||
|
||||
http.exceptionHandling(exception -> exception.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));
|
||||
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
|
||||
public class HomeController {
|
||||
|
||||
@Autowired
|
||||
private ProductRepository productRepository;
|
||||
private final ProductRepository productRepository;
|
||||
|
||||
public HomeController(ProductRepository productRepository) {
|
||||
this.productRepository = productRepository;
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String home(Model model) {
|
||||
|
||||
@@ -35,14 +35,6 @@ public class LoginFormController {
|
||||
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")
|
||||
public String submitForm(@ModelAttribute("user") User user, BindingResult bindingResult, Model model, HttpSession httpSession) {
|
||||
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.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=true
|
||||
spring.data.rest.base-path=/api
|
||||
|
||||
store.name=asdfasfsdfs
|
||||
store.description=\u0412\u0441\u0435 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0430 \u0438 \u043e\u0444\u0438\u0441\u0430
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<h1>Магазин электротоваров</h1>
|
||||
<p>Все для вашего дома и офиса</p>
|
||||
<h1 th:text="${@storeProperties.name}"></h1>
|
||||
<p th:text="${@storeProperties.description}"></p>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
|
||||
Reference in New Issue
Block a user