A library for bypassing all of Java's security mechanisms, visibility checks, and encapsulation measures via the JNI API

Related tags

Security java jni
Overview

Narcissus: thwart strong encapsulation in JDK 16+

Narcissus is a JNI native code library that provides a small subset of the Java reflection API, while bypassing all of Java's access/visibility checks, security manager restrictions, and module strong encapsulation enforcement, by calling methods and accessing fields through the JNI API. This allows code that relies on reflective access to non-public classes, fields, and methods to keep working even now that strong encapsulation is being enforced in JDK 16+.

Narcissus works on JDK 7+, however it is most useful for suppressing reflective access warnings in JDK 9-15, and for circumventing strong encapsulation for JDK 16+, in order to keep legacy software running (for example, when legacy software depends upon setAccessible to access a needed private field of a class in some library).

Obviously eventually the security loopholes exploited by Narcissus will be closed by the JDK team. Please submit patches to your upstream libraries to get them to publicly expose useful internals that you rely on, so that your software can keep working in future.

Usage

Maven dependency details are here (only Linux x86/x64, Windows x86/x64, and Mac OS X x64 are currently supported).

The API is defined as static methods of Narcissus.java.

For each of the methods listed below, in contrast to the equivalent in the Java reflection API, the Narcissus method bypasses all visibility/accessibility checks, ignores security manager restrictions, and circumvents module encapsulation.

Note: You should check the static Boolean value Narcissus.libraryLoaded to make sure the library has actually loaded before you try calling any methods. Otherwise you may get an UnsatisfiedLinkError when calling other static methods of Narcissus if the library wasn't able to be loaded.

  • Finding classes

    • Class Narcissus.findClass(String className)

      Equivalent to Class.forName(String className). Finds array classes if the class name is of the form "com.xyz.MyClass[][]".

  • Finding fields

    • Field[] Narcissus.getDeclaredFields(Class cls)

      Equivalent to cls.getDeclaredFields().

    • List Narcissus.enumerateFields(Class cls)

      Equivalent to cls.getDeclaredFields(), but also iterates up through superclasses to collect all fields of the class and its superclasses.

    • Field Narcissus.findField(Class cls, String fieldName)

      Find a field of a class by name.

  • Finding methods

    • Method[] Narcissus.getDeclaredMethods(Class cls)

      Equivalent to cls.getDeclaredMethods().

    • List Narcissus.enumerateMethods(Class cls)

      Equivalent to cls.getDeclaredMethods(), but iterates up through superclasses to collect all methods of the class and its superclasses.

    • Method Narcissus.findMethod(Class cls, String methodName, Class... paramTypes)

      Find a method of a class by name and parameter types.

    • Constructor[] Narcissus.getDeclaredConstructors(Class cls)

      Equivalent to cls.getDeclaredConstructors().

    • List Narcissus.findConstructor(Class cls, Class... paramTypes)

      Find the constructor with the required parameter types.

  • Getting/Setting fields

    • < > Narcissus.get< >Field(Object object, Field field) , e.g. int Narcissus.getIntField(Object object, Field field)

      void Narcissus.set< >Field(Object object, Field field, < > value) , e.g. void Narcissus.setIntField(Object object, Field field, int value)

      Get/set a non-static field value, for a field of type < > . For non-primitive-typed fields, < > is Object.

    • Object Narcissus.getField(Object object, Field field)

      void Narcissus.setField(Object object, Field field, Object value)

      Get/set a non-static field value. Automatically boxes/unboxes values if the field is primitive-typed.

    • < > Narcissus.getStatic< >Field(Field field) , e.g. int Narcissus.getStaticIntField(Field field)

      void Narcissus.setStatic< >Field(Field field, < > value) , e.g. void Narcissus.setStaticIntField(Field field, int value)

      Get/set a static field value, for a field of type < > . For non-primitive-typed fields, < > is Object.

    • Object Narcissus.getStaticField(Field field)

      void Narcissus.setStaticField(Field field, Object value)

      Get/set a static field value. Automatically boxes/unboxes values if the field is primitive-typed.

  • Invoking methods

    • < > Narcissus.invoke< >Method(Object object, Method method, Object... args) , e.g. int Narcissus.invokeIntMethod(Object object, Method method, Object... args)

      Invoke a non-static method which returns type < > . For methods with non-primitive return type, < > is Object. For methods that do not return a value, < > is void.

    • Object Narcissus.invokeMethod(Object object, Method method, Object... args)

      Invoke a non-static method. Automatically boxes the return type, if the method returns a primitive type.

    • < > Narcissus.invokeStatic< >Method(Method method, Object... args) , e.g. int Narcissus.invokeStaticIntMethod(Method method, Object... args)

      Invoke a static method which returns type < > . For methods with non-primitive return type, < > is Object. For methods that do not return a value, < > is void.

    • Object Narcissus.invokeStaticMethod(Method method, Object... args)

      Invoke a static method. Automatically boxes the return type, if the method returns a primitive type.

