Skip to content

Instantly share code, notes, and snippets.

@rayden-alex
rayden-alex / ResourceServerConfig.java
Created February 7, 2024 02:39 — forked from rponte/ResourceServerConfig.java
Spring Security: example of OAuth2 Resource Server configuration (Spring Boot v2.6.7)
package br.com.zup.edu.minhasfigurinhas;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS;
@rayden-alex
rayden-alex / AccountRepository.java
Created February 7, 2024 02:36 — forked from rponte/AccountRepository.java
JPA and Hibernate: Simple and Smart way of using PostgreSQL Advisory Locks with JPQL to prevent Lost Update anomaly
package br.com.stackspot.nullbank.withdrawal;
import org.hibernate.LockOptions;
import org.springframework.data.jpa.repository.*;
import org.springframework.stereotype.Repository;
import javax.persistence.LockModeType;
import javax.persistence.QueryHint;
import javax.transaction.Transactional;
import java.util.Optional;
@rayden-alex
rayden-alex / MockEnvironmentRule.java
Created February 7, 2024 02:25 — forked from rponte/MockEnvironmentRule.java
Mocking Spring Boot Environment during integration tests
package br.com.rponte.base.spring.config.env;
import org.junit.rules.ExternalResource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.mock.env.MockPropertySource;
import org.springframework.stereotype.Component;
/**
* https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/ConfigurableEnvironment.html
@rayden-alex
rayden-alex / AbstractJdbcRepository.java
Created July 7, 2020 18:56 — forked from criminy/AbstractJdbcRepository.java
Implementation of PagingAndSortingRepository using JdbcTemplate
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
@rayden-alex
rayden-alex / FakeByteArrayInputStream.java
Created April 9, 2020 12:33
Fake stream that always return the same bytes values when read from it.
package com.util;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
/**
* Fake stream that always return the same bytes values when read from it.
* <br/>
* It need for test purposes only to create streams with predefined size and no matter which content.
*/
@rayden-alex
rayden-alex / FakeByteArrayResource.java
Created April 9, 2020 12:30
Fake resource that always return the same bytes values when read from it.
package com.util;
import org.springframework.core.io.AbstractResource;
import java.io.InputStream;
import java.util.Objects;
/**
* Fake resource that always return the same bytes values when read from it.
* <br/>
@rayden-alex
rayden-alex / gist:b03d79d28078e36dea8bcac12dfea27c
Created April 6, 2020 14:09
Format file size as readable string (kB, MB, GB)
// http://stackoverflow.com/a/5599842/225217
private static String asReadableFileSize(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { "B", "kB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
@rayden-alex
rayden-alex / tokens.md
Created October 15, 2019 09:51 — forked from zmts/tokens.md
Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию. Token-Based Authentication

Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию. Token-Based Authentication

Основы:

Аутентификация(authentication, от греч. αὐθεντικός [authentikos] – реальный, подлинный; от αὐθέντης [authentes] – автор) - это процесс проверки учётных данных пользователя (логин/пароль). Проверка подлинности пользователя путём сравнения введённого им логина/пароля с данными сохранёнными в базе данных.

Авторизация(authorization — разрешение, уполномочивание) - это проверка прав пользователя на доступ к определенным ресурсам.

Например после аутентификации юзер sasha получает право обращатся и получать от ресурса "super.com/vip" некие данные. Во время обращения юзера sasha к ресурсу vip система авторизации проверит имеет ли право юзер обращатся к этому ресурсу (проще говоря переходить по неким разрешенным ссылкам)

// @no-log
GET {{host}}/statuses
Accept: application/json; charset=UTF-8
Cache-Control: no-cache
> {%
client.test("Request executed successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});
// @no-log
GET {{host}}/version
Accept: application/json; charset=UTF-8
Cache-Control: no-cache
> {%
client.test("Request executed successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});