浏览代码

Ajustes para Build com GraalVM
mvn clean package -Pnative native:compile

Ranghetti 6 月之前
父节点
当前提交
cd18cc546e

+ 10 - 24
pom.xml

@@ -29,7 +29,6 @@
 
     <properties>
         <java.version>21</java.version>
-        <spring.aot.enabled>true</spring.aot.enabled>
     </properties>
 
     <dependencies>
@@ -57,12 +56,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <scope>runtime</scope>
-            <optional>true</optional>
-        </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
@@ -100,7 +93,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.11.0</version>
                 <configuration>
+                    <source>21</source>
+                    <target>21</target>
+                    <release>21</release>
                     <annotationProcessorPaths>
                         <path>
                             <groupId>org.projectlombok</groupId>
@@ -131,26 +128,13 @@
             <plugin>
                 <groupId>org.graalvm.buildtools</groupId>
                 <artifactId>native-maven-plugin</artifactId>
-                <version>0.10.1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>compile-no-fork</goal>
-                        </goals>
-                    </execution>
-                </executions>
+                <configuration>
+                    <mainClass>com.platform2easy.genesis.GenesisApplication</mainClass>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
             </plugin>
         </plugins>
     </build>
@@ -159,7 +143,9 @@
         <profile>
             <id>native</id>
             <activation>
-                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>native</name>
+                </property>
             </activation>
             <properties>
                 <spring.aot.enabled>true</spring.aot.enabled>

+ 1 - 16
src/main/java/com/platform2easy/genesis/GenesisApplication.java

@@ -1,13 +1,8 @@
 package com.platform2easy.genesis;
 
