Heim Backend-Entwicklung PHP-Tutorial Java-Backend-Entwicklung: Verwendung des Java Authentication and Authorization Service für die API-Mehrrollen-Berechtigungsverwaltung

Java-Backend-Entwicklung: Verwendung des Java Authentication and Authorization Service für die API-Mehrrollen-Berechtigungsverwaltung

Jun 17, 2023 am 10:27 AM
java 权限管理 后端开发

Mit der Entwicklung des Internets werden die Anwendungsszenarien verschiedener Webanwendungen und APIs immer umfangreicher und das API-Mehrrollen-Berechtigungsmanagement ist zu einem immer wichtigeren Thema geworden. In der Java-Backend-Entwicklung ist der Java Authentication and Authorization Service (JAAS) eine zuverlässige Lösung. Er bietet einen rollenbasierten Berechtigungskontrollmechanismus, der es uns ermöglicht, Zugriffsberechtigungen auf API-Schnittstellen einfach zu verwalten.

In der Java-Entwicklung ist das JAAS-Framework die Abkürzung für Java Authentication and Authorization Service. Es ist eine der Java SE-Standard-APIs und wird hauptsächlich zur Authentifizierung und Autorisierung von Anwendungen verwendet. Die Kernkonzepte des JAAS-Frameworks sind Konfigurations- und Richtlinienquellen, die zur Identifizierung und Verwaltung verschiedener Benutzertypen und Zugriffsrichtlinien in einem Programm verwendet werden.

Das JAAS-Framework bietet zwei Hauptabstraktionen: Subject und LoginModule. Betreff stellt einen Benutzer oder eine Benutzergruppe im Programm dar, und LoginModule ist die spezifische Implementierung von Authentifizierung und Autorisierung. Das JAAS-Framework implementiert durch diese beiden Abstraktionen einen rollenbasierten Berechtigungskontrollmechanismus.

Sehen wir uns an, wie Sie das JAAS-Framework zur Implementierung der API-Rollenberechtigungsverwaltung verwenden.

  1. JAAS konfigurieren

Zuerst muss JAAS konfiguriert werden. Wir können im Projekt eine Konfigurationsdatei erstellen, zum Beispiel: jaas.conf. Der Inhalt der Konfigurationsdatei lautet wie folgt:

Sample {
    com.example.security.SimpleLoginModule required;
};
Nach dem Login kopieren

In der obigen Konfiguration ist Sample ein Programmname und com.example.security.SimpleLoginModule der Klassenname, der die LoginModule-Schnittstelle implementiert.

  1. Implementieren Sie die LoginModule-Schnittstelle

Als nächstes müssen Sie eine Klasse implementieren, die die LoginModule-Schnittstelle implementiert, um Benutzer zu authentifizieren und zu autorisieren. Das Codebeispiel lautet wie folgt:

package com.example.security;

import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;

public class SimpleLoginModule implements LoginModule {

    private Subject subject;
    private CallbackHandler callbackHandler;
    private Map<String, ?> sharedState;
    private Map<String, ?> options;
    private String username;

    public void initialize(
        Subject subject,
        CallbackHandler callbackHandler,
        Map<String, ?> sharedState,
        Map<String, ?> options
    ) {
        this.subject = subject;
        this.callbackHandler = callbackHandler;
        this.sharedState = sharedState;
        this.options = options;
    }

    public boolean login() throws LoginException {
        Callback[] callbacks = new Callback[2];
        callbacks[0] = new NameCallback("username: ");
        callbacks[1] = new PasswordCallback("password: ", false);

        try {
            callbackHandler.handle(callbacks);

            String username = ((NameCallback) callbacks[0]).getName();
            String password = String.valueOf(((PasswordCallback) callbacks[1]).getPassword());

            // 验证用户名和密码,通过返回true
            if ("admin".equals(username) && "123456".equals(password)) {
                this.username = username;
                return true;
            } else {
                throw new LoginException("Invalid username or password");
            }
        } catch (UnsupportedCallbackException | IOException e) {
            e.printStackTrace();
            throw new LoginException(e.getMessage());
        }
    }

