Merge remote-tracking branch 'origin/release/1.8' into feature/SUPPORT-8579_access_marker
# Conflicts: # backend/src/main/java/ru/micord/ervu/security/esia/controller/EsiaController.java # backend/src/main/java/ru/micord/ervu/security/webbpm/jwt/service/JwtTokenService.java
This commit is contained in:
commit
4a57d604db
149 changed files with 779 additions and 1196 deletions
101
backend/pom.xml
101
backend/pom.xml
|
|
@ -5,16 +5,12 @@
|
|||
<parent>
|
||||
<groupId>ru.micord.ervu.lkrp</groupId>
|
||||
<artifactId>fl</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<version>1.9.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<groupId>ru.micord.ervu.lkrp.fl</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.kafka</groupId>
|
||||
<artifactId>spring-kafka</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
|
|
@ -33,23 +29,10 @@
|
|||
<artifactId>resources</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-fonts</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ocpsoft.prettytime</groupId>
|
||||
<artifactId>prettytime</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jooq</groupId>
|
||||
<artifactId>jooq</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.santuario</groupId>
|
||||
<artifactId>xmlsec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
|
|
@ -102,6 +85,10 @@
|
|||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-config</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.kafka</groupId>
|
||||
<artifactId>spring-kafka</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules</groupId>
|
||||
<artifactId>inject</artifactId>
|
||||
|
|
@ -127,13 +114,8 @@
|
|||
<artifactId>error-handling-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-impl</artifactId>
|
||||
<scope>compile</scope>
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.jndi</groupId>
|
||||
|
|
@ -143,50 +125,13 @@
|
|||
<groupId>ru.cg.webbpm.modules.jndi</groupId>
|
||||
<artifactId>jndi-inject</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules</groupId>
|
||||
<artifactId>standard-annotations</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.core</groupId>
|
||||
<artifactId>metrics</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-runtime-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-runtime-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-runtime-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-xdoc</groupId>
|
||||
<artifactId>reporting-xdoc-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-xdoc</groupId>
|
||||
<artifactId>reporting-xdoc-runtime-impl</artifactId>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-beans</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.liquibase</groupId>
|
||||
|
|
@ -196,30 +141,6 @@
|
|||
<groupId>ru.cg.webbpm.modules</groupId>
|
||||
<artifactId>webkit-base</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.micord.fias</groupId>
|
||||
<artifactId>client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tika</groupId>
|
||||
<artifactId>tika-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.javacrumbs.shedlock</groupId>
|
||||
<artifactId>shedlock-spring</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.javacrumbs.shedlock</groupId>
|
||||
<artifactId>shedlock-provider-jdbc-template</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
|
|
@ -248,6 +169,10 @@
|
|||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<extensions>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,3 @@
|
|||
import java.time.Duration;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import net.javacrumbs.shedlock.core.LockProvider;
|
||||
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
|
||||
import net.javacrumbs.shedlock.spring.ScheduledLockConfiguration;
|
||||
import net.javacrumbs.shedlock.spring.ScheduledLockConfigurationBuilder;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
@ -14,7 +5,6 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
|||
import org.springframework.context.annotation.FilterType;
|
||||
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
|
||||
/**
|
||||
|
|
@ -30,13 +20,12 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
|||
"bpmn",
|
||||
"i18n",
|
||||
"errorhandling",
|
||||
"database",
|
||||
"component.addresses",
|
||||
"gen",
|
||||
"ru.cg",
|
||||
"ru.micord"
|
||||
}, excludeFilters = {
|
||||
@ComponentScan.Filter(type = FilterType.REGEX, pattern = "security.WebSecurityConfig")
|
||||
@ComponentScan.Filter(type = FilterType.REGEX, pattern = "service.sql.SqlExecutorServiceImpl")
|
||||
})
|
||||
@EnableAspectJAutoProxy(proxyTargetClass = true)
|
||||
@EnableWebMvc
|
||||
|
|
@ -47,21 +36,4 @@ public class AppConfig {
|
|||
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){
|
||||
return new PropertySourcesPlaceholderConfigurer();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.setPoolSize(12);
|
||||
scheduler.initialize();
|
||||
return ScheduledLockConfigurationBuilder
|
||||
.withLockProvider(lockProvider)
|
||||
.withTaskScheduler(scheduler)
|
||||
.withDefaultLockAtMostFor(Duration.ofHours(4))
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LockProvider lockProvider(@Qualifier("datasource") DataSource dataSource) {
|
||||
return new JdbcTemplateLockProvider(dataSource);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
5
backend/src/main/java/SecurityInit.java
Normal file
5
backend/src/main/java/SecurityInit.java
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
|
||||
import org.springframework.web.WebApplicationInitializer;
|
||||
|
||||
public class SecurityInit extends AbstractSecurityWebApplicationInitializer implements WebApplicationInitializer {
|
||||
}
|
||||
|
|
@ -1,151 +0,0 @@
|
|||
package ru.micord.ervu.db;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.jooq.ConnectionProvider;
|
||||
import org.jooq.DSLContext;
|
||||
import org.jooq.ExecuteListener;
|
||||
import org.jooq.conf.Settings;
|
||||
import org.jooq.impl.DefaultConfiguration;
|
||||
import org.jooq.impl.DefaultDSLContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import ru.fix.aggregating.profiler.PrefixedProfiler;
|
||||
import ru.fix.aggregating.profiler.Profiler;
|
||||
|
||||
import ru.cg.webbpm.modules.core.metrics.MetricsConfig;
|
||||
import ru.cg.webbpm.modules.core.runtime.api.context.ExecutionContextHelper;
|
||||
import ru.cg.webbpm.modules.database.api.ConfigurationProvider;
|
||||
import ru.cg.webbpm.modules.database.api.metrics.DataSourceWithMetrics;
|
||||
import ru.cg.webbpm.modules.database.api.provider.DslProvider;
|
||||
import ru.cg.webbpm.modules.database.bean.config.Datasource;
|
||||
import ru.cg.webbpm.modules.database.impl.DbConfInitializer;
|
||||
import ru.cg.webbpm.modules.database.impl.data_source.DataSourceConfigReader;
|
||||
import ru.cg.webbpm.modules.database.impl.data_source.DataSourceFactory;
|
||||
import ru.cg.webbpm.modules.database.impl.data_source.HikariDataSourceFactory;
|
||||
import ru.cg.webbpm.modules.database.impl.data_source.JndiDataSourceFactory;
|
||||
import ru.cg.webbpm.modules.database.impl.provider.DefaultConnectionProvider;
|
||||
import ru.cg.webbpm.modules.database.impl.provider.DslProviderImpl;
|
||||
import ru.cg.webbpm.modules.database.impl.service.ProcessSqlService;
|
||||
import ru.cg.webbpm.modules.resources.api.ResourceProvider;
|
||||
|
||||
@Configuration
|
||||
@Import(MetricsConfig.class)
|
||||
public class DbConfiguration {
|
||||
@Value("${webbpm.db.query_timeout:120}")
|
||||
private Integer queryTimeout;
|
||||
@Autowired
|
||||
private ResourceProvider resourceProvider;
|
||||
@Autowired
|
||||
private ProcessSqlService processSqlService;
|
||||
@Autowired
|
||||
private Profiler profiler;
|
||||
@Autowired
|
||||
private ExecutionContextHelper executionContextHelper;
|
||||
|
||||
@Autowired
|
||||
private ExecuteListener[] executeListeners;
|
||||
|
||||
private final Map<String, DSLContext> dslContextMap = new HashMap<>();
|
||||
private final Map<String, ConnectionProvider> connectionProviderMap = new HashMap<>();
|
||||
|
||||
@Bean
|
||||
public Datasource datasourceConfig() {
|
||||
return DataSourceConfigReader.read(resourceProvider);
|
||||
}
|
||||
|
||||
@Bean(destroyMethod = "destroy")
|
||||
public DataSourceFactory dataSourceFactory(HikariDataSourceFactory hikariDataSourceFactory) {
|
||||
return new DataSourceFactory(hikariDataSourceFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public DataSource datasource(DataSourceFactory dataSourceFactory) {
|
||||
DataSource dataSource = dataSourceFactory.createDataSource(datasourceConfig(),
|
||||
JndiDataSourceFactory::createDataSource
|
||||
);
|
||||
return new DataSourceWithMetrics(
|
||||
dataSource,
|
||||
"project",
|
||||
new PrefixedProfiler(profiler, "webbpm.db"),
|
||||
executionContextHelper
|
||||
);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public PlatformTransactionManager txManager(@Qualifier("datasource") DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public TransactionAwareDataSourceProxy transactionAwareDataSource(DataSource dataSource) {
|
||||
return new TransactionAwareDataSourceProxy(dataSource);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public DefaultConnectionProvider connectionProvider(
|
||||
TransactionAwareDataSourceProxy transactionAwareDataSourceProxy) {
|
||||
return new DefaultConnectionProvider(transactionAwareDataSourceProxy, processSqlService,
|
||||
connectionProviderMap
|
||||
);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Settings jooqSettings(DataSourceFactory dataSourceFactory) {
|
||||
Settings settings = new Settings();
|
||||
if (dataSourceFactory.dataSourceType() == DataSourceFactory.DataSourceType.HIKARI) {
|
||||
settings.setQueryTimeout(queryTimeout);
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public org.jooq.Configuration jooqConfiguration(ConnectionProvider connectionProvider,
|
||||
Settings jooqSettings) {
|
||||
DefaultConfiguration configuration = new DefaultConfiguration();
|
||||
configuration.setSQLDialect(datasourceConfig().getSqlDialect());
|
||||
jooqSettings = jooqSettings.withExecuteLogging(false);
|
||||
configuration.setSettings(jooqSettings);
|
||||
configuration.setConnectionProvider(connectionProvider);
|
||||
configuration.set(executeListeners);
|
||||
return configuration;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public DSLContext dsl(org.jooq.Configuration configuration) {
|
||||
return new DefaultDSLContext(configuration);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConfigurationProvider configurationProvider(
|
||||
PlatformTransactionManager platformTransactionManager) {
|
||||
return () -> platformTransactionManager;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DslProvider dslProvider(@Qualifier("dsl") DSLContext dsl) {
|
||||
return new DslProviderImpl(dsl, this.dslContextMap);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DbConfInitializer dbConfInitializer(DataSourceFactory dataSourceFactory,
|
||||
org.jooq.Configuration masterConfiguration, Datasource datasource) {
|
||||
return new DbConfInitializer(dataSourceFactory, masterConfiguration, datasource,
|
||||
processSqlService, connectionProviderMap, dslContextMap);
|
||||
}
|
||||
}
|
||||
|
|
@ -8,7 +8,6 @@ import org.apache.kafka.common.serialization.BytesDeserializer;
|
|||
import org.apache.kafka.common.serialization.StringDeserializer;
|
||||
import org.apache.kafka.common.serialization.StringSerializer;
|
||||
import org.apache.kafka.common.utils.Bytes;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
@ -16,12 +15,15 @@ import org.springframework.kafka.annotation.EnableKafka;
|
|||
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
|
||||
import org.springframework.kafka.core.*;
|
||||
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
|
||||
import org.springframework.kafka.requestreply.CorrelationKey;
|
||||
import org.springframework.kafka.requestreply.ReplyingKafkaTemplate;
|
||||
import org.springframework.kafka.support.serializer.JsonSerializer;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Configuration
|
||||
@EnableKafka
|
||||
|
|
@ -44,8 +46,6 @@ public class ReplyingKafkaConfig {
|
|||
private String replyTopic;
|
||||
@Value("${ervu.kafka.recruit.reply.topic}")
|
||||
private String recruitReplyTopic;
|
||||
@Value("${ervu.kafka.subpoena.extract.reply.topic}")
|
||||
private String subpoenaExtractReplyTopic;
|
||||
@Value("${ervu.kafka.registry.extract.reply.topic}")
|
||||
private String registryExtractReplyTopic;
|
||||
|
||||
|
|
@ -130,35 +130,37 @@ public class ReplyingKafkaConfig {
|
|||
|
||||
@Bean
|
||||
public ConcurrentMessageListenerContainer<String, Bytes> subpoenaReplyContainer(
|
||||
ConcurrentKafkaListenerContainerFactory<String, Bytes> personKafkaListenerContainerFactory) {
|
||||
ConcurrentKafkaListenerContainerFactory<String, Bytes> subpoenaKafkaListenerContainerFactory) {
|
||||
ConcurrentMessageListenerContainer<String, Bytes> container =
|
||||
personKafkaListenerContainerFactory.createContainer(recruitReplyTopic,
|
||||
subpoenaExtractReplyTopic, registryExtractReplyTopic);
|
||||
subpoenaKafkaListenerContainerFactory.createContainer(recruitReplyTopic, registryExtractReplyTopic);
|
||||
container.getContainerProperties().setGroupId(groupId);
|
||||
return container;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Qualifier("person")
|
||||
@Bean("person")
|
||||
public ReplyingKafkaTemplate<String, String, String> replyingKafkaTemplate(
|
||||
ProducerFactory<String, String> producerFactory,
|
||||
ConcurrentMessageListenerContainer<String, String> replyContainer) {
|
||||
ReplyingKafkaTemplate<String, String, String> replyingKafkaTemplate =
|
||||
new ReplyingKafkaTemplate<>(producerFactory, replyContainer);
|
||||
replyingKafkaTemplate.setCorrelationHeaderName("messageId");
|
||||
replyingKafkaTemplate.setDefaultReplyTimeout(Duration.ofSeconds(replyTimeout));
|
||||
customizeTemplate(replyingKafkaTemplate);
|
||||
return replyingKafkaTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Qualifier("subpoena")
|
||||
@Bean("subpoena")
|
||||
public ReplyingKafkaTemplate<String, Object, Bytes> subpoenaReplyingKafkaTemplate(
|
||||
ProducerFactory<String, Object> personProducerFactory,
|
||||
ConcurrentMessageListenerContainer<String, Bytes> personReplyContainer) {
|
||||
ProducerFactory<String, Object> subpoenaProducerFactory,
|
||||
ConcurrentMessageListenerContainer<String, Bytes> subpoenaReplyContainer) {
|
||||
ReplyingKafkaTemplate<String, Object, Bytes> replyingKafkaTemplate =
|
||||
new ReplyingKafkaTemplate<>(personProducerFactory, personReplyContainer);
|
||||
replyingKafkaTemplate.setCorrelationHeaderName("messageId");
|
||||
replyingKafkaTemplate.setDefaultReplyTimeout(Duration.ofSeconds(replyTimeout));
|
||||
new ReplyingKafkaTemplate<>(subpoenaProducerFactory, subpoenaReplyContainer);
|
||||
customizeTemplate(replyingKafkaTemplate);
|
||||
return replyingKafkaTemplate;
|
||||
}
|
||||
|
||||
private void customizeTemplate(ReplyingKafkaTemplate<?, ?, ?> replyingKafkaTemplate) {
|
||||
replyingKafkaTemplate.setCorrelationHeaderName("messageId");
|
||||
replyingKafkaTemplate.setCorrelationIdStrategy(record ->
|
||||
new CorrelationKey(UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8)));
|
||||
replyingKafkaTemplate.setDefaultReplyTimeout(Duration.ofSeconds(replyTimeout));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ public abstract class BaseReplyingKafkaService<T, V> implements ReplyingKafkaSer
|
|||
throw new RuntimeException("Failed to get kafka response", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract ReplyingKafkaTemplate<String, T, V> getTemplate();
|
||||
|
||||
protected abstract ProducerRecord<String, T> getProducerRecord(String requestTopic,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package ru.micord.ervu.kafka.service.impl;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
import org.apache.kafka.common.header.internals.RecordHeader;
|
||||
|
|
@ -40,8 +39,7 @@ public class SubpoenaReplyingKafkaService extends BaseReplyingKafkaService<Objec
|
|||
@Override
|
||||
protected ProducerRecord<String, Object> getProducerRecord(String requestTopic, String replyTopic,
|
||||
Object requestMessage) {
|
||||
ProducerRecord<String, Object> record = new ProducerRecord<>(requestTopic,
|
||||
UUID.randomUUID().toString(), requestMessage);
|
||||
ProducerRecord<String, Object> record = new ProducerRecord<>(requestTopic, requestMessage);
|
||||
record.headers().add(new RecordHeader(KafkaHeaders.REPLY_TOPIC, replyTopic.getBytes()));
|
||||
String headerClass = requestMessage instanceof SubpoenaRequestDto
|
||||
? recruitHeaderClass : extractHeaderClass;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|||
}
|
||||
|
||||
protected void httpConfigure(HttpSecurity httpSecurity) throws Exception {
|
||||
String[] permitAll = {"/esia/url", "/esia/auth", "esia/refresh"};
|
||||
String[] permitAll = {"/version", "/esia/url", "/esia/auth", "esia/refresh"};
|
||||
|
||||
httpSecurity.authorizeRequests()
|
||||
.antMatchers(permitAll).permitAll()
|
||||
|
|
|
|||
|
|
@ -52,14 +52,14 @@ public class EsiaController {
|
|||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
|
||||
PersonModel personModel = personalDataService.getPersonModel(accessToken);
|
||||
PersonDataModel personDataModel = new PersonDataModel();
|
||||
personDataModel.birthDate = df.format(personModel.getBirthDate());
|
||||
personDataModel.birthDate = personModel.getBirthDate();
|
||||
personDataModel.fullname = personModel.getLastName() + " " + personModel.getFirstName() + " "
|
||||
+ personModel.getMiddleName();
|
||||
personDataModel.snils = personModel.getSnils();
|
||||
personDataModel.seriesAndNumber =
|
||||
personModel.getPassportModel().getSeries() + " " + personModel.getPassportModel()
|
||||
.getNumber();
|
||||
personDataModel.issueDate = df.format(personModel.getPassportModel().getIssueDate());
|
||||
personDataModel.issueDate = personModel.getPassportModel().getIssueDate();
|
||||
personDataModel.issuedBy = personModel.getPassportModel().getIssuedBy();
|
||||
personDataModel.issueId = personModel.getPassportModel().getIssueId();
|
||||
return personDataModel;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package ru.micord.ervu.security.esia.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
|
|
@ -18,8 +16,7 @@ public class PassportModel implements Serializable {
|
|||
|
||||
private String number;
|
||||
|
||||
@JsonFormat(pattern = "dd.MM.yyyy")
|
||||
private Date issueDate;
|
||||
private String issueDate;
|
||||
|
||||
private String issueId;
|
||||
|
||||
|
|
@ -41,11 +38,11 @@ public class PassportModel implements Serializable {
|
|||
this.number = number;
|
||||
}
|
||||
|
||||
public Date getIssueDate() {
|
||||
public String getIssueDate() {
|
||||
return issueDate;
|
||||
}
|
||||
|
||||
public void setIssueDate(Date issueDate) {
|
||||
public void setIssueDate(String issueDate) {
|
||||
this.issueDate = issueDate;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package ru.micord.ervu.security.esia.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
|
|
@ -24,8 +22,7 @@ public class PersonModel implements Serializable {
|
|||
|
||||
private String middleName;
|
||||
|
||||
@JsonFormat(pattern = "dd.MM.yyyy")
|
||||
private Date birthDate;
|
||||
private String birthDate;
|
||||
|
||||
private String snils;
|
||||
|
||||
|
|
@ -71,11 +68,11 @@ public class PersonModel implements Serializable {
|
|||
this.middleName = middleName;
|
||||
}
|
||||
|
||||
public Date getBirthDate() {
|
||||
public String getBirthDate() {
|
||||
return birthDate;
|
||||
}
|
||||
|
||||
public void setBirthDate(Date birthDate) {
|
||||
public void setBirthDate(String birthDate) {
|
||||
this.birthDate = birthDate;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -413,7 +413,7 @@ public class EsiaAuthService {
|
|||
|
||||
private Person copyToPerson(PersonModel personModel) {
|
||||
Person person = new Person();
|
||||
person.setBirthDate(personModel.getBirthDate().toString());
|
||||
person.setBirthDate(personModel.getBirthDate());
|
||||
person.setFirstName(personModel.getFirstName());
|
||||
person.setLastName(personModel.getLastName());
|
||||
person.setSnils(personModel.getSnils());
|
||||
|
|
@ -421,7 +421,8 @@ public class EsiaAuthService {
|
|||
Document document = new Document();
|
||||
document.setNumber(personModel.getPassportModel().getNumber());
|
||||
document.setSeries(personModel.getPassportModel().getSeries());
|
||||
document.setIssueDate(personModel.getPassportModel().getIssueDate().toString());
|
||||
document.setIssueDate(personModel.getPassportModel().getIssueDate());
|
||||
person.setDocument(document);
|
||||
return person;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ru.micord.ervu.security.webbpm.jwt.service;
|
||||
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.util.Arrays;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
|
|
@ -15,8 +16,6 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.micord.ervu.security.esia.token.TokensStore;
|
||||
import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication;
|
||||
|
|
@ -37,6 +36,8 @@ public class JwtTokenService {
|
|||
ResourceMetadataUtils.PROJECT_GROUP_ID + "." + ResourceMetadataUtils.PROJECT_ARTIFACT_ID;
|
||||
private final SecretKey SIGNING_KEY;
|
||||
|
||||
@Autowired
|
||||
private HttpServletRequest request;
|
||||
|
||||
@Autowired
|
||||
public JwtTokenService(@Value("${webbpm.security.token.secret.key:ZjE5ZjMxNmYtODViZC00ZTQ5LWIxZmYtOGEzYzE3Yjc1MDVk}")
|
||||
|
|
@ -81,11 +82,14 @@ public class JwtTokenService {
|
|||
}
|
||||
|
||||
public String getErvuId() {
|
||||
Optional<Authentication> authentication = Optional.ofNullable(
|
||||
SecurityContextHolder.getContext().getAuthentication());
|
||||
String jwtToken = authentication.map(auth -> ((JwtAuthentication) auth).getToken())
|
||||
String authToken = Optional.ofNullable(request.getCookies())
|
||||
.map(cookies -> Arrays.stream(cookies)
|
||||
.filter(cookie -> cookie.getName().equals("auth_token"))
|
||||
.findFirst()
|
||||
.map(Cookie::getValue)
|
||||
.orElseThrow(() -> new RuntimeException("Failed to get auth data. User unauthorized.")))
|
||||
.orElseThrow(() -> new RuntimeException("Failed to get auth data. User unauthorized."));
|
||||
return getToken(jwtToken).getUserAccountId().split(":")[1];
|
||||
return getToken(authToken).getUserAccountId().split(":")[1];
|
||||
}
|
||||
|
||||
public String getAccessToken(HttpServletRequest request) {
|
||||
|
|
|
|||
|
|
@ -25,10 +25,6 @@ public class ExtractRpcService extends Behavior {
|
|||
private final JwtTokenService jwtTokenService;
|
||||
private final ReplyingKafkaService<Object, Bytes> replyingKafkaService;
|
||||
|
||||
@Value("${ervu.kafka.subpoena.extract.request.topic}")
|
||||
private String subpoenaExtractRequestTopic;
|
||||
@Value("${ervu.kafka.subpoena.extract.reply.topic}")
|
||||
private String subpoenaExtractReplyTopic;
|
||||
@Value("${ervu.kafka.registry.extract.request.topic}")
|
||||
private String registryExtractRequestTopic;
|
||||
@Value("${ervu.kafka.registry.extract.reply.topic}")
|
||||
|
|
@ -48,13 +44,8 @@ public class ExtractRpcService extends Behavior {
|
|||
public FileData getExtract() {
|
||||
ExtractRequestDto request = new ExtractRequestDto(jwtTokenService.getErvuId(),
|
||||
formatExtractRegistry);
|
||||
String requestTopic = request.formatExtractRegistry().equals("1")
|
||||
? subpoenaExtractRequestTopic
|
||||
: registryExtractRequestTopic;
|
||||
String replyTopic = request.formatExtractRegistry().equals("1")
|
||||
? subpoenaExtractReplyTopic
|
||||
: registryExtractReplyTopic;
|
||||
byte[] reply = replyingKafkaService.sendMessageAndGetReply(requestTopic, replyTopic, request).get();
|
||||
byte[] reply = replyingKafkaService.sendMessageAndGetReply(registryExtractRequestTopic,
|
||||
registryExtractReplyTopic, request).get();
|
||||
|
||||
try {
|
||||
ResponseData responseData = ResponseData.parseFrom(reply);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import org.springframework.util.StringUtils;
|
|||
*/
|
||||
public final class DateUtil {
|
||||
|
||||
private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
|
||||
public static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
|
||||
|
||||
private DateUtil() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
<jboss-deployment-structure>
|
||||
<deployment>
|
||||
<dependencies>
|
||||
<module name="ru.CryptoPro.JCSP"/>
|
||||
<module name="ru.CryptoPro.JCP.ASN"/>
|
||||
<module name="ru.CryptoPro.JCP"/>
|
||||
<module name="com.objsys.asn1j.runtime"/>
|
||||
</dependencies>
|
||||
</deployment>
|
||||
</jboss-deployment-structure>
|
||||
Loading…
Add table
Add a link
Reference in a new issue