diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..92ab0a2 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..fd0296b --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d31b37a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f46d99 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +Было решено написать эту библиотеку по причине того, что документация Spring Security не удовлетворяла нашим требованиям. +Библиотека протестирована на Java 11. + +Для реализации аутентификации OAuth2 VK ID в Вашем приложении сперва необходимо зарегистрировать его в личном кабинете разработчика VK: + +1. Перейти по ссылке https://id.vk.com/about/business/go +2. Нажать "*Добавить приложение*" +3. Ввести название Вашего приложения и среди типов платформ включить как минимум "*Web*". +4. (Опционально) Загрузить изображение приложения, которое будет отображаться в личном кабинете пользователя +5. Нажать "*Далее*" +6. Заполнить поля "*Базовый домен*" и "*Доверенный Redirect URL*". Подсказки о них есть рядом с полями ввода +7. Подтвердить действие SMS-кодом, если требуется (или другие способы подтверждения личности в зависимости от Ваших настроек VK) +8. На шаге "*Способы быстрого входа в web-приложении*" можно выбрать все три способа. +9. (Опционально) На шаге "*Интеграция элементов*" можно настроить внешний вид по своему вкусу. Вставку кода можно пропустить. + + +Вы окажетесь на странице https://id.vk.com/about/business/go/accounts/{some_id}}/apps/{your_app_id}/edit +Отсюда Вам понадобятся ID приложения и Redirect URL. + +Дальше можно переходить к работе непосредственно с библиотекой: + +Сначала Вам необходимо в Вашем приложении создать бин класса VkSettings, передав ему две настройки: + +- clientId +- redirectUri + +Где эти две настройки - это сохраненные Вами ранее ID приложения и Redirect URL соответственно. + +_ПРИМЕЧАНИЕ: Далее вся конфигурация будет строиться на создании бинов Spring. +В теории можно попробовать обойтись и без создания бинов этих классов и просто вручную создавать их экземпляры в коде, +но такой вариант не проверялся на работоспособность._ + +Пример: +``` + + + + +``` + +Далее необходимо зарегистрировать в Вашем приложении два фильтра: + +- VkBeginAuthFilter +- VkEndAuthFilter + +Оба фильтра нужно зарегистрировать в качестве бинов Spring, передавая им в параметры один и тот же экземпляр класса VkSettings. + +*springSecurity.xml:* +``` + + + + + + +``` + +Второй фильтр должен срабатывать после первого. Этого можно достичь следующим образом + +*springSecurity.xml:* +``` + + + +``` + +И так же нужно зарегистрировать первый фильтр для прослушивания запросов + +*web.xml:* +``` + + vkBeginAuthFilter + org.springframework.web.filter.DelegatingFilterProxy + + + vkBeginAuthFilter + /oauth2/authorization/vk + +``` +где "*/oauth2/authorization/vk*" - адрес, по которому нужно будет переходить для начала процесса аутентификации. + +В результате успешной аутентификации возвращается объект VkUser с полями, заполненными информацией пользователя VK. + +????? + +PROFIT!! + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6230fec --- /dev/null +++ b/pom.xml @@ -0,0 +1,123 @@ + + + + 4.0.0 + + ru.simplex2 + vkid_spring_security + 1.0-SNAPSHOT + + vkid_spring_security + A simple vkid_spring_security. + + https://simplex-software.ru/ + + + UTF-8 + + + 11 + + + + + + ch.qos.logback + logback-classic + 1.4.5 + + + ch.qos.logback + logback-core + 1.4.5 + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + + org.springframework.security + spring-security-core + 5.6.1 + + + org.springframework.security + spring-security-config + 5.6.1 + + + org.springframework.security + spring-security-oauth2-client + 5.6.1 + + + org.springframework.security + spring-security-oauth2-jose + 5.6.1 + + + + junit + junit + 3.8.1 + + + + + src/main/java + + + + maven-clean-plugin + 3.1.0 + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + + + + + + maven-project-info-reports-plugin + + + + diff --git a/src/main/java/ru/simplex2/vkid_spring_security/App.java b/src/main/java/ru/simplex2/vkid_spring_security/App.java new file mode 100644 index 0000000..5091408 --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/App.java @@ -0,0 +1,13 @@ +package ru.simplex2.vkid_spring_security; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.java new file mode 100644 index 0000000..0c4cc16 --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.java @@ -0,0 +1,19 @@ +package ru.simplex2.vkid_spring_security.vk; + +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; + +public class VkAuthenticationProvider implements AuthenticationProvider { + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + authentication.setAuthenticated(true); + return authentication; + } + + @Override + public boolean supports(Class authentication) { + return authentication.equals(VkOAuth2AuthenticationToken.class); + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.java new file mode 100644 index 0000000..a8c2add --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.java @@ -0,0 +1,68 @@ +package ru.simplex2.vkid_spring_security.vk; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.crypto.codec.Hex; +import org.springframework.security.crypto.keygen.BytesKeyGenerator; +import org.springframework.security.crypto.keygen.StringKeyGenerator; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.security.SecureRandom; + +public class VkBeginAuthFilter implements Filter { + private static final Logger LOG = LoggerFactory.getLogger(VkBeginAuthFilter.class); + private static final int STATE_KEY_LENGTH = 36; + private static final SecureRandom random = new SecureRandom(); + private VkSettings vkSettings; + + public VkBeginAuthFilter(VkSettings vkSettings) { + this.vkSettings = vkSettings; + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + LOG.debug("REQUEST URI: " + httpServletRequest.getRequestURI()); + LOG.debug("PARAMETERS MAP: " + request.getParameterMap().toString()); + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + StringKeyGenerator keyGen = () -> { + BytesKeyGenerator bytesKeyGen = new BytesKeyGenerator() { + @Override + public int getKeyLength() { + return STATE_KEY_LENGTH; + } + + @Override + public byte[] generateKey() { + byte[] bytes = new byte[STATE_KEY_LENGTH]; + random.nextBytes(bytes); + return bytes; + } + }; + return new String(Hex.encode(bytesKeyGen.generateKey())); + }; + + String state = keyGen.generateKey(); + HttpSession httpSession = httpServletRequest.getSession(); + httpSession.setAttribute(VkEndAuthFilter.STATE_ATTRIBUTE_KEY, state); + httpServletResponse.sendRedirect("https://id.vk.ru/authorize?response_type=code&client_id=" + vkSettings.getClientId() + + "&scope=email&redirect_uri=" + vkSettings.getRedirectUri() + + "&code_challenge_method=S256&code_challenge=" + vkSettings.generateCodeChallenge(vkSettings.generateCodeVerifier()) + + "&state=" + state); + } + + public VkSettings getVkSettings() { + return vkSettings; + } + + public void setVkSettings(VkSettings vkSettings) { + this.vkSettings = vkSettings; + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java new file mode 100644 index 0000000..c02179a --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java @@ -0,0 +1,104 @@ +package ru.simplex2.vkid_spring_security.vk; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationServiceException; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class VkEndAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger LOG = LoggerFactory.getLogger(VkEndAuthFilter.class); + + private static final String DEFAULT_PROCESSING_URL = "/login/oauth2/code/vk"; + public static final String STATE_ATTRIBUTE_KEY = "ru.simplex2.vkid.state"; + private RestTemplate restTemplate = new RestTemplate(); + private AuthenticationManager authenticationManager; + private VkSettings vkSettings; + + public VkEndAuthFilter(VkSettings vkSettings){ + this(DEFAULT_PROCESSING_URL, vkSettings); + } + + public VkEndAuthFilter(String defaultFilterProcessesUrl, VkSettings vkSettings) { + this(defaultFilterProcessesUrl, new ProviderManager(new VkAuthenticationProvider()), vkSettings); + } + + public VkEndAuthFilter(AuthenticationManager authenticationManager, VkSettings vkSettings) { + this(DEFAULT_PROCESSING_URL, authenticationManager, vkSettings); + } + + public VkEndAuthFilter(String defaultFilterProcessesUrl, AuthenticationManager authenticationManager, VkSettings vkSettings) { + super(defaultFilterProcessesUrl, authenticationManager); + this.authenticationManager = authenticationManager; + this.vkSettings = vkSettings; + } + + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException { + Map parameterMap = request.getParameterMap(); + String stateFromSession = request.getSession().getAttribute(STATE_ATTRIBUTE_KEY).toString(); + if (!stateFromSession.equals(parameterMap.get("state")[0])) { + String errorMessage = "Wrong state!"; + response.sendError(400, errorMessage); + throw new AuthenticationServiceException(errorMessage); + } + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("grant_type", "authorization_code"); + body.add("code", parameterMap.get("code")[0]); + body.add("code_verifier", vkSettings.getCodeVerifier()); + body.add("client_id", vkSettings.getClientId()); + body.add("device_id", parameterMap.get("device_id")[0]); + body.add("redirect_uri", vkSettings.getRedirectUri()); + body.add("state", stateFromSession); + + HttpEntity> requestEntity = new HttpEntity<>(body, headers); + ResponseEntity responseEntity = restTemplate.postForEntity("https://id.vk.ru/oauth2/auth", requestEntity, Map.class); + Map responseBodyMap = (Map) responseEntity.getBody(); + + + + MultiValueMap userDataRequestBody = new LinkedMultiValueMap<>(); + userDataRequestBody.add("client_id", vkSettings.getClientId()); + userDataRequestBody.add("access_token", responseBodyMap.get("access_token")); + HttpEntity> userDataRequestEntity = new HttpEntity<>(userDataRequestBody, headers); + ResponseEntity userDataResponseEntity = restTemplate.postForEntity("https://id.vk.ru/oauth2/user_info", userDataRequestEntity, Map.class); + Map userData = (Map) userDataResponseEntity.getBody().get("user"); + + VkUser vkUser = new VkUser(); + vkUser.setUserId(Long.valueOf(userData.get("user_id").toString())); + vkUser.setSex(Integer.valueOf(userData.get("sex").toString())); + vkUser.setFirstName(userData.get("first_name") == null ? null : userData.get("first_name").toString()); + vkUser.setLastName(userData.get("last_name") == null ? null : userData.get("last_name").toString()); + vkUser.setAvatar(userData.get("avatar") == null ? null : userData.get("avatar").toString()); + vkUser.setEmail(userData.get("email") == null ? null : userData.get("email").toString()); + vkUser.setPhone(userData.get("phone") == null ? null : userData.get("phone").toString()); + vkUser.setBirthday(userData.get("birthday") == null ? null : LocalDate.parse(userData.get("birthday").toString(), DateTimeFormatter.ofPattern("dd.MM.yyyy"))); + + List authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority("ROLE_USER")); + VkOAuth2AuthenticationToken authRequest = new VkOAuth2AuthenticationToken(authorities, vkUser); + return authenticationManager.authenticate(authRequest); + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.java new file mode 100644 index 0000000..7ba24c1 --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.java @@ -0,0 +1,26 @@ +package ru.simplex2.vkid_spring_security.vk; + +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; + +import java.util.Collection; + +public class VkOAuth2AuthenticationToken extends AbstractAuthenticationToken { + + private VkUser vkUser; + + public VkOAuth2AuthenticationToken(Collection authorities, VkUser vkUser){ + super(authorities); + this.vkUser = vkUser; + } + + @Override + public Object getCredentials() { + return null; + } + + @Override + public VkUser getPrincipal() { + return vkUser; + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkSettings.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkSettings.java new file mode 100644 index 0000000..ef5adb6 --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkSettings.java @@ -0,0 +1,93 @@ +package ru.simplex2.vkid_spring_security.vk; + + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Base64; + +/** + * Значения полей clientId и redirectUri этого класса нужно задать самостоятельно. + */ +public class VkSettings { + + private static final String PKCE_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"; + private static final SecureRandom RANDOM = new SecureRandom(); + + /** + * ID Вашего приложения в VK ID. + * Узнать ID можно здесь: + * https://id.vk.com/about/business/go/ + */ + private String clientId; + /** + * Uri адрес, по которому VK будет перенаправлять пользователя. + * Указывается там же, где указан Ваш clientId: + * https://id.vk.com/about/business/go/ + */ + private String redirectUri; + private String codeVerifier; + + public VkSettings(String redirectUri, String clientId) { + this.redirectUri = redirectUri; + this.clientId = clientId; + } + + public String generateCodeVerifier() { + return generateCodeVerifier(64); + } + public String generateCodeVerifier(int length) { + if (length < 43 || length > 128) { + throw new IllegalArgumentException("code_verifier length must be between 43 and 128"); + } + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + int idx = RANDOM.nextInt(PKCE_CHARSET.length()); + sb.append(PKCE_CHARSET.charAt(idx)); + } + return codeVerifier = sb.toString(); + } + + public String generateCodeChallenge(String codeVerifier) { + if (codeVerifier == null || codeVerifier.isEmpty()) { + throw new IllegalArgumentException("code_verifier must not be null or empty"); + } + byte[] bytes = codeVerifier.getBytes(StandardCharsets.US_ASCII); + byte[] digest = sha256(bytes); + return Base64.getUrlEncoder().withoutPadding().encodeToString(digest); + } + + private byte[] sha256(byte[] input) { + try { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + return md.digest(input); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("SHA-256 not available", e); + } + } + + public String getCodeVerifier() { + return codeVerifier; + } + + public void setCodeVerifier(String codeVerifier) { + this.codeVerifier = codeVerifier; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getRedirectUri() { + return redirectUri; + } + + public void setRedirectUri(String redirectUri) { + this.redirectUri = redirectUri; + } +} diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkUser.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkUser.java new file mode 100644 index 0000000..165ad42 --- /dev/null +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkUser.java @@ -0,0 +1,125 @@ +package ru.simplex2.vkid_spring_security.vk; + +import java.time.LocalDate; + + +/** + * Модель пользователя VK. + */ +public class VkUser { + /** + * Идентификатор. + */ + private Long userId; + /** + * Имя. + */ + private String firstName; + /** + * Фамилия. + */ + private String lastName; + /** + * Ссылка на фото профиля + */ + private String avatar; + /** + * Пол. + * (1 — женский, 2 — мужской, 0 — пол не указан) + */ + private Integer sex; + /** + * Статус верификации пользователя. + * (Синяя галочка рядом с именем пользователя, + * которая выдается известным личностям: + * музыкантам, блогерам, спортсменам, и.т.д. + * Возможные значения: + * true — верифицирован, false — не верифицирован + */ + private boolean verified; + /** + * День рождения. + * Формат: 16.01.1995 + */ + private LocalDate birthday; + /** + * Электронная почта. + */ + private String email; + /** + * Телефон. + */ + private String phone; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public boolean isVerified() { + return verified; + } + + public void setVerified(boolean verified) { + this.verified = verified; + } + + public LocalDate getBirthday() { + return birthday; + } + + public void setBirthday(LocalDate birthday) { + this.birthday = birthday; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } +} diff --git a/src/site/site.xml b/src/site/site.xml new file mode 100644 index 0000000..a546b26 --- /dev/null +++ b/src/site/site.xml @@ -0,0 +1,26 @@ + + + + + vkid-spring-security + https://maven.apache.org/images/apache-maven-project.png + https://www.apache.org/ + + + + https://maven.apache.org/images/maven-logo-black-on-white.png + https://maven.apache.org/ + + + + org.apache.maven.skins + maven-fluido-skin + 1.7 + + + + + + + \ No newline at end of file diff --git a/src/test/java/ru/simplex2/vkid_spring_security/AppTest.java b/src/test/java/ru/simplex2/vkid_spring_security/AppTest.java new file mode 100644 index 0000000..b2c4b47 --- /dev/null +++ b/src/test/java/ru/simplex2/vkid_spring_security/AppTest.java @@ -0,0 +1,38 @@ +package ru.simplex2.vkid_spring_security; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/target/classes/ru/simplex2/vkid_spring_security/App.class b/target/classes/ru/simplex2/vkid_spring_security/App.class new file mode 100644 index 0000000..a17b77b --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/App.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.class new file mode 100644 index 0000000..38a4b84 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkAuthenticationProvider.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter$1.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter$1.class new file mode 100644 index 0000000..bf7bca8 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter$1.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.class new file mode 100644 index 0000000..a832ca5 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkBeginAuthFilter.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.class new file mode 100644 index 0000000..cbfa785 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.class new file mode 100644 index 0000000..0e3f799 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkOAuth2AuthenticationToken.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkSettings.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkSettings.class new file mode 100644 index 0000000..4e6e74f --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkSettings.class Binary files differ diff --git a/target/classes/ru/simplex2/vkid_spring_security/vk/VkUser.class b/target/classes/ru/simplex2/vkid_spring_security/vk/VkUser.class new file mode 100644 index 0000000..bf03f39 --- /dev/null +++ b/target/classes/ru/simplex2/vkid_spring_security/vk/VkUser.class Binary files differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..2a96de5 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,4 @@ +#Created by Apache Maven 3.9.9 +groupId=ru.simplex2 +artifactId=vkid_spring_security +version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..6b62e94 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,8 @@ +ru\simplex2\vkid_spring_security\vk\VkEndAuthFilter.class +ru\simplex2\vkid_spring_security\vk\VkUser.class +ru\simplex2\vkid_spring_security\App.class +ru\simplex2\vkid_spring_security\vk\VkAuthenticationProvider.class +ru\simplex2\vkid_spring_security\vk\VkOAuth2AuthenticationToken.class +ru\simplex2\vkid_spring_security\vk\VkBeginAuthFilter$1.class +ru\simplex2\vkid_spring_security\vk\VkSettings.class +ru\simplex2\vkid_spring_security\vk\VkBeginAuthFilter.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..663fd30 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,7 @@ +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkOAuth2AuthenticationToken.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\App.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkBeginAuthFilter.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkEndAuthFilter.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkSettings.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkUser.java +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\main\java\ru\simplex2\vkid_spring_security\vk\VkAuthenticationProvider.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..5737e2c --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +ru\simplex2\vkid_spring_security\AppTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..50b5a41 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +C:\Users\sbnet\eclipse-workspace\simplex\vkauthlib\vkid-spring-security\src\test\java\ru\simplex2\vkid_spring_security\AppTest.java diff --git a/target/surefire-reports/TEST-ru.simplex2.vkid_spring_security.AppTest.xml b/target/surefire-reports/TEST-ru.simplex2.vkid_spring_security.AppTest.xml new file mode 100644 index 0000000..529871e --- /dev/null +++ b/target/surefire-reports/TEST-ru.simplex2.vkid_spring_security.AppTest.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/ru.simplex2.vkid_spring_security.AppTest.txt b/target/surefire-reports/ru.simplex2.vkid_spring_security.AppTest.txt new file mode 100644 index 0000000..49e761b --- /dev/null +++ b/target/surefire-reports/ru.simplex2.vkid_spring_security.AppTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ru.simplex2.vkid_spring_security.AppTest +------------------------------------------------------------------------------- +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s - in ru.simplex2.vkid_spring_security.AppTest diff --git a/target/test-classes/ru/simplex2/vkid_spring_security/AppTest.class b/target/test-classes/ru/simplex2/vkid_spring_security/AppTest.class new file mode 100644 index 0000000..a450b84 --- /dev/null +++ b/target/test-classes/ru/simplex2/vkid_spring_security/AppTest.class Binary files differ diff --git a/target/vkid_spring_security-1.0-SNAPSHOT.jar b/target/vkid_spring_security-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..c3e8148 --- /dev/null +++ b/target/vkid_spring_security-1.0-SNAPSHOT.jar Binary files differ