-import com.platform2easy.genesis.domain.enums.UserRole;
-import com.platform2easy.genesis.domain.model.User2Easy;
-import com.platform2easy.genesis.domain.repository.UserRepository;
-import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
 
 @SpringBootApplication
 public class GenesisApplication {
@@ -15,14 +10,4 @@ public class GenesisApplication {
     public static void main(String[] args) {
         SpringApplication.run(GenesisApplication.class, args);
     }
-
-    @Bean
-    public CommandLineRunner initDataBase(UserRepository user) {
-        return args -> {
-            user.save(new User2Easy(null, "admin", new BCryptPasswordEncoder().encode("admin"), "Administrador", UserRole.ADMIN));
-            user.save(new User2Easy(null, "operador", new BCryptPasswordEncoder().encode("1234"), "Operador Escrow", UserRole.ESCROW_USER));
-            user.save(new User2Easy(null, "produtor", new BCryptPasswordEncoder().encode("1234"), "Produtor", UserRole.TRADER_USER));
-            user.save(new User2Easy(null, "corretor", new BCryptPasswordEncoder().encode("1234"), "Corretor", UserRole.BROKER_USER));
-        };
-    }
 }

+ 28 - 0
src/main/java/com/platform2easy/genesis/domain/mock/DatabaseFake.java

@@ -0,0 +1,28 @@
+package com.platform2easy.genesis.domain.mock;
+
+import com.platform2easy.genesis.domain.enums.UserRole;
+import com.platform2easy.genesis.domain.model.User2Easy;
+import com.platform2easy.genesis.domain.repository.UserRepository;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Component;
+
+@Component
+@Order(1)
+public class DatabaseFake implements CommandLineRunner {
+
+    private final UserRepository userRepository;
+
+    public DatabaseFake(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    @Override
+    public void run(String... args) {
+        userRepository.save(new User2Easy(null, "admin", new BCryptPasswordEncoder().encode("admin"), "Administrador", UserRole.ADMIN));
+        userRepository.save(new User2Easy(null, "operador", new BCryptPasswordEncoder().encode("1234"), "Operador Escrow", UserRole.ESCROW_USER));
+        userRepository.save(new User2Easy(null, "produtor", new BCryptPasswordEncoder().encode("1234"), "Produtor", UserRole.TRADER_USER));
+        userRepository.save(new User2Easy(null, "corretor", new BCryptPasswordEncoder().encode("1234"), "Corretor", UserRole.BROKER_USER));
+    }
+}

+ 17 - 11
src/main/java/com/platform2easy/genesis/security/config/SecurityConfiguration.java

@@ -2,7 +2,9 @@ package com.platform2easy.genesis.security.config;
 
 
 import com.platform2easy.genesis.domain.enums.UserRole;
+import com.platform2easy.genesis.domain.service.UserService;
 import com.platform2easy.genesis.security.filter.AuthorizationFilter;
+import com.platform2easy.genesis.security.service.TokenService;
 import lombok.AllArgsConstructor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -13,6 +15,7 @@ import org.springframework.security.config.annotation.authentication.configurati
 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.config.http.SessionCreationPolicy;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.SecurityFilterChain;
@@ -23,7 +26,13 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
 @AllArgsConstructor
 public class SecurityConfiguration {
 
-    private final AuthorizationFilter authorizationFilter;
+    private final TokenService tokenService;
+    private final UserService userService;
+
+    @Bean
+    public AuthorizationFilter authorizationFilter() {
+        return new AuthorizationFilter(tokenService, userService);
+    }
 
     @Bean
     public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
@@ -31,20 +40,19 @@ public class SecurityConfiguration {
                 .csrf(AbstractHttpConfigurer::disable)
                 .cors(Customizer.withDefaults())
                 .exceptionHandling(Customizer.withDefaults())
-                //.sessionManagement(sessionManagementConfigurer -> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
-                //.httpBasic(Customizer.withDefaults())
-                .authorizeHttpRequests(authorizationRegistry -> authorizationRegistry
-                        .requestMatchers("/login", "/images/**", "/css/**","/error/**").permitAll()
+                .httpBasic(Customizer.withDefaults())
+                .authorizeHttpRequests(auth -> auth
+                        .requestMatchers("/login", "/images/**", "/css/**", "/error/**").permitAll()
                         .requestMatchers(HttpMethod.POST, "/authentication/login").permitAll()
                         .requestMatchers("/api/**").authenticated()
                         .requestMatchers("/compra", "/compra/**").hasRole(UserRole.ADMIN.toString())
                         .anyRequest().authenticated())
-                .addFilterBefore(authorizationFilter, UsernamePasswordAuthenticationFilter.class)
-                .formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer
+                .addFilterBefore(authorizationFilter(), UsernamePasswordAuthenticationFilter.class)
+                .formLogin(form -> form
                         .loginPage("/login")
                         .defaultSuccessUrl("/", true)
                         .permitAll())
-                .logout(httpSecurityLogoutConfigurer -> httpSecurityLogoutConfigurer
+                .logout(logout -> logout
                         .logoutUrl("/logout")
                         .logoutSuccessUrl("/"))
                 .build();
@@ -59,6 +67,4 @@ public class SecurityConfiguration {
     public PasswordEncoder passwordEncoder() {
         return new BCryptPasswordEncoder();
     }
-
-
-}
+}

+ 19 - 12
src/main/java/com/platform2easy/genesis/security/filter/AuthorizationFilter.java

@@ -1,12 +1,12 @@
 package com.platform2easy.genesis.security.filter;
 
-import com.platform2easy.genesis.domain.repository.UserRepository;
+import com.platform2easy.genesis.domain.service.UserService;
 import com.platform2easy.genesis.security.service.TokenService;
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -15,29 +15,36 @@ import org.springframework.web.filter.OncePerRequestFilter;
 
 import java.io.IOException;
 
-@Component
 public class AuthorizationFilter extends OncePerRequestFilter {
-    @Autowired
-    TokenService tokenService;
-    @Autowired
-    UserRepository userRepository;
+
+    private final TokenService tokenService;
+    private final UserService userService;
+
+    public AuthorizationFilter(TokenService tokenService, UserService userService) {
+        this.tokenService = tokenService;
+        this.userService = userService;
+    }
 
     @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
-        var token = this.recoverToken(request);
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+            throws ServletException, IOException {
+
+        var token = recoverToken(request);
         if (token != null) {
             var login = tokenService.validateToken(token);
-            UserDetails user = userRepository.findByLogin(login);
-
+            UserDetails user = userService.loadUserByUsername(login);
             var authentication = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
             SecurityContextHolder.getContext().setAuthentication(authentication);
         }
+
         filterChain.doFilter(request, response);
     }
 
     private String recoverToken(HttpServletRequest request) {
         var authHeader = request.getHeader("Authorization");
-        if (authHeader == null) return null;
+        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
+            return null;
+        }
         return authHeader.replace("Bearer ", "");
     }
 }

+ 6 - 1
src/main/resources/templates/commodity/list.html

@@ -9,7 +9,12 @@
     <div th:fragment="content">
         <section>
             <div class="container p-4 shadow bg-white rounded">
-                <h1 class="mb-4" th:text="${titulo}"></h1>
+                <div class="d-flex align-items-center justify-content-between mb-4">
+                    <h1 class="mb-4" th:text="${titulo}"></h1>
+                    <a th:href="@{/commodity}" type="button" class="btn btn-outline-dark" title="Novo">
+                        <i class="bi bi-plus-square"></i>
+                    </a>
+                </div>
                 <table class="table table-hover">
                     <thead>
                     <tr>