Add new spring-boot parent and configure log4j2. Add swagger documentation.

This commit is contained in:
Konstantinos Triantafyllou 2022-10-10 15:55:40 +03:00
parent 8d732406b4
commit 81ff5b3c21
13 changed files with 201 additions and 86 deletions

48
pom.xml
View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>eu.dnetlib</groupId>
<artifactId>dnet45-parent</artifactId>
<artifactId>uoa-spring-boot-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>login-service</artifactId>
@ -11,42 +11,11 @@
<packaging>war</packaging>
<name>login-service</name>
<description>login-service</description>
<properties>
<java.version>1.8</java.version>
</properties>
<scm>
<url>https://code-repo.d4science.org/MaDgIK/login-service</url>
<connection>scm:git:gitea@code-repo.d4science.org:MaDgIK/login-service.git</connection>
<developerConnection>scm:git:gitea@code-repo.d4science.org:MaDgIK/login-service.git</developerConnection>
<tag>login-service-1.0.0</tag>
<tag>HEAD</tag>
</scm>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
@ -73,6 +42,18 @@
</exclusion>
</exclusions>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger-version}</version>
</dependency>
<!--swagger official ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger-version}</version>
</dependency>
</dependencies>
<build>
<resources>
@ -87,6 +68,7 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>eu.dnetlib.loginservice.LoginServiceApplication</mainClass>
<executable>true</executable>
</configuration>
<executions>
<execution>

View File

