Erklärung und Anwendung des Shiro-Sicherheitsframeworks

Inhaltsverzeichnis

1. Berechtigungsverwaltung

1.1. Was ist Berechtigungsmanagement?

1.2. Was ist Identitätsauthentifizierung?

1.3. Was ist eine Autorisierung?

2. Was ist Shiro?

2.1. Gründe für die Verwendung von Shiro

3. Shiros Kernkomponenten

 3.1、Betreff

3.2, Sicherheitsmanager

3.3. Authentifikator (Authenticator)

3.4. Autorisierung

3.5. Realm (Datenbank lesen + Authentifizierungsfunktion + Autorisierungsfunktion implementieren)

3.6、SessionManager

3.7、SessionDAO

3.8、CacheManager

3.9、Kryptographie

4. Verwenden Sie Shiro, um die Authentifizierung und Autorisierung abzuschließen

4.1. Verwenden Sie Shiro, um die Authentifizierung abzuschließen

4.1.1. Erstellen Sie ein normales Maven-Projekt

4.1.2. Erstellen Sie eine INI-Datei

4.1.3. Testcode schreiben

4.1.4. Flussdiagramm des Zertifizierungsprozesses

 4.2. Verwenden Sie Shiro, um die Autorisierung abzuschließen

4.2.1. INI-Datei ändern

4.2.2. Testcode ändern

4.2.3. Flussdiagramm des Autorisierungsprozesses

1. Berechtigungsverwaltung

1.1. Was ist Berechtigungsmanagement?

Grundsätzlich müssen Systeme mit Benutzerbeteiligung eine Berechtigungsverwaltung durchführen. Die Berechtigungsverwaltung gehört zur Kategorie der Systemsicherheit. Die Berechtigungsverwaltung realisiert die Kontrolle des Benutzerzugriffs auf das System. Gemäß Sicherheitsregeln oder Sicherheitsrichtlinien wird gesteuert, dass Benutzer darauf zugreifen können und Zugriff nur auf das, wozu sie berechtigt sind. Ressource.

Die Berechtigungsverwaltung umfasst zwei Teile: Authentifizierung und Autorisierung der Benutzeridentität, die als Authentifizierung und Autorisierung bezeichnet werden. Für Ressourcen, die eine Zugriffskontrolle erfordern, müssen Benutzer zunächst eine Identitätsauthentifizierung durchlaufen. Nach bestandener Authentifizierung kann der Benutzer erst nach bestandener Authentifizierung auf die Ressource zugreifen.

1.2. Was ist Identitätsauthentifizierung?

Bei der Identitätsauthentifizierung wird festgestellt, ob ein Benutzer ein legitimer Benutzer ist. Die am häufigsten verwendete Methode zur einfachen Identitätsauthentifizierung besteht darin, dass das System ermittelt, ob die Identität des Benutzers korrekt ist, indem es den vom Benutzer eingegebenen Benutzernamen und das Kennwort überprüft, um festzustellen, ob sie mit dem im System gespeicherten Benutzernamen und Kennwort des Benutzers übereinstimmen. Bei Systemen, die Fingerabdrücke verwenden, und anderen Systemen müssen Sie Ihren Fingerabdruck vorzeigen; bei Kartenlesesystemen wie Hardwareschlüsseln müssen Sie Ihre Karte durchziehen.

1.3. Was ist eine Autorisierung?

Die Autorisierung, also die Zugriffskontrolle, steuert, wer auf welche Ressourcen zugreifen kann. Nach der Identitätsauthentifizierung müssen dem Subjekt Berechtigungen für den Zugriff auf Systemressourcen zugewiesen werden. Auf einige Ressourcen kann ohne Berechtigungen nicht zugegriffen werden.

Es ist relativ mühsam, die Authentifizierung und Autorisierung selbst durchzuführen. Sie können ein Drittanbieter-Framework verwenden, um die Bindung von Authentifizierung und Berechtigungen abzuschließen.

Verwenden Sie weitere Frameworks von Drittanbietern – Shiro und Springsecurity Security Framework. Shiro ist relativ einfach zu bedienen. Und es kann allein verwendet oder in das Federgerüst integriert werden.

2. Was ist Shiro?