    public boolean commit() throws LoginException {
        subject.getPrincipals().add(new SimplePrincipal(username));
        return true;
    }

    public boolean abort() throws LoginException {
        return true;
    }

    public boolean logout() throws LoginException {
        subject.getPrincipals().removeIf(principal -> principal.getName().equals(username));
        return true;
    }

}
Nach dem Login kopieren

Unter anderem implementieren wir die Benutzerauthentifizierung und -autorisierung, indem wir die Methoden in der LoginModule-Schnittstelle implementieren. Bei der Anmeldemethode verwenden wir den CallbackHandler, um den vom Benutzer eingegebenen Benutzernamen und das Kennwort abzurufen und zu authentifizieren. Bei der Festschreibungsmethode fügen wir die Benutzerinformationen zur späteren Rollenautorisierung hinzu.

  1. Rollenautorisierung implementieren

Als nächstes muss die Rollenautorisierung für bestimmte API-Schnittstellen durchgeführt werden. Wir können die von Java EE bereitgestellten Annotationen für die Autorisierung verwenden, wie zum Beispiel:

@RolesAllowed({"admin","user"})
@Path("/api/hello")
public class HelloResource {

    @GET
    public Response greet() {
        return Response.ok("Hello World!").build();
    }

}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir die Annotation @RolesAllowed, um die Zugriffsrolle der API anzugeben. Nur Benutzer mit den Rollen „Administrator“ und „Benutzer“ können auf die API zugreifen Schnittstelle.

  1. Konfigurieren Sie den Anwendungsserver

Um schließlich JAAS-Unterstützung auf dem Anwendungsserver hinzuzufügen, können wir die folgende Konfiguration in server.xml hinzufügen:

<server>
  ...
  <featureManager>
    ...
    <feature>appSecurity-2.0</feature>
  </featureManager>
  ...
</server>
Nach dem Login kopieren

Fügen Sie den folgenden Code in web.xml hinzu:

<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>sampleRealm</realm-name>
  <form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/error.html</form-error-page>
  </form-login-config>
</login-config>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>helloResource</web-resource-name>
    <url-pattern>/api/hello</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
    <role-name>user</role-name>
</auth-constraint>
Nach dem Login kopieren

Im Obigen In der Konfiguration haben wir die Verwendung der FORM-Authentifizierungsmethode angegeben und die entsprechende Seite für die Seite bereitgestellt. Gleichzeitig müssen Sie auch eine Sicherheitseinschränkung angeben, um die Rolle der /hello-API zu autorisieren.

Zu diesem Zeitpunkt haben wir die Konfiguration der API-Mehrrollen-Berechtigungsverwaltung abgeschlossen.

Zusammenfassung

JAAS-Framework ist die Abkürzung für Java Authentication and Authorization Service. Es ist eine der Java SE-Standard-APIs und wird hauptsächlich zur Authentifizierung und Autorisierung von Anwendungen verwendet. In der Java-Back-End-Entwicklung kann die Rollenautorisierung mithilfe des JAAS-Frameworks für die API-Mehrrollen-Berechtigungsverwaltung problemlos implementiert werden. Wir haben einen rollenbasierten Berechtigungskontrollmechanismus über Konfigurations- und Richtlinienquellen implementiert, die LoginModule-Schnittstelle für die Identitätsauthentifizierung und -autorisierung verwendet und Anmerkungen für die API-Rollenautorisierung verwendet. Durch die Konfiguration des Anwendungsservers haben wir schließlich die API-Mehrrollen-Berechtigungsverwaltung implementiert.

Das obige ist der detaillierte Inhalt vonJava-Backend-Entwicklung: Verwendung des Java Authentication and Authorization Service für die API-Mehrrollen-Berechtigungsverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Feb 07, 2025 pm 12:11 PM

Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo

See all articles