@ -1,5 +1,6 @@
package eu.dnetlib.loginservice;
import eu.dnetlib.loginservice.properties.APIProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@ -12,7 +13,7 @@ import eu.dnetlib.loginservice.properties.Properties;
@PropertySource("classpath:authentication.properties"),
@PropertySource(value = "classpath:dnet-override.properties", ignoreResourceNotFound = true)
})
@EnableConfigurationProperties({Properties.class})
@EnableConfigurationProperties({Properties.class, APIProperties.class})
public class LoginServiceApplication {
public static void main(String[] args) {

View File

@ -1,7 +1,8 @@
package eu.dnetlib.loginservice.controllers;
import eu.dnetlib.loginservice.properties.Properties;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
@ -13,7 +14,7 @@ import java.util.Map;
@RestController
public class HealthController {
private final Logger log = Logger.getLogger(this.getClass());
private final Logger log = LogManager.getLogger(this.getClass());
private final Properties properties;
@Autowired
@ -32,14 +33,18 @@ public class HealthController {
public Map<String, String> checkEverything() {
Map<String, String> response = new HashMap<>();
response.put("authentication.domain", properties.getDomain());
response.put("authentication.keycloak", properties.getKeycloak().toString());
response.put("authentication.redis.host", properties.getRedis().getHost());
response.put("authentication.oidc.issuer", properties.getOidc().getIssuer());
response.put("authentication.oidc.logout", properties.getOidc().getLogout());
response.put("authentication.oidc.home", properties.getOidc().getHome());
response.put("authentication.oidc.scope", properties.getOidc().getScope());
response.put("authentication.oidc.id", properties.getOidc().getId());
response.put("authentication.oidc.secret", properties.getOidc().getSecret());
response.put("authentication.oidc.issuer", properties.getOidc().getIssuer());
response.put("authentication.oidc.home", properties.getOidc().getHome());
response.put("authentication.oidc.logout", properties.getOidc().getLogout());
response.put("authentication.oidc.scope", properties.getOidc().getScope());
response.put("authentication.session", properties.getSession());
response.put("authentication.accessToken", properties.getAccessToken());
response.put("authentication.redirect", properties.getRedirect());
response.put("authentication.authorities-mappe", properties.getAuthoritiesMapper());
return response;
}
}

View File

@ -0,0 +1,38 @@
package eu.dnetlib.loginservice.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("api")
public class APIProperties {
private String title;
private String description;
private String version;
public APIProperties() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}

View File

@ -1,7 +1,8 @@
package eu.dnetlib.loginservice.security;
import eu.dnetlib.loginservice.properties.Properties;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -16,7 +17,7 @@ public class RedisConfig {
private final Properties properties;
private static final Logger logger = Logger.getLogger(RedisConfig.class);
private static final Logger logger = LogManager.getLogger(RedisConfig.class);
@Autowired
public RedisConfig(Properties properties) {

View File

@ -0,0 +1,68 @@
package eu.dnetlib.loginservice.security;
import eu.dnetlib.loginservice.properties.APIProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger configuration class
*/
@Configuration
@Profile({"swagger"})
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter {
private final APIProperties apiProperties;
@Autowired
public SwaggerConfig(APIProperties apiProperties) {
this.apiProperties = apiProperties;
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("eu.dnetlib.loginservice.controllers"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(this.apiProperties.getTitle())
.description(this.apiProperties.getDescription())
.version(this.apiProperties.getVersion())
.build();
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/v2/api-docs", "/v2/api-docs");
registry.addRedirectViewController("/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui");
registry.addRedirectViewController("/swagger-resources/configuration/security", "/swagger-resources/configuration/security");
registry.addRedirectViewController("/swagger-resources", "/swagger-resources");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html**").addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}

View File

@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.security.oidc;
import eu.dnetlib.loginservice.properties.Properties;
import eu.dnetlib.loginservice.utils.Redirect;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.mitre.openid.connect.client.OIDCAuthenticationFilter;
import javax.servlet.http.HttpServletRequest;
@ -11,7 +12,7 @@ import java.io.IOException;
public class OpenAIREAuthenticationFilter extends OIDCAuthenticationFilter {
private final static Logger logger = Logger.getLogger(OpenAIREAuthenticationSuccessHandler.class);
private final static Logger logger = LogManager.getLogger(OpenAIREAuthenticationSuccessHandler.class);
private final Properties properties;
public OpenAIREAuthenticationFilter(Properties properties) {

View File

@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.security.oidc;
import com.google.gson.JsonParser;
import eu.dnetlib.loginservice.properties.Properties;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
@ -23,7 +24,7 @@ import java.util.regex.Pattern;
@Configuration
public class OpenAIREAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
private static final Logger logger = Logger.getLogger(OpenAIREAuthenticationSuccessHandler.class);
private static final Logger logger = LogManager.getLogger(OpenAIREAuthenticationSuccessHandler.class);
private final Properties properties;
@Autowired

View File

@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.utils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
@ -13,7 +14,7 @@ import java.util.regex.Pattern;
public class AuthoritiesMapper {
private static final Logger logger = Logger.getLogger(AuthoritiesMapper.class);
private static final Logger logger = LogManager.getLogger(AuthoritiesMapper.class);
public static Collection<? extends GrantedAuthority> map(JsonArray entitlements) {
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>();

View File

@ -3,7 +3,8 @@ package eu.dnetlib.loginservice.utils;
import eu.dnetlib.loginservice.properties.Properties;
import org.apache.http.client.utils.URIBuilder;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@ -12,7 +13,7 @@ import java.util.Enumeration;
public class Redirect {
private final static Logger logger = Logger.getLogger(Redirect.class);
private final static Logger logger = LogManager.getLogger(Redirect.class);
private static String getDomain(String url) throws URISyntaxException {
URIBuilder uriBuilder = new URIBuilder(url);

View File

@ -1,24 +1,21 @@
authentication.domain=di.uoa.gr
#keycloak
#authentication.keycloak=true
#authentication.oidc.issuer=https://aai-dev.egi.eu/auth/realms/egi
#authentication.oidc.logout=https://aai-dev.egi.eu/auth/realms/egi/protocol/openid-connect/logout
#openid connect
authentication.keycloak=false
authentication.oidc.issuer=https://aai.openaire.eu/oidc/
authentication.oidc.logout=https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=
authentication.oidc.home=http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login
authentication.oidc.scope=openid,profile,email,eduperson_entitlement
authentication.oidc.id=id
authentication.oidc.secret=secret
authentication.oidc.home=http://rudie.di.uoa.gr:8580/openid_connect_login
authentication.oidc.scope=openid,profile,email,eduperson_entitlement,eduperson_scoped_affiliation,eduperson_unique_id,offline_access
authentication.oidc.id=a8ec6e5c-7bee-46aa-9a6f-18baca923582
authentication.oidc.secret=2A91F53A1551AC33
authentication.session=openAIRESession
authentication.accessToken=AccessToken
authentication.redirect=http://mpagasas.di.uoa.gr:4600/reload
authentication.session=EGISession
authentication.accessToken=EGIAccessToken
authentication.redirect=http://scoobydoo.di.uoa.gr:4000/reload
# Currently, this is the only available mapper, set to null or anything else will ignore this.
authentication.authorities-mapper=null
server.port=8580
authentication.authorities-mapper=openAIREMapper
## API Documentation Properties
api.title = Login Service
api.description = Login service provides methods to authenticate users through AAI provider and retrieve information of authenticated user.
api.version = ${project.version}

View File

@ -1,20 +0,0 @@
log4j.rootLogger = DEBUG, R
log4j.logger.eu.dnetlib = DEBUG
log4j.logger.org.springframework = DEBUG, S
log4j.additivity.org.springframework = false
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/var/log/dnet/login-service/login-service.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern= %d %p %t [%c] - %m%n
log4j.appender.S=org.apache.log4j.RollingFileAppender
log4j.appender.S.File=/var/log/dnet/login-service/login-service-spring.log
log4j.appender.S.MaxFileSize=10MB
log4j.appender.S.MaxBackupIndex=10
log4j.appender.S.layout=org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern= %d %p %t [%c] - %m%n

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d %p %t [%c] - %m%n
</Property>
</Properties>
<Appenders>
<!-- Rolling File Appender -->
<RollingFile name="R" fileName="/var/log/dnet/login-service/login-service.log"
filePattern="/var/log/dnet/login-service/login-service-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="S" fileName="/var/log/dnet/login-service/login-service-spring.log"
filePattern="/var/log/dnet/login-service/login-service-spring-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="eu.dnetlib" level="debug" additivity="false">
<AppenderRef ref="R"/>
</Logger>
<Root level="info">
<AppenderRef ref="S"/>
</Root>
</Loggers>
</Configuration>