Compare commits
3 Commits
a52d9822c8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 325e1493b2 | |||
| f2d764c7c2 | |||
| d7aebd21dc |
20
org-ccalm-jwt.md
Normal file
20
org-ccalm-jwt.md
Normal file
@ -0,0 +1,20 @@
|
||||
Записываем значения в Vault:
|
||||
|
||||
Записываем в kv хранилище:
|
||||
```sh
|
||||
vault kv put org-ccalm/jwt server.ssl.key-store-password=M4yh4
|
||||
```
|
||||
|
||||
Читаем так:
|
||||
```sh
|
||||
vault kv get org-ccalm/jwt
|
||||
```
|
||||
|
||||
Должно вывести:
|
||||
```text
|
||||
Key Value
|
||||
--- -----
|
||||
server.ssl.key-store-password M4yh4
|
||||
```
|
||||
|
||||
|
||||
103
org-ccalm-jwt.yml
Normal file
103
org-ccalm-jwt.yml
Normal file
@ -0,0 +1,103 @@
|
||||
server:
|
||||
port: 8082
|
||||
ssl:
|
||||
enabled: true
|
||||
key-store: classpath:keystore.p12
|
||||
key-store-password: MFNX344yh4
|
||||
key-store-type: PKCS12
|
||||
key-alias: tomcat
|
||||
issuer:
|
||||
name: ccalm
|
||||
|
||||
spring:
|
||||
# config:
|
||||
# import:
|
||||
# - vault://org-ccalm/jwt
|
||||
# - vault://org-ccalm/public
|
||||
cloud:
|
||||
vault:
|
||||
enabled: false
|
||||
# uri: http://localhost:8200
|
||||
# authentication: APPROLE
|
||||
# app-role:
|
||||
# role-id: c0064fe2-8f0e-b317-7fe7-66f7405b45a1
|
||||
# secret-id: 24f31c88-7185-0d93-9a51-e221c2925265
|
||||
# kv:
|
||||
# kv-version: 2
|
||||
application:
|
||||
name: org-ccalm-jwt
|
||||
datasource:
|
||||
url: jdbc:postgresql://10.0.0.1:5432/CCALM?ApplicationName=org_ccalm_main&connectTimeout=10000&socketTimeout=30000
|
||||
#url: jdbc:postgresql://ccalm.org:5432/CCALM?ApplicationName=org_ccalm_jwt&ssl=true&sslmode=require&connectTimeout=10000&socketTimeout=10000&compression=gzip
|
||||
#url: jdbc:postgresql://127.0.0.1:5432/CCALM?ApplicationName=org_ccalm_jwt&ssl=true&sslmode=require&connectTimeout=10000&socketTimeout=10000&compression=gzip
|
||||
username: app_authorization_1
|
||||
password: 4699KEE464YKR0AW0EE464YK0AEE464YK
|
||||
driver-class-name: org.postgresql.Driver
|
||||
hikari:
|
||||
maximum-pool-size: 10
|
||||
minimum-idle: 5
|
||||
max-lifetime: 1740000
|
||||
idle-timeout: 300000
|
||||
connection-timeout: 20000
|
||||
connection-test-query: SELECT 1
|
||||
validation-timeout: 5000
|
||||
leak-detection-threshold: 30000
|
||||
keepalive-time: 60000
|
||||
jpa:
|
||||
properties:
|
||||
hibernate:
|
||||
dialect: org.hibernate.dialect.PostgreSQLDialect
|
||||
redis:
|
||||
host: 127.0.0.1
|
||||
port: 6379
|
||||
password: 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
|
||||
|
||||
mail:
|
||||
host: smtp.yandex.ru
|
||||
port: 465
|
||||
login: info@ccalm.org
|
||||
password: fu2lpsoGPGiq1xlRm8ag
|
||||
|
||||
captcha:
|
||||
key: PPExpv36jk4Vzda3NpYnXLfuHCLYXqaNrxlOH/Jr/1M=
|
||||
time: 600
|
||||
|
||||
url:
|
||||
reset: https://ccalm.org/api/authorization/v02/reset
|
||||
main: https://ccalm.org/
|
||||
|
||||
personal_data:
|
||||
key: 7dd2Nek1
|
||||
|
||||
private:
|
||||
key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNgtaCfu5QlhWfU8bJAooLoX+bo/ARsvoWUJf5NodkGOivze5Lqtu5eq6ptT+gVKK+IEsjpmDsFPMCE2CW7xLZfgbtrWmTPd+fiRb2Z/fMudedo166H5WEgS3+TDWKt7WkLA/3kqvIqdBotuL4BENwZj6CIjGNdG01RNsCaDA/vxTkzx9njz6kfgAda/+wbdOJNwjNRgIb9AyedQT5OKvqRXequzrrOKD9wrm1O4nv8lA6WFg5YEMSW7T6WRIeArZsQr1aHv6qkiu47YreApfdFIWHxd9QinA9WrLPYdWXONr7+xyvqS4MHSJh9ZmCvMsc/HcF3RHJgEwgiC8E6hiZAgMBAAECggEAByZOICwaTmNqTSi0+blE5DKyJdAGQhdf6/bR0rG69BiJv9QCPk+rZUCHYxATLpjDMKoe8xaOuKfh7GiQK7AVj8t6ojouOhkk9n/mdJwZWt38Slesq/z9TqbP2tD769+ISjXeOFa58zk1Lu9t5gL/9aEY+54E607pnbjPhb3qL819/7absLbY1y3GKw2Cwd7RfP8nOWj0ViwnalFjfg6YZS1BL5c9NSg41FzZolwPruZ/bBGbc3nMW2khpuK7CtRk1pRJHUNYuVCsaBU4M4sf3tlZQPOdB6eYmQ3xmPtdnHYB13s588KialXKFlAuO4zG0CFa8DfIKsWDv6xTC1cMgQKBgQD6CjJuu715oKob7ohDTfrSppk4PY/kxWhUkKyKVW1Y1jXQOcd4BwVSyH6s7N8pCSWMwWmoF/t/l2kIcAWNZnsbzAQ8TYOhp1THstXMVb6c7JOL3SQC5RjbgW1RWCalh7/4QVE0xYeEL3qv5I2t9215zKR87Z6LIdJkxxAsHgMSbQKBgQDSaOp0kJZPkQH/75ltaI9exczyoaf+5U/OrnqT2lpRwa+5wqUTPWpTFTCDcJdu8OKCgrKPOQ6NACuX4PbIW/jR+70w7nbC46Tx3JdDYxBlm+6MuHUs5RXufFDJyGoN8lJzoPGax3uxY1kxWwSaSIB0sVXV/P3PIE31I5DbarWjXQKBgQCrRyLm4anYUCtWuN4UpK0lcUPR17Hi9ysRioz2sbAWw53XRk0SNlT6MSc9E4GGnaJgOflDUTJRY4lqYzoac1HvZ6CbIkoCCRq1NRbpQu8wlYo4q8JITWDqtE0LBMRsbYId77hN2uWKse9r37cBrVULsxgWD7uj+QYjTI0Se3iFPQJ/SSYwXFXn68F98Hxb2q1/KnOZzMBmpzcRh8kg1EYVIFc1wF7rBMVVMY0sUIXUH72fAcBuU1yCsoJcpXCQWxeeaWIbY+eDYj3CGlOWQtct3CVZyZJXKkR6W27cp0oFlNOp1okddbHkTsc7Ou1prDmIbwk3zi0mD9wrPg4fTijK/QKBgQDrYEWT77dQLPcN3RTVn3Ua2d9aj/IWwC330I4qZq2SFKOaB/olnPA6fLNYToTWO70A2ZlsMtVepdThIeYFidkA7Lj7lTVYFdQQzREsO5908A1YWE4sgMEEdMc7n5xKT85vpkPOjBOLZYQ6JjDeWBMDxnXR9/txwbau4bsq3/QFuQ==
|
||||
public:
|
||||
key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzYLWgn7uUJYVn1PGyQKKC6F/m6PwEbL6FlCX+TaHZBjor83uS6rbuXquqbU/oFSiviBLI6Zg7BTzAhNglu8S2X4G7a1pkz3fn4kW9mf3zLnXnaNeuh+VhIEt/kw1ire1pCwP95KryKnQaLbi+ARDcGY+giIxjXRtNUTbAmgwP78U5M8fZ48+pH4AHWv/sG3TiTcIzUYCG/QMnnUE+Tir6kV3qrs66zig/cK5tTuJ7/JQOlhYOWBDElu0+lkSHgK2bEK9Wh7+qpIruO2K3gKX3RSFh8XfUIpwPVqyz2HVlzja+/scr6kuDB0iYfWZgrzLHPx3Bd0RyYBMIIgvBOoYmQIDAQAB
|
||||
access:
|
||||
time: 600
|
||||
refresh:
|
||||
time: 43200
|
||||
|
||||
#logging.level.org.springframework.cloud.vault: DEBUG
|
||||
|
||||
#logging:
|
||||
# level:
|
||||
# org:
|
||||
# springframework:
|
||||
# cloud:
|
||||
# vault: DEBUG
|
||||
# org.springframework: WARN
|
||||
# org.ccalm.jwt: ERROR
|
||||
# com:
|
||||
# zaxxer:
|
||||
# hikari: WARN
|
||||
|
||||
|
||||
# Swagger
|
||||
springdoc:
|
||||
api-docs:
|
||||
enabled: true
|
||||
path: /api-docs
|
||||
swagger-ui:
|
||||
enabled: true
|
||||
path: /api-docs-ui
|
||||
10
pom.xml
10
pom.xml
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.4.2</version>
|
||||
<version>3.5.5</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>org.ccalm</groupId>
|
||||
@ -66,7 +66,7 @@
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-vault-config</artifactId>
|
||||
<version>4.2.0</version>
|
||||
<version>4.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
@ -168,6 +168,12 @@
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.logstash.logback</groupId>
|
||||
<artifactId>logstash-logback-encoder</artifactId>
|
||||
<version>8.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -352,10 +352,20 @@ public class MainController implements ServletContextAware {
|
||||
@RequestMapping(value = "/",method = RequestMethod.GET,produces = "application/json;charset=utf-8")
|
||||
@ResponseBody
|
||||
public ResponseEntity<Object> index(
|
||||
@CookieValue(value = "lng", defaultValue = "1") String language_id
|
||||
@CookieValue(value = "lng", defaultValue = "1") String language_id,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
Translation trt = new Translation(language_id,jdbcTemplate);
|
||||
try {
|
||||
// Извлекаем заголовок Authorization
|
||||
/*String authorizationHeader = request.getHeader("Authorization");
|
||||
if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
|
||||
String token = authorizationHeader.substring(7); // Убираем "Bearer " из строки
|
||||
System.out.println("Authorization Bearer Token: " + token);
|
||||
} else {
|
||||
System.out.println("Authorization Bearer Token: Not found or invalid");
|
||||
}*/
|
||||
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("error_code",0);
|
||||
json.put("error_message","");
|
||||
@ -403,6 +413,7 @@ public class MainController implements ServletContextAware {
|
||||
@ResponseBody
|
||||
public ResponseEntity<Object> get_settings(
|
||||
Authentication authentication,
|
||||
@Nullable @RequestBody SettingNameModel setting_name,
|
||||
@RequestParam(required=false,name="lng",defaultValue = "1") String language_id
|
||||
) {
|
||||
Translation trt = new Translation(language_id,jdbcTemplate);
|
||||
@ -415,22 +426,38 @@ public class MainController implements ServletContextAware {
|
||||
String sql = """
|
||||
select
|
||||
us.name,
|
||||
us.value
|
||||
COALESCE(us.value,'') as value
|
||||
from
|
||||
main.Users_Settings us
|
||||
where
|
||||
us.del=false
|
||||
and user_id=:user_id
|
||||
and (:setting_name::text is null or name ilike '%'|| :setting_name::text ||'%')
|
||||
""";
|
||||
MapSqlParameterSource parameters = new MapSqlParameterSource();
|
||||
parameters.addValue("user_id", userDetails.getUserId());
|
||||
List<String> ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper());
|
||||
List<String> data = new ArrayList<>();
|
||||
for (String s : ret) {
|
||||
data.add((new JSONObject(s)).getString("name"));
|
||||
if (setting_name == null) {
|
||||
parameters.addValue("setting_name", null);
|
||||
} else {
|
||||
parameters.addValue("setting_name", setting_name.getSetting_name());
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(data, HttpStatus.OK);
|
||||
List<String> ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper());
|
||||
List<Map<String,String>> data = new ArrayList<>();
|
||||
for (String s : ret) {
|
||||
JSONObject row = new JSONObject(s);
|
||||
Map<String, String> item = new HashMap<>();
|
||||
item.put("name", row.getString("name"));
|
||||
item.put("value", row.getString("value"));
|
||||
data.add(item);
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("error_code", 0);
|
||||
result.put("data", data);
|
||||
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
|
||||
} catch (CustomException e) {
|
||||
if(e.isSaveToLog()) {
|
||||
logger.error(MarkerFactory.getMarker(e.getErrorMarker()), e.getMessage());
|
||||
|
||||
@ -51,9 +51,11 @@ public class SecurityConfig {
|
||||
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
|
||||
String path = request.getRequestURI();
|
||||
if(!path.equals("/")) System.out.println(path); // https://127.0.0.1:8082/logout
|
||||
|
||||
//Define paths that do not require authorization
|
||||
return path.equals("/") ||
|
||||
path.equals("/login") ||
|
||||
path.equals("/logout") ||
|
||||
//path.equals("/logout") ||
|
||||
path.equals("/create") ||
|
||||
path.equals("/captcha") ||
|
||||
path.equals("/restore") ||
|
||||
@ -61,8 +63,7 @@ public class SecurityConfig {
|
||||
path.equals("/get_session") ||
|
||||
path.equals("/get_request_token") ||
|
||||
path.equals("/verification") ||
|
||||
path.equals("/update") ||
|
||||
path.equals("/access");
|
||||
path.equals("/update");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
16
src/main/java/org/ccalm/jwt/models/SettingNameModel.java
Normal file
16
src/main/java/org/ccalm/jwt/models/SettingNameModel.java
Normal file
@ -0,0 +1,16 @@
|
||||
package org.ccalm.jwt.models;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
|
||||
@Schema(description = "Model for getting actions by name")
|
||||
public class SettingNameModel {
|
||||
|
||||
@Schema(description = "Action name", example = "arm_")
|
||||
@JsonProperty("action_name")
|
||||
private String setting_name;
|
||||
}
|
||||
@ -1,24 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
||||
<conversionRule conversionWord="exOneLine" converterClass="org.ccalm.jwt.SingleLineThrowableProxyConverter"/>
|
||||
<!-- Ваш кастомный conversionRule для single-line исключений -->
|
||||
<conversionRule conversionWord="exOneLine" converterClass="org.ccalm.dbms.SingleLineThrowableProxyConverter"/>
|
||||
|
||||
<property name="LOGS" value="logs" />
|
||||
<springProperty scope="context" name="appName" source="spring.application.name"/>
|
||||
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOGS}/${appName}.log</file>
|
||||
<encoder>
|
||||
<pattern>
|
||||
{"timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}","thread":"[%thread]","level":"%level","logger":"%logger{36}","marker":"%marker","message":"%msg","exception":"%exOneLine"}%n
|
||||
</pattern>
|
||||
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
|
||||
<!-- Кастомные имена полей -->
|
||||
<fieldNames>
|
||||
<timestamp>timestamp</timestamp> <!-- Без @ -->
|
||||
<level>level</level>
|
||||
<message>message</message>
|
||||
<stack_trace>exception</stack_trace>
|
||||
<version>[ignore]</version>
|
||||
<threadName>[ignore]</threadName>
|
||||
<loggerName>[ignore]</loggerName>
|
||||
<levelValue>[ignore]</levelValue>
|
||||
<mdc>[ignore]</mdc>
|
||||
</fieldNames>
|
||||
|
||||
<!-- Формат timestamp -->
|
||||
<timestampPattern>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</timestampPattern>
|
||||
<timestampTimeZone>UTC</timestampTimeZone>
|
||||
|
||||
<!-- Включаем маркеры (tags для MarkerFactory) -->
|
||||
<includeTags>true</includeTags>
|
||||
|
||||
<!-- Отключаем лишние данные -->
|
||||
<includeCallerData>false</includeCallerData>
|
||||
<includeContext>false</includeContext>
|
||||
|
||||
<!-- Single-line исключения -->
|
||||
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
|
||||
<maxDepthPerThrowable>1</maxDepthPerThrowable>
|
||||
<maxLength>1024</maxLength>
|
||||
<shortenedClassNameLength>20</shortenedClassNameLength>
|
||||
<exclude>$$FastClassByCGLIB$$</exclude>
|
||||
<exclude>$$EnhancerBySpringCGLIB$$</exclude>
|
||||
</throwableConverter>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOGS}/${appName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
<maxHistory>30</maxHistory>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<totalSizeCap>3GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
@ -30,10 +59,9 @@
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!--root level="warn"-->
|
||||
<root level="info">
|
||||
<appender-ref ref="FILE" />
|
||||
<appender-ref ref="CONSOLE" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user