Apache Shiro ist ein leistungsstarkes und benutzerfreundliches Java-Sicherheitsframework, das Authentifizierung, Autorisierung, Verschlüsselung, Sitzungsverwaltung und andere Funktionen bietet. Für jede Anwendung kann Shiro umfassende Sicherheitsverwaltungsdienste bereitstellen. Und im Vergleich zu anderen Sicherheits-Frameworks ist Spring Security und Shiro viel einfacher.

2.1. Gründe für die Verwendung von Shiro

Shiro macht es sehr einfach, ausreichend gute Anwendungen zu entwickeln, die nicht nur in der JavaSE-Umgebung, sondern auch in der JavaEE-Umgebung verwendet werden können. Shiro kann uns bei folgenden Aufgaben helfen: Authentifizierung, Autorisierung, Verschlüsselung, Sitzungsverwaltung, Integration mit dem Web, Caching usw.

3. Shiros Kernkomponenten

 3.1、Betreff

Betreff: Externe Anwendungen interagieren mit dem Betreff. Der Betreff verwendet den Benutzer als Betreff des aktuellen Vorgangs. Bei diesem Betreff kann es sich um einen Benutzer handeln, der über einen Browser oder ein laufendes Programm eine Anfrage stellt. Der Betreff ist eine Schnittstelle in Shiro. Die Schnittstelle definiert viele Methoden im Zusammenhang mit der Authentifizierung und Autorisierung. Externe Programme führen die Authentifizierung und Autorisierung über den Betreff durch, und der Betreff führt die Authentifizierung und Autorisierung über den SecurityManager-Sicherheitsmanager durch.

3.2, Sicherheitsmanager

Der SecurityManager-Berechtigungsmanager, der den Kern von Shiro bildet, ist für die Sicherheitsverwaltung aller Themen verantwortlich. Betreffauthentifizierung, Autorisierung usw. können über SecurityManager durchgeführt werden . SecurityManager führt die Authentifizierung über Authenticator, die Autorisierung über Authorizer und die Sitzungsverwaltung über SessionManager durch. SecurityManager ist eine Schnittstelle, die die drei Schnittstellen Authenticator, Authorizer und SessionManager erbt.

3.3. Authentifikator (Authenticator)

Authenticator ist der Authentifikator, der die Identität des Benutzers beim Anmelden authentifiziert.

3.4. Autorisierung

Autorisierer, der Benutzer wird über den Authentifikator authentifiziert. Beim Zugriff auf die Funktion muss der Autorisierer verwendet werden, um festzustellen, ob der Benutzer über die Betriebsberechtigung für diese Funktion verfügt.

3.5. Realm (Datenbank lesen + Authentifizierungsfunktion + Autorisierungsfunktion implementieren)

Das Realm-Feld entspricht der Datenquelle der Datenquelle. SecurityManager muss Benutzerberechtigungsdaten über Realm für die Sicherheitsauthentifizierung abrufen.
Beispiel:
    Wenn sich die Benutzeridentitätsdaten in der Datenbank befinden, muss Realm die Benutzeridentitätsinformationen aus der Datenbank abrufen.
Hinweis:
    Unter Realm versteht man nicht nur das Abrufen von Daten aus der Datenquelle. Im Realm gibt es auch Code für die Authentifizierung und Autorisierungsüberprüfung.

3.6、SessionManager

SessionManager-Sitzungsverwaltung, das Shiro-Framework definiert eine Reihe von Sitzungsverwaltungen, die nicht auf der Sitzung des Webcontainers basieren, sodass Shiro in Nicht-Webanwendungen verwendet werden kann und auch die Sitzungen verteilter Anwendungen zentral verwalten kann. Diese Funktion kann es möglich machen, sich anzumelden.

3.7、SessionDAO

SessionDAO ist ein Sitzungs-Dao, bei dem es sich um eine Reihe von Schnittstellen für Sitzungsoperationen handelt
. Beispielsweise
    kann die Sitzung über JDBC in der Datenbank gespeichert werden.
    Die Sitzung kann auch im Redis-Cache-Server gespeichert werden.

3.8、CacheManager

Die CacheManager-Cache-Verwaltung speichert Benutzerberechtigungsdaten im Cache, was die Leistung verbessern kann.

3.9、Kryptographie

