Heim >Java >javaLernprogramm >Java-Autorisierung und -Authentifizierung

Java-Autorisierung und -Authentifizierung

炎欲天舞
炎欲天舞Original
2017-08-04 10:57:562000Durchsuche

CRMBerechtigungsverwaltung

1. Konzept

Die Berechtigungsverwaltung dient der Verwaltung von Benutzervorgängen auf Ressourcen. Die Berechtigungen (auch Ressourcen genannt) dieses CRM-Systems werden basierend auf Rollenbetriebsberechtigungen implementiert, d. h. RBAC (Role-Based Access Control, rollenbasierte Zugriffskontrolle), was bedeutet, dass Benutzer damit verknüpft sind Rollen und Berechtigungen. Einfach ausgedrückt hat ein Benutzer mehrere Rollen und jede Rolle verfügt über mehrere Berechtigungen. Auf diese Weise wird ein Berechtigungsmodell „Benutzer-Rolle-Berechtigung“ aufgebaut. In diesem Modell gibt es Viele-zu-Viele-Beziehungen zwischen Benutzern und Rollen sowie zwischen Rollen und Berechtigungen. Um die Viele-zu-Viele-Beziehung zwischen Tabellen zu realisieren, muss eine Viele-zu-Viele-Beziehung in Zwei-zu-Viele-Beziehungen unterteilt werden. Zu-viele-Beziehung. Daher werden Zwischentabellen, Benutzerrollentabellen und Rollenberechtigungstabellen eingeführt.

2. Das Datenbank-

-Berechtigungsverwaltungsmodul umfasst insgesamt fünf Tabellen :

  1. Drei Haupttabellen

a) Benutzertabelle (t_user),

b) Rollentabelle (t_role),

c ) Ressourcentabelle (t_module),

2. Zwei Zwischentabellen

a) Benutzerrollentabelle (t_user_role),

b) Rollenressourcentabelle (t_permission),

3. Implementierung des Berechtigungsmanagements

1. Modul, Rolle, Benutzer-Einzeltabelle CRUD

Modul CRUD: t_module-Tabelle bedienen

Rollen-CRUD: t_role-Tabelle bedienen

Benutzer-CRUD: t_role-Tabelle bedienen

2. Autorisierung

Rolle Berechtigungen erteilen

Berechtigungen erteilen für Rollen: Verwenden Sie ztree, um die Berechtigungsbaumstruktur zu erstellen

a) Berechtigungen erteilen

1. Binden Sie zuerst dieses Modul

2. Binden Sie das übergeordnete Modul; 🎜>                                        

   3, löschen Sie das übergeordnete Modul (bestimmen Sie, ob das übergeordnete Modul über andere mit dem Untermodul verknüpfte Wortrollen verfügt. Wenn nicht, brechen Sie es ab Es gibt, verknüpfen Sie es.)

a) Verwenden Sie das jQuery-Plug-in zTree, um eine Ressourcenbaumstruktur zu erstellen in Tabelle t_module

b) Klicken Sie mit der Maus auf Auswahlfeld in zTree zum Betreiben der

Tabelle t_permission (Rollenressourcentabelle)

zum Implementieren der Rolle Berechtigungen gewähren

Benutzern Rollen zuweisen Benutzern Rollen zuweisen: Verwenden Sie die Combobox-Mehrfachauswahl a). ). Konto ändern: Zuerst löschen, dann hinzufügen

Beim Erstellen eines Benutzers oder Ändern von Benutzerinformationen können Sie das Combobox-Mehrfachauswahlfeld verwenden, um dem Benutzer Rollenvorgänge zuzuweisen t_user_role (Benutzerrollentabelle)

3. Authentifizierung

Idee:

Aus der t_permission-Tabelle Rufen Sie den Berechtigungswert (acl_value) von der Seite ab und vergleichen Sie ihn mit dem von der Seite übergebenen Wert oder mit dem in der Anmerkung angegebenen Berechtigungswert:

 1. Die Seite übergibt Request.getParameter("permission"); Abfrage der in der Datenbank gefundenen Berechtigungsliste basierend auf userId

2. Klären Sie den Modulberechtigungswert durch Anmerkungen: @requirePermission(permission="1010";

Backend-Authentifizierung: Spring AOP und benutzerdefinierte Anmerkungen Implementieren Sie die Authentifizierung

Erhalten Sie Benutzerberechtigungen und speichern Sie sie in der Sitzung. Wenn der Benutzer dann eine Ressource betreibt, wird der Berechtigungswert einer Ressource zur Bestimmung übermittelt ob der Benutzer über diese Berechtigung verfügt

Verwenden Sie Spring AOP, um die Authentifizierung abzufangen

1. Schritt: Aktivieren Sie den Annotationstreiber & lt;

Schritt 2: Erstellen Sie eine Proxy-Klasse zur Verwendung der @Compone @Component-Annotation. Drei Schritte: Definieren Sie einen Startpunkt @pointcut ("*Execution ('com.shsxt.controller.*.*(((((..)))")

Public void PointCut () {}>

             Schritt 4: Schreiben Sie eine Erweiterung: @Around(value="pointcut()")

                                                                                                             Benutzerberechtigungen

                                                              ​

Benutzerdefinierte Anmerkung

  1. 2. Schreiben Sie die Aspektklasse

  2. , um den Einstiegspunkt zu definieren: Die Methode zum Selbstabfangen von Berechtigungsanmerkungen kann die Leistung verbessern

Erreicht durch Übergabe des Berechtigungsparameters im Vordergrund:

Erreicht durch Annotationen

//@Pointcut("execution(* com.shsxt.controller.*.*(..))")
    @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)")    
    public void pointcut() {
    }
3. Führen Sie den AOP-Namespace ein und aktivieren Sie den AOP-Annotationstreiber

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));
       String permissioFront = request.getParameter("permission"); // 后台权限认证
       AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));     
  
    if (requirePermissions != null) {

        String permission = requirePermissions.permission(); // 后台权限认证

        throw new UnAuthPermissionException(permission, "您无权操作此模块");

    }
4. Aktivieren Sie Anmerkungen zu Methoden, die eine Berechtigungsauthentifizierung erfordern

Die Berechtigung sollte mit dem act_value in der Modultabelle übereinstimmen

<!-- 启用@Aspect注解 -->

<aop:aspectj-autoproxy />

Front-End-Authentifizierung: Beurteilung der in Freemarker integrierten Funktion

Erhalten Sie Benutzerberechtigungen. Verwenden Sie dann die Freemarker-Syntax im Front-End-Freemarker, um zu bestimmen, ob der Benutzer diese Ressource bedienen kann (list?seq_contains('Berechtigungswert). '))

1.SQL:

2. Fragen Sie die Berechtigung in der AOP-Aspektklasse ab, nehmen Sie die Berechtigungswertliste heraus und fügen Sie sie in die Sitzung ein

3. Beurteilung der Startseite: Erläuterung: Verwenden Sie die in Freemarker integrierte Funktion sql_contains, um zu beurteilen, ob die Sequenz Parameterwerte enthält. Returns true

ähnelt dem Sammlung hashmap.contains(value) in Java;
SELECT

       DISTINCT p.acl_value

FROM

       t_permission p
-- LEFT JOIN t_role r ON r.id = ur.role_id

left JOIN t_user_role ur on p.role_id = ur.role_id

WHERE

       ur.user_id = 10;

Das obige ist der detaillierte Inhalt vonJava-Autorisierung und -Authentifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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