Lab 6 Vue
This commit is contained in:
parent
37b1196914
commit
54ec769a9e
@ -17,6 +17,7 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
@EnableMethodSecurity(
|
||||
@ -48,6 +49,7 @@ public class SecurityConfiguration {
|
||||
.authorizeHttpRequests()
|
||||
.requestMatchers(MasterSignupMvcController.SIGNUP_URL).permitAll()
|
||||
.requestMatchers(HttpMethod.GET, LOGIN_URL).permitAll()
|
||||
.requestMatchers("/product").permitAll()
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.formLogin()
|
||||
@ -68,9 +70,20 @@ public class SecurityConfiguration {
|
||||
@Bean
|
||||
public WebSecurityCustomizer webSecurityCustomizer() {
|
||||
return (web) -> web.ignoring()
|
||||
.requestMatchers("/css/**")
|
||||
.requestMatchers("/js/**")
|
||||
.requestMatchers("/templates/**")
|
||||
.requestMatchers("/webjars/**");
|
||||
.requestMatchers(HttpMethod.OPTIONS, "/**")
|
||||
.requestMatchers("/*.js")
|
||||
.requestMatchers("/*.html")
|
||||
.requestMatchers("/*.css")
|
||||
.requestMatchers("/assets/**")
|
||||
.requestMatchers("/favicon.ico")
|
||||
.requestMatchers("/.js", "/.css")
|
||||
.requestMatchers("/swagger-ui/index.html")
|
||||
.requestMatchers("/webjars/**")
|
||||
.requestMatchers("/swagger-resources/**")
|
||||
.requestMatchers("/v3/api-docs/**")
|
||||
.requestMatchers("/h2-console");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
package com.example.demo.util.error;
|
||||
|
||||
|
||||
import com.example.demo.master.Master;
|
||||
import com.example.demo.master.MasterNotFoundException;
|
||||
import com.example.demo.order.Order;
|
||||
import com.example.demo.order.OrderNotFoundException;
|
||||
import com.example.demo.product.ProductNotFoundException;
|
||||
import com.example.demo.util.validation.ValidationException;
|
||||
@ -11,17 +12,15 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ControllerAdvice
|
||||
|
||||
public class AdviceController {
|
||||
@ExceptionHandler({
|
||||
MasterNotFoundException.class,
|
||||
ProductNotFoundException.class,
|
||||
OrderNotFoundException.class,
|
||||
ValidationException.class,
|
||||
ProductNotFoundException.class,
|
||||
ValidationException.class
|
||||
})
|
||||
public ResponseEntity<Object> handleException(Throwable e) {
|
||||
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
|
||||
|
@ -6,4 +6,8 @@ public class ValidationException extends RuntimeException {
|
||||
public ValidationException(Set<String> errors) {
|
||||
super(String.join("\n", errors));
|
||||
}
|
||||
|
||||
public <T> ValidationException(String error) {
|
||||
super(error);
|
||||
}
|
||||
}
|
||||
|
@ -21,5 +21,6 @@ form {
|
||||
}
|
||||
|
||||
.product-div {
|
||||
background: #e874ac;
|
||||
background: #e874ac !important;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
<div class="container">
|
||||
<div class="row gy-5 p-2">
|
||||
<form th:action="@{/order/masters_order}" method="get">
|
||||
<select th:name="master_id" class="form-select" aria-label="Default select example">
|
||||
<select th:name="master_id" class="form-select login-form" aria-label="Default select example">
|
||||
<option th:each="master : ${masters}" th:id="master_id" th:value="${master.id}" >
|
||||
<span th:text="${master.firstName + ' ' + master.lastName }"></span>
|
||||
</option>
|
||||
|
@ -24,10 +24,10 @@
|
||||
<div th:each="product : ${order.products}" class="row product-div p-2 m-2">
|
||||
<input type="hidden" name="id_item" th:name="id" th:value="${product.id}">
|
||||
<div class="col">
|
||||
<h2 th:text="${product.name}"></h2>
|
||||
<h2 th:text="${product.name}" style="color: white !important;"></h2>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 th:text="${product.cost} + '$'"></h3>
|
||||
<h3 th:text="${product.cost} + '$'" style="color: white !important;"></h3>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button name="action" value="delete" class="btn btn-primary w-100 h-100 text-lg-center">Delete</button>
|
||||
@ -35,7 +35,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h2 th:text="${fullCost} + '$'"></h2>
|
||||
<h2 th:text="${fullCost} + '$'" style="color: white !important;"></h2>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3><button name="action" value="buy" class="btn btn-primary w-100">Buy</button>
|
||||
|
@ -19,8 +19,8 @@
|
||||
<div layout:fragment="content">
|
||||
<div>
|
||||
<form method="post" th:object="${product}">
|
||||
<input type="text" th:field="*{name}" th:value="${product.getName()}" name="name" class="form-control" id="name">
|
||||
<input type="number" th:field="*{cost}" th:value="${product.getCost()}" name="cost" class="form-control" id="cost">
|
||||
<input type="text" th:field="*{name}" th:value="${product.getName()}" name="name" class="form-control login-form" id="name">
|
||||
<input type="number" th:field="*{cost}" th:value="${product.getCost()}" name="cost" class="form-control login-form" id="cost">
|
||||
<button type="submit" class="btn btn-primary" th:text="${buttonText}">Add</button>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -22,10 +22,10 @@
|
||||
<form method="post" th:object="${item}" >
|
||||
<input type="hidden" th:name="id" th:value="${item.getId()}">
|
||||
<div class="col">
|
||||
<h2 th:text="${item.getName()}" th:name="*{name}"></h2>
|
||||
<h2 th:text="${item.getName()}" style="color: white !important;" th:name="*{name}"></h2>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 th:text="${item.getCost()} + '$'" th:name="*{cost}"></h3>
|
||||
<h3 th:text="${item.getCost()} + '$'" style="color: white !important;" th:name="*{cost}"></h3>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="submit" class="btn btn-primary w-100">Buy</button>
|
||||
|
@ -19,19 +19,19 @@
|
||||
<form method="post" th:object="${user}">
|
||||
<div class="container">
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="text" name="name" class="form-control"
|
||||
<input type="text" name="name" class="form-control login-form"
|
||||
id="name" placeholder="Name" th:value="${user.firstName}" th:field="*{firstName}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="text" name="surname" class="form-control"
|
||||
<input type="text" name="surname" class="form-control login-form"
|
||||
id="surname" placeholder="Surname" th:value="${user.lastName}" th:field="*{lastName}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="email" name="email" class="form-control"
|
||||
<input type="email" name="email" class="form-control login-form"
|
||||
id="email" placeholder="Email" th:value="${user.email}" th:field="*{email}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="password" name="password" class="form-control"
|
||||
<input type="password" name="password" class="form-control login-form"
|
||||
id="password" placeholder="Password" th:value="${user.password}" th:field="*{password}">
|
||||
</div>
|
||||
<div th:if='${user.firstName != null}' class="row align-items-start">
|
||||
|
@ -23,10 +23,10 @@
|
||||
</div>
|
||||
<div th:each="item : ${products}" class="row product-div p-2 m-2">
|
||||
<div class="col">
|
||||
<h2 th:text="${item.name}"></h2>
|
||||
<h2 th:text="${item.name}" style="color: white !important;"></h2>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 th:text="${item.cost} + '$'"></h3>
|
||||
<h3 th:text="${item.cost} + '$'" style="color: white !important;"></h3>
|
||||
</div>
|
||||
<div class="col">
|
||||
<a th:href="'/product/update_product/' + ${{item.id}}" class="btn btn-primary w-100 h-100 text-lg-center">Edit</a>
|
||||
|
@ -7,6 +7,13 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
|
||||
<style>
|
||||
.login-form {
|
||||
color: black !important;
|
||||
background-color: white !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ"
|
||||
crossorigin="anonymous">
|
||||
@ -17,10 +24,10 @@
|
||||
integrity="sha384-Y4oOpwW3duJdCWv5ly8SCFYWqFDsfob/3GkgExXKV4idmbt98QcxXYs9UoXAB7BZ"
|
||||
crossorigin="anonymous"></script>
|
||||
</head>
|
||||
<body>
|
||||
<body style="background: #f54d9a">
|
||||
<div id="body-shell">
|
||||
<header class="logo d-flex flex-wrap align-items-center justify-content-center
|
||||
justify-content-md-between py-3 mb-4 border-bottom" th:fragment="header">
|
||||
justify-content-md-between py-3 mb-4 border-bottom" th:fragment="header" style="background: #FF9CCE !important;">
|
||||
<a href="/" class="d-flex align-items-center col-md-3 mb-2 mb-md-0 text-dark text-decoration-none">
|
||||
<svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap"><use xlink:href="#bootstrap"></use></svg>
|
||||
</a>
|
||||
|
13
src/main/resources/templates/error.html
Normal file
13
src/main/resources/templates/error.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{default}">
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content" style="background: #f54d9a">
|
||||
<div><span th:text="${error}"></span></div>
|
||||
<a href="/">Go to main page</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -19,12 +19,12 @@
|
||||
<form th:action="@{/login}" method="post">
|
||||
<div class="mb-3">
|
||||
<p class="mb-1">Login</p>
|
||||
<input name="username" id="username" class="form-control"
|
||||
<input name="username" id="username" class="form-control login-form"
|
||||
type="text" required autofocus />
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<p class="mb-1">Password</p>
|
||||
<input name="password" id="password" class="form-control"
|
||||
<input name="password" id="password" class="form-control login-form"
|
||||
type="password" required />
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
|
@ -22,19 +22,19 @@
|
||||
<form method="post" th:object="${userDto}" th:action="@{/signup}">
|
||||
<div class="container">
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="text" name="name" class="form-control"
|
||||
<input type="text" name="name" class="form-control login-form"
|
||||
id="name" placeholder="Name" th:field="${userDto.firstName}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="text" name="surname" class="form-control"
|
||||
<input type="text" name="surname" class="form-control login-form"
|
||||
id="surname" placeholder="Surname" th:field="${userDto.lastName}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="email" name="email" class="form-control"
|
||||
<input type="email" name="email" class="form-control login-form"
|
||||
id="email" placeholder="Email" th:field="${userDto.email}">
|
||||
</div>
|
||||
<div class="row gy-5 p-2">
|
||||
<input type="password" name="password" class="form-control"
|
||||
<input type="password" name="password" class="form-control login-form"
|
||||
id="password" placeholder="Password" th:field="${userDto.password}">
|
||||
</div>
|
||||
<div class="row gy-5">
|
||||
|
Loading…
Reference in New Issue
Block a user