You may want to also try using ReflectionCache if you need to quickly find a lot of fields in the same class.

Status

Narcissus is feature complete; however, work is needed to port the build configuration to every major operating system and architecture. Please get in touch if you can help with this.

Why do this?

The JDK team has broken the Java ecosystem by enforcing strong encapsulation. They give two reasons in JEP 396 for doing this: security and maintainability.

(1) Java security is a total illusion.

The JDK team's security justification for enforcing encapsulation was stated as follows:

Some non-public classes, methods, and fields of java.* packages define privileged operations such as the ability to define a new class in a specific class loader, while others convey sensitive data such as cryptographic keys. These elements are internal to the JDK, despite being in java.* packages. The use of these internal elements by external code, via reflection, puts the security of the platform at risk. (--JEP 396)

However the Java Native Interface is a huge gaping hole in Java's intricate security structure, so this argument is moot. Furthermore, this gaping security hole is by design, presumably because the JDK team preferred to code the security infrastructure in Java rather than in C++:

The JNI does not enforce class, field, and method access control restrictions that can be expressed at the Java programming language level through the use of modifiers such as private and final. It is possible to write native code to access or modify fields of an object even though doing so at the Java programming language level would lead to an IllegalAccessException. JNI’s permissiveness was a conscious design decision, given that native code can access and modify any memory location in the heap anyway. (--The Java Native Interface — Programmer’s Guide and Specification, section 10.9)

(2) Backwards compatibility should never have been a concern for APIs that are clearly marked as internal.

The JDK team's maintainability justification for enforcing encapsulation was stated as follows:

All classes, methods, and fields of sun.* packages are internal APIs of the JDK. Some classes, methods, and fields of com.sun.*, jdk.*, and org.* packages are also internal APIs. These APIs were never standard, never supported, and never intended for external use. The use of these internal elements by external code is an ongoing maintenance burden. Time and effort spent preserving these APIs, so as not to break existing code, could be better spent moving the platform forward. (--JEP 396)

No. It is not the job of the JDK team to support APIs that are clearly marked as internal-only and not supported -- and in fact the JDK team never seems to lose much sleep over breaking internal APIs. This is just a straw man argument, and it constitutes passing blame to the community. It is the community's job to keep up with the JDK team's changes, and it is certainly not the JDK team's "job" to try to thwart the community's efforts to get access to useful internals, particularly when the JDK team has acknowledged that the real problem is that they haven't provided supported APIs yet for all the useful internal APIs that many projects depend upon for their core functionality:

It is not a goal to remove, encapsulate, or modify any critical internal APIs of the JDK for which standard replacements do not yet exist. This means that sun.misc.Unsafe will remain available. (--JEP 396)

However this principle has not been adhered to, since there are many useful private classes, fields, and methods that aren't in Unsafe but rather scattered all over the Java standard libraries, for which no standard replacement exists or will probably ever exist. Many libraries depend upon unfettered access to these internals just to be able to function -- and JDK 16 has broken all of these libraries.

