Add authorization by auth server

This commit is contained in:
kashiuno 2025-02-15 17:24:10 +03:00
parent e98789a1ee
commit 7dbfd77547
10 changed files with 75 additions and 28 deletions

View File

@ -1,49 +1,51 @@
plugins { plugins {
java java
id("org.springframework.boot") version "3.4.1" id("org.springframework.boot") version "3.4.1"
id("io.spring.dependency-management") version "1.1.7" id("io.spring.dependency-management") version "1.1.7"
id("com.vaadin") version "24.6.0" id("com.vaadin") version "24.6.0"
} }
group = "ru.vyatsu" group = "ru.vyatsu"
version = "1.0.0" version = "1.0.0"
java { java {
toolchain { toolchain {
languageVersion = JavaLanguageVersion.of(17) languageVersion = JavaLanguageVersion.of(17)
} }
} }
configurations { configurations {
compileOnly { compileOnly {
extendsFrom(configurations.annotationProcessor.get()) extendsFrom(configurations.annotationProcessor.get())
} }
} }
repositories { repositories {
mavenCentral() mavenCentral()
} }
extra["vaadinVersion"] = "24.6.0" extra["vaadinVersion"] = "24.6.0"
dependencies { dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.vaadin:vaadin-spring-boot-starter") implementation("com.vaadin:vaadin-spring-boot-starter")
implementation("org.yaml:snakeyaml") implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok") implementation("org.yaml:snakeyaml")
runtimeOnly("org.postgresql:postgresql") compileOnly("org.projectlombok:lombok")
testImplementation("org.springframework.boot:spring-boot-starter-test") annotationProcessor("org.projectlombok:lombok")
testRuntimeOnly("org.junit.platform:junit-platform-launcher") runtimeOnly("org.postgresql:postgresql")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
} }
dependencyManagement { dependencyManagement {
imports { imports {
mavenBom("com.vaadin:vaadin-bom:${property("vaadinVersion")}") mavenBom("com.vaadin:vaadin-bom:${property("vaadinVersion")}")
} }
} }
tasks.withType<Test> { tasks.withType<Test> {
useJUnitPlatform() useJUnitPlatform()
} }

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.client.component.ClientEditor; import ru.vyatsu.qr_access_admin.client.component.ClientEditor;
import ru.vyatsu.qr_access_admin.client.entity.ClientEntity; import ru.vyatsu.qr_access_admin.client.entity.ClientEntity;
import ru.vyatsu.qr_access_admin.client.entity.ClientRepository; import ru.vyatsu.qr_access_admin.client.entity.ClientRepository;
@ -16,6 +17,7 @@ import java.util.List;
@Route(value = "clients", layout = MainLayout.class) @Route(value = "clients", layout = MainLayout.class)
@PageTitle("Клиенты") @PageTitle("Клиенты")
@PermitAll
public class ClientView extends VerticalLayout { public class ClientView extends VerticalLayout {
private final ClientRepository repository; private final ClientRepository repository;
private final Grid<ClientEntity> grid; private final Grid<ClientEntity> grid;

View File

@ -0,0 +1,17 @@
package ru.vyatsu.qr_access_admin.common.config;
import com.vaadin.flow.spring.security.VaadinWebSecurity;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends VaadinWebSecurity {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.oauth2Login(c -> c.loginProcessingUrl("/login/oauth2/code/own"));
}
}

View File

@ -1,12 +1,14 @@
package ru.vyatsu.qr_access_admin.common.view; package ru.vyatsu.qr_access_admin.common.view;
import ru.vyatsu.qr_access_admin.common.MainLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.common.MainLayout;
@Route(value = "", layout = MainLayout.class) @Route(value = "", layout = MainLayout.class)
@PageTitle("Start") @PageTitle("Start")
@PermitAll
public class MainView extends VerticalLayout { public class MainView extends VerticalLayout {
} }

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Query; import jakarta.persistence.Query;
@ -22,6 +23,7 @@ import java.util.List;
@Route(value = "doors", layout = MainLayout.class) @Route(value = "doors", layout = MainLayout.class)
@PageTitle("Двери") @PageTitle("Двери")
@PermitAll
public class DoorView extends VerticalLayout { public class DoorView extends VerticalLayout {
private final Grid<DoorEntity> grid; private final Grid<DoorEntity> grid;
private final DoorRepository repository; private final DoorRepository repository;

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.common.MainLayout;
import ru.vyatsu.qr_access_admin.partner.component.PartnerEditor; import ru.vyatsu.qr_access_admin.partner.component.PartnerEditor;
import ru.vyatsu.qr_access_admin.partner.entity.PartnerEntity; import ru.vyatsu.qr_access_admin.partner.entity.PartnerEntity;
@ -16,6 +17,7 @@ import java.util.List;
@Route(value = "partners", layout = MainLayout.class) @Route(value = "partners", layout = MainLayout.class)
@PageTitle("Партнеры") @PageTitle("Партнеры")
@PermitAll
public class PartnerView extends VerticalLayout { public class PartnerView extends VerticalLayout {
private final PartnerRepository repository; private final PartnerRepository repository;
private final Grid<PartnerEntity> grid; private final Grid<PartnerEntity> grid;

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.common.MainLayout;
import ru.vyatsu.qr_access_admin.door.entity.DoorRepository; import ru.vyatsu.qr_access_admin.door.entity.DoorRepository;
import ru.vyatsu.qr_access_admin.qr.component.QrEditor; import ru.vyatsu.qr_access_admin.qr.component.QrEditor;
@ -17,6 +18,7 @@ import java.util.List;
@Route(value = "qrs", layout = MainLayout.class) @Route(value = "qrs", layout = MainLayout.class)
@PageTitle("Коды") @PageTitle("Коды")
@PermitAll
public class QrView extends VerticalLayout { public class QrView extends VerticalLayout {
private final QrRepository repository; private final QrRepository repository;
private final Grid<QrEntity> grid; private final Grid<QrEntity> grid;

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.common.MainLayout;
import ru.vyatsu.qr_access_admin.slot.component.SlotEditor; import ru.vyatsu.qr_access_admin.slot.component.SlotEditor;
import ru.vyatsu.qr_access_admin.slot.entity.SlotEntity; import ru.vyatsu.qr_access_admin.slot.entity.SlotEntity;
@ -16,6 +17,7 @@ import java.util.List;
@Route(value = "slots", layout = MainLayout.class) @Route(value = "slots", layout = MainLayout.class)
@PageTitle("Слоты") @PageTitle("Слоты")
@PermitAll
public class SlotView extends VerticalLayout { public class SlotView extends VerticalLayout {
private final SlotRepository repository; private final SlotRepository repository;
private final Grid<SlotEntity> grid; private final Grid<SlotEntity> grid;

View File

@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.common.MainLayout;
import ru.vyatsu.qr_access_admin.unit.component.UnitEditor; import ru.vyatsu.qr_access_admin.unit.component.UnitEditor;
import ru.vyatsu.qr_access_admin.unit.entity.UnitEntity; import ru.vyatsu.qr_access_admin.unit.entity.UnitEntity;
@ -18,6 +19,7 @@ import java.util.List;
@Route(value = "units", layout = MainLayout.class) @Route(value = "units", layout = MainLayout.class)
@PageTitle("Устройства") @PageTitle("Устройства")
@PermitAll
public class UnitView extends VerticalLayout { public class UnitView extends VerticalLayout {
private final UnitRepository unitRepository; private final UnitRepository unitRepository;

View File

@ -9,6 +9,20 @@ spring:
password: 123 password: 123
security: security:
oauth2: oauth2:
resourceserver: client:
jwt: registration:
jwk-set-uri: http://localhost:8081/oauth2/jwks own:
clientId: ${CLIENT_ID:admin}
clientSecret: ${CLIENT_SECRET:}
authorizationGrantType: authorization_code
clientAuthenticationMethod: none
scope:
- admin
- openid
redirectUri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
own:
issuerUri: http://127.0.0.1:8081
jwkSetUri: http://127.0.0.1:8081/oauth2/jwks
tokenUri: http://127.0.0.1:8081/oauth2/token
authorizationUri: http://127.0.0.1:8081/oauth2/authorize