Skip to content
This repository has been archived by the owner on Dec 5, 2023. It is now read-only.

Commit

Permalink
Merge pull request #6 from AimCup/AC-7
Browse files Browse the repository at this point in the history
AC-7 0.1.1
  • Loading branch information
OrlowskiAdam authored Oct 11, 2023
2 parents a3d490d + 3a89781 commit 09f1f66
Show file tree
Hide file tree
Showing 18 changed files with 353 additions and 156 deletions.
95 changes: 65 additions & 30 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>xyz.aimcup</groupId>
<artifactId>security-config</artifactId>
<version>0.0.7-TEST</version>
<version>0.1.0</version>
<properties>
<java.version>17</java.version>
<maven.compiler.target>17</maven.compiler.target>
Expand All @@ -16,6 +16,16 @@
<artifactId>spring-boot-starter-web</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
Expand Down Expand Up @@ -63,6 +73,31 @@

<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>process-classes</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/target/classes/static/</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources/shared</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
Expand All @@ -87,35 +122,35 @@
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>6.6.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>
${project.basedir}/src/main/resources/shared/openapi/schema.yaml
</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>xyz.aimcup.generated</apiPackage>
<modelPackage>xyz.aimcup.generated.model</modelPackage>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<useTags>true</useTags>
<skipDefaultInterface>true</skipDefaultInterface>
<interfaceOnly>true</interfaceOnly>
<delegatePattern>false</delegatePattern>
<useJakartaEe>true</useJakartaEe>
<generateApis>false</generateApis>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
<!-- <plugin>-->
<!-- <groupId>org.openapitools</groupId>-->
<!-- <artifactId>openapi-generator-maven-plugin</artifactId>-->
<!-- <version>6.6.0</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <goals>-->
<!-- <goal>generate</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <inputSpec>-->
<!-- ${project.basedir}/src/main/resources/shared/openapi/schema.yaml-->
<!-- </inputSpec>-->
<!-- <generatorName>spring</generatorName>-->
<!-- <apiPackage>xyz.aimcup.generated</apiPackage>-->
<!-- <modelPackage>xyz.aimcup.generated.model</modelPackage>-->
<!-- <generateSupportingFiles>false</generateSupportingFiles>-->
<!-- <configOptions>-->
<!-- <useTags>true</useTags>-->
<!-- <skipDefaultInterface>true</skipDefaultInterface>-->
<!-- <interfaceOnly>true</interfaceOnly>-->
<!-- <delegatePattern>false</delegatePattern>-->
<!-- <useJakartaEe>true</useJakartaEe>-->
<!-- <generateApis>false</generateApis>-->
<!-- </configOptions>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
</plugins>
</build>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package xyz.aimcup.security.configuration;

import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
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.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import xyz.aimcup.security.filter.LocalTokenAuthenticationFilter;

@Configuration
@EnableWebSecurity
@EnableFeignClients(basePackages = "xyz.aimcup.security.feign")
@RequiredArgsConstructor
@ComponentScan(basePackages = "xyz.aimcup.security")
@EnableMethodSecurity(
securedEnabled = true,
jsr250Enabled = true
)
@Slf4j
public class LocalSecurityConfiguration {
private final LocalTokenAuthenticationFilter tokenAuthenticationFilter;

@Bean(name = "globalSecurityFilterChain")
SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.addFilterBefore(tokenAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
.httpBasic(AbstractHttpConfigurer::disable)
.formLogin(AbstractHttpConfigurer::disable)
.build();
}

@PostConstruct
public void postConstruct() {
log.info("SecurityConfiguration loaded. Securing with DEVELOPMENT settings.");
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package xyz.aimcup.security.configuration;

import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
Expand All @@ -23,6 +26,8 @@
securedEnabled = true,
jsr250Enabled = true
)
@Profile("!dev")
@Slf4j
public class SecurityConfiguration {
private final TokenAuthenticationFilter tokenAuthenticationFilter;

Expand All @@ -37,4 +42,9 @@ SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Except
.formLogin(AbstractHttpConfigurer::disable)
.build();
}

@PostConstruct
public void postConstruct() {
log.info("SecurityConfiguration loaded. Securing with PRODUCTION settings.");
}
}
42 changes: 42 additions & 0 deletions src/main/java/xyz/aimcup/security/domain/Role.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package xyz.aimcup.security.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.NaturalId;
import org.springframework.security.core.GrantedAuthority;


@Entity
@Getter
@Setter
public class Role implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;

@Enumerated(EnumType.STRING)
@NaturalId
@Column(length = 60, name = "name")
private RoleName name;

public Role() {

}

public Role(RoleName name) {
this.name = name;
}

@Override
public String getAuthority() {
return this.name.toString();
}
}
28 changes: 0 additions & 28 deletions src/main/java/xyz/aimcup/security/domain/RoleBase.java

This file was deleted.

41 changes: 41 additions & 0 deletions src/main/java/xyz/aimcup/security/domain/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package xyz.aimcup.security.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Table;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Table(name="\"user\"")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private String username;
private Long osuId;
private Boolean isRestricted;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
}
21 changes: 0 additions & 21 deletions src/main/java/xyz/aimcup/security/domain/UserBase.java

This file was deleted.

13 changes: 13 additions & 0 deletions src/main/java/xyz/aimcup/security/dto/RoleResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package xyz.aimcup.security.dto;

import lombok.Data;

import java.util.UUID;

@Data
public class RoleResponseDto {
private UUID id;

private String name;

}
21 changes: 21 additions & 0 deletions src/main/java/xyz/aimcup/security/dto/UserResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package xyz.aimcup.security.dto;

import jakarta.validation.Valid;
import lombok.Data;

import java.util.List;
import java.util.UUID;

@Data
public class UserResponseDto {
private UUID id;

private String username;

private Integer osuId;

private Boolean isRestricted;

@Valid
private List<Object> roles;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import xyz.aimcup.generated.model.UserResponseDto;
import xyz.aimcup.security.domain.UserBase;
import xyz.aimcup.security.dto.UserResponseDto;

@FeignClient(name = "user-microservice", path = "/user/auth-service")
@FeignClient(name = "user-microservice", path = "/user")
@Headers("Authorization: Bearer {token}")
public interface AuthServiceClient {

@GetMapping("/me")
ResponseEntity<UserResponseDto> user(@RequestHeader("Authorization") String token);
ResponseEntity<UserResponseDto> me(@RequestHeader("Authorization") String token);
}
Loading

0 comments on commit 09f1f66

Please sign in to comment.