How is it possible to circumvent Java strong encapsulation for JDK 16+?

The JNI API provides the ability to call any method or access any field without any access checks whatsoever -- and there isn't even a reflective access warning given on System.err as was the case for JDK 9-15 when using reflection to access non-public internals.

Of course if you make use of JNI to bypass Java's security, and things break, you get to keep all the pieces:

Native code that bypasses source-language-level access checks may have undesirable effects on program execution. For example, an inconsistency may be created if a native method modifies a final field after a just-in-time (JIT) compiler has inlined accesses to the field. Similarly, native methods should not modify immutable objects such as fields in instances of java.lang.String or java.lang.Integer. Doing so may lead to breakage of invariants in the Java platform implementation. (--The Java Native Interface — Programmer’s Guide and Specification, section 10.9)

Why "Narcissus"?

"Narcissus walked by a pool of water and decided to drink some. He saw his reflection, became entranced by it, and killed himself because he could not have his object of desire." (--Wikipedia: Narcissus)

(Note "reflection" and "object" 😀 )

Comments
  • Bump maven-gpg-plugin from 1.6 to 3.0.1

    Bump maven-gpg-plugin from 1.6 to 3.0.1

    Bumps maven-gpg-plugin from 1.6 to 3.0.1.

    Commits
    • 5255080 [maven-release-plugin] prepare release maven-gpg-plugin-3.0.1
    • e4dc062 [MGPG-79] fix handling of external pinentry programs in case the passphrase i...
    • 5902b2b deps: update JUnit
    • 12fbd63 Merge pull request #10 from Syquel/bugfix/MGPG-66
    • 4da6921 [MGPG-66] fix handling of excluded files on linux
    • 4016721 Merge pull request #12 from Syquel/bugfix/MGPG-80_equality
    • fba2c39 [MGPG-66] add test for handling of excluded files
    • 26aa5b3 [MGPG-66] fix handling of excluded files
    • 7438b37 [MGPG-80] implement GpgVersion equality in adherence to comparibility
    • b38c638 Merge pull request #11 from Syquel/bugfix/MGPG-80
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump maven-surefire-plugin from 2.21.0 to 2.22.2

    Bump maven-surefire-plugin from 2.21.0 to 2.22.2

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps maven-surefire-plugin from 2.21.0 to 2.22.2.

    Commits
    • d96b95c [maven-release-plugin] prepare release surefire-2.22.2
    • 4a2aafc Remove Travis file
    • 7b9ec3f Remove JUnit SNAPSHOT argument from IT
    • 18b4078 [SUREFIRE-1614] JUnit Runner that writes to System.out corrupts Surefire's ST...
    • af417b8 prepare for next development iteration
    • c23c8b9 [maven-release-plugin] prepare release surefire-2.22.1_vote-1
    • 5376261 [SUREFIRE-1564] Can't override platform version through project/plugin depend...
    • 242c0e8 [SUREFIRE-1564] Can't override platform version through project/plugin depend...
    • 25fadfc CheckTestNgSuiteXmlIT should not be ignored
    • 57fbb16 [SUREFIRE-1532] MIME type for javascript is now officially application/javasc...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump maven-scm-provider-gitexe from 1.9.5 to 1.12.0

    Bump maven-scm-provider-gitexe from 1.9.5 to 1.12.0

    Bumps maven-scm-provider-gitexe from 1.9.5 to 1.12.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump maven-source-plugin from 3.0.1 to 3.2.1

    Bump maven-source-plugin from 3.0.1 to 3.2.1

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps maven-source-plugin from 3.0.1 to 3.2.1.

    Commits
    • a59a2e4 [maven-release-plugin] prepare release maven-source-plugin-3.2.1
    • c954a7e make build as reproducible as possible for now
    • d5b9878 [MSOURCES-123] set archiver reproducible mode earlier
    • 258d666 MSOURCES-122 make output independant from OS newline
    • 5b4e02f [maven-release-plugin] prepare for next development iteration
    • 2a74824 [maven-release-plugin] prepare release maven-source-plugin-3.2.0
    • 816ebc4 MSOURCES-120 fix reproducible IT: remove plugin version from pom.xml
    • 32f122a MSOURCES-120 make output jar file binary Reproducible
    • 6e715b1 [MSOURCES-95] Source JAR is re-created even if sources are not changed
    • 9154e1a [maven-release-plugin] prepare for next development iteration
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump maven-javadoc-plugin from 3.2.0 to 3.3.1

    Bump maven-javadoc-plugin from 3.2.0 to 3.3.1

    Bumps maven-javadoc-plugin from 3.2.0 to 3.3.1.

    Commits
    • 2d22cca [maven-release-plugin] prepare release maven-javadoc-plugin-3.3.1
    • 7b7813e [MJAVADOC-450] Artifacts with a classifier are ignored when looking for resou...
    • 0d0e0cc [MJAVADOC-618] Goal javadoc:aggregate fails with submodules packaged as war
    • a2acaa2 [MJAVADOC-137] transform verify script from bsh to groovy
    • 16ca119 Clean up slf4j-simple
    • 87dbfb2 [MJAVADOC-677] Using "requires static transitive" makes javadoc goal fail
    • d770460 [MJAVADOC-680] JDK 16+: Error fetching link: ...\target\javadoc-bundle-option...
    • 292ebb7 Bump slf4j-simple from 1.7.30 to 1.7.32
    • fe6d738 Bump mockito-core from 3.9.0 to 3.12.0
    • d2dd532 [MJAVADOC-679] "Unable to compute stale date" in a directory with accent char...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump junit-jupiter from 5.8.0 to 5.8.1

    Bump junit-jupiter from 5.8.0 to 5.8.1

    Bumps junit-jupiter from 5.8.0 to 5.8.1.

    Release notes

    Sourced from junit-jupiter's releases.

    JUnit 5.8.1 = Platform 1.8.1 + Jupiter 5.8.1 + Vintage 5.8.1

    See Release Notes.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump assertj-core from 3.20.2 to 3.21.0

    Bump assertj-core from 3.20.2 to 3.21.0

    Bumps assertj-core from 3.20.2 to 3.21.0.

    Commits
    • 8f8b742 [maven-release-plugin] prepare release assertj-core-3.21.0
    • a7ef096 Add hasNoExtension to File assertions.
    • 5bef9b2 Bump byte-buddy.version from 1.11.15 to 1.11.16
    • 931b592 Add hasNoExtension to Path assertions
    • cd2ce82 Javadoc improvements
    • daf13ee Add additional tests for Path assertions
    • 620ec29 Bump org.eclipse.osgi from 3.16.300 to 3.17.0 (#2343)
    • a0e7214 Bump spring-core from 5.3.9 to 5.3.10 (#2344)
    • 9e5161f Use Java 17 GA, remove EOL Java 16
    • 48ed152 Path and File assertions refactoring
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
Releases(narcissus-1.0.7)
Spring-react-security - 🌶 Spring Security & React 🌶

Spring-react-security - ?? Spring Security & React ??

KimJunhan 2 Mar 28, 2022
Employee Management System using Spring Boot, Spring Security, Thymeleaf and MySQL database.

Employee Management System Employee Management System using Spring Boot, Spring Security, Thymeleaf and MySQL database. YouTube Video Series Employee

Ramesh Fadatare 62 Jan 1, 2023
Security engine for Java (authentication, authorization, multi frameworks): OAuth, CAS, SAML, OpenID Connect, LDAP, JWT...

pac4j is an easy and powerful security engine for Java to authenticate users, get their profiles and manage authorizations in order to secure web appl

PAC4J 2.2k Dec 30, 2022
Spring Security

Spring Security Spring Security provides security services for the Spring IO Platform. Spring Security 5.0 requires Spring 5.0 as a minimum and also r

Spring 7.4k Jan 5, 2023
PicketLink is a security framework for securing Java EE applications.

PicketLink http://picketlink.org Java EE Application Security Identity Management Federation Social REST Security Standard-based Security This reposit

PicketLink 92 Feb 21, 2022
OACC (Object ACcess Control) is an advanced Java Application Security Framework

OACC Java Application Security Framework What is OACC? OACC - pronounced [oak] - is a fully featured API to both enforce and manage your application's

null 103 Nov 24, 2022
Spring-security, swagger, db auth , RestAPI

Rest API Features Spring-security Swagger-UI DB based Authentication Role Based Access Spring AOP Steps To Use go to /login screen go to swagger-ui.ht

Aniruddha Stark 1 Mar 12, 2022
Contains all my research and content produced regarding the log4shell vulnerability

Objective Contains all my research and content produced regarding the log4shell vulnerability. Content Folder "analysis" Contain the information that

Dominique RIGHETTO 30 Oct 28, 2022
An API wrapper for BotiCord API written in Java

An API wrapper for BotiCord API written in Java

BotiCord 3 Nov 8, 2022
Library to easily configure API Key authentication in (parts of) your Spring Boot Application

42 API Key Authentication A library to easily configure API Key authentication in (parts of) your Spring Boot Application. Features Easily configure A

null 2 Dec 8, 2021
A Twitter-API library JAVA

Tweety A Twitter-API library for JAVA. Code for Authorization (Oauth 1) can be found here :Authorization This api conta

Rohit Kumar 2 Apr 26, 2022
Toloka has a powerful open API, it allows you to integrate an on-demand workforce directly into your processes, and to build scalable and fully automated human-in-the-loop ML pipelines.

Toloka Java SDK Documentation Website | API Documentation | Platform Designed by engineers for engineers, Toloka lets you integrate an on-demand workf

Toloka 10 Apr 27, 2022
A small and easy-to-use one-time password generator library for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP).

OTP-Java A small and easy-to-use one-time password generator for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP). Table of Contents Features Ins