Für die kryptografische Passwortverwaltung bietet Shiro eine Reihe von Verschlüsselungs-/Entschlüsselungskomponenten, um die Entwicklung zu erleichtern. Es bietet beispielsweise häufig verwendete Hashing-, MD5- und andere Funktionen.

4. Verwenden Sie Shiro, um die Authentifizierung und Autorisierung abzuschließen

4.1. Verwenden Sie Shiro, um die Authentifizierung abzuschließen

Die hier verwendeten Benutzerinformationen sind in der Datei --ini [tatsächliche Entwicklungsspeicherdatenbank] vorhanden.

4.1.1. Erstellen Sie ein normales Maven-Projekt

Einführung von Shiro-Abhängigkeiten:

    <dependencies>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.7.0</version>
        </dependency>
    </dependencies>

4.1.2. Erstellen Sie eine INI-Datei

# [Benutzer] Definieren Sie Benutzerinformationen – wenn der Tabellenname Benutzer
[Benutzer] lautet
. # =Die linke Seite zeigt den Benutzernamen an =Die rechte Seite zeigt das Passwort an
zhangsan=123456
lisi=123456

4.1.3. Testcode schreiben

package demo01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

/**
 * @program:shiro-framework
 * @description:
 * @author: 
 * @create: 2023-07-05 11:03
 **/
public class Test {
    public static void main(String[] args) {
        //创建一个SecurityManager对象
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
        //设置securityManager使用的realm
        IniRealm realm=new IniRealm("classpath:shiro.ini");
        securityManager.setRealm(realm);
        //把SecurityManager放入上下文中。使其有效
        SecurityUtils.setSecurityManager(securityManager);
        //获取Subject对象
        Subject subject = SecurityUtils.getSubject();
        //shiro把用户输入的账号和密码封装到UsernamePasswordToken类中。
        UsernamePasswordToken token=new UsernamePasswordToken("zhangsan","1234567");
        try {
            //调用subject中的认证方法。
            subject.login(token);
            System.out.println("登录成功");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("登录失败");
        }

    }
}

4.1.4. Flussdiagramm des Zertifizierungsprozesses

 4.2. Verwenden Sie Shiro, um die Autorisierung abzuschließen

Hinweis: Berechtigungen können erst nach der Authentifizierung beurteilt werden.

4.2.1. INI-Datei ändern

# [users]定义用户的信息--当对于表名叫users
[users]
# =左边表示用户名  =右边表示密码和对应的角色
zhangsan=123456,admin
lisi=123456,role1,role2
#[roles]定义角色信息以及该角色具有的权限信息。
[roles]
#=左边:角色名  右边: 该角色具有的权限
admin=user:query,user:insert,user:delete,user:update
role1=user:query,user:export
role2=user:delete,user:update

4.2.2. Testcode ändern

package demo01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

import java.util.Arrays;

/**
 * @program:shiro-framework
 * @description:
 * @author:
 * @create: 2023-07-05 11:03
 **/
public class Test02 {
    public static void main(String[] args) {
        //1.获取SecurityManager对象
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
        //2.为SecurityManager指定操作数据源的对象realm
        IniRealm realm=new IniRealm("classpath:shiro.ini");
        securityManager.setRealm(realm);

        //3.把securityManager放入上下文 使其生效
        SecurityUtils.setSecurityManager(securityManager);



        //4.获取Subject
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token=new UsernamePasswordToken("lisi","123456");
        try {
            subject.login(token);
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("登录失败");
        }
        //subject.logout();//退出

        System.out.println("==============================权限校验=======================================");
        boolean permitted = subject.isPermitted("user:query");
        System.out.println("判断当前用户是否具有user:query的权限:"+permitted);
        boolean[] permitted1 = subject.isPermitted("user:query", "user:delete", "user:export");
        System.out.println("判断当前用户具有的权限:"+ Arrays.toString(permitted1));
        boolean permittedAll = subject.isPermittedAll("user:query", "user:update", "user:insert");
        System.out.println("是否同时具有上面的权限:"+permittedAll);

    }
}

4.2.3. Flussdiagramm des Autorisierungsprozesses

Ich denke du magst

Origin blog.csdn.net/weixin_54065960/article/details/131609651
Empfohlen
Rangfolge