Bastiaan Jansen 106 Dec 30, 2022
A small and easy-to-use one-time password generator library for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP).

OTP-Java A small and easy-to-use one-time password generator for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP). Table of Contents Features Ins

Bastiaan Jansen 106 Dec 30, 2022
Fluent builders with typesafe API for the JCA

Security Builders This library implements a set of "fluent" API builders for the java.security classes, and provides more typesafe, intuitive API to a

Terse Systems 44 Sep 13, 2022
Amazon Selling Partner JAVA SDK SP API

amazon-sp-api amazon sp api java sdk 背景: 亚马逊(amazon)在2020年10月推出了新的替代mws的api方案,称为Selling Partner API(SP-API)。sp-api在修改原mws的接口方式的基础上引入了aws的IAM权限管理,增加了开发

penghp 93 Nov 20, 2022
Simple API for using Java Reflection

Reflector По поводу багов или идей для данного репозитория можно писать в Discord или ВК(обратная связь) Обратная связь Discord: UnLegit#6190 ВКонтакт

null 1 Jan 25, 2022
Java binding to the Networking and Cryptography (NaCl) library with the awesomeness of libsodium

kalium - Java binding to the Networking and Cryptography (NaCl) library A Java binding to Networking and Cryptography library by Daniel J. Bernstein.

Bruno Oliveira da Silva 206 Oct 5, 2022
Password4j is a user-friendly cryptographic library that supports Argon2, Bcrypt, Scrypt, PBKDF2 and various cryptographic hash functions.

Password4j is a Java user-friendly cryptographic library for hashing and checking passwords with different Key derivation functions (KDFs) and Cryptog

Password4J 246 Jan 5, 2023