Inhaltsverzeichnis
Vorbereitung
Effektanzeige
Implementierung: oauth3 hat insgesamt vier Modi Erklären Sie sie hier. Suchen Sie online und Sie werden dasselbe finden, da wir jetzt nur die Durchführung von Einwegtransaktionen in Betracht ziehen, sodass der Passwortmodus verwendet wird.
Heim Java javaLernprogramm Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

May 11, 2023 am 10:28 AM
spring springboot security

Vorbereitung

spring-boot: 2.1.4.RELEASE

spring-security-oauth3: 2.3.3.RELEASE (Wenn Sie den Quellcode verwenden möchten, ändern Sie diese Versionsnummer nicht nach Belieben, da die Schreibmethode dies ist anders als ab 2.4)

mysql: 5.7

Effektanzeige

Die Front-End-Seite wird vorerst nicht zum Andocken verwendet eine Seitenanzeige

1. Greifen Sie auf die offene Schnittstelle http://localhost:7000/open/hello zu

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

2. Greifen Sie auf die geschützte Schnittstelle http://localhost:7000/admin/user/info zu

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

3. Holen Sie sich das Token, nachdem Sie sich angemeldet haben. Nach dem Zugriff wurden die aktuell angemeldeten Benutzerinformationen erfolgreich zurückgegeben.

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

Implementierung: oauth3 hat insgesamt vier Modi Erklären Sie sie hier. Suchen Sie online und Sie werden dasselbe finden, da wir jetzt nur die Durchführung von Einwegtransaktionen in Betracht ziehen, sodass der Passwortmodus verwendet wird.

Es wird später einen Artikel über SpringCloud + Oauth3 geben, Gateway-Authentifizierung

Lassen Sie uns über einige Punkte sprechen

1. Dynamische Berechtigungen für die Interceptor-Konfiguration

Erstellen Sie eine neue MySecurityFilter-Klasse, erben Sie AbstractSecurityInterceptor und implementieren Sie die Filterschnittstelle

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?Initialisierung, benutzerdefinierter Zugriffsentscheidungsmanager

@PostConstruct
 public void init(){
        super.setAuthenticationManager(authenticationManager);
        super.setAccessDecisionManager(myAccessDecisionManager);
  }
Nach dem Login kopieren

Benutzerdefinierter Filter ruft sichere Metadatenquelle auf

@Override
public SecurityMetadataSource obtainSecurityMetadataSource() {
    return this.mySecurityMetadataSource;
}
Nach dem Login kopieren

Werfen wir zunächst einen Blick auf den Kerncode des benutzerdefinierten Filters, der sichere Metadatenquelle aufruft

Der folgende Code wird verwendet, um die Berechtigungen (Rollen) zu erhalten ) erforderlich, damit die aktuelle Anfrage eingeht

rrree

Werfen wir einen Blick auf den Kerncode des benutzerdefinierten Zugriffsentscheidungsmanagers. Dieser Code wird hauptsächlich verwendet, um den aktuell angemeldeten Benutzer zu bestimmen (die Rolle, die der aktuell angemeldete Benutzer besitzt). 2. Die benutzerdefinierte Authentifizierungsausnahme gibt ein gemeinsames Ergebnis zurück. Warum ist dies nicht erforderlich? -Ende, um den durch den Authentifizierungsfehler zurückgegebenen Inhalt zu verstehen. Er kann nicht einheitlich interpretiert werden. Schauen wir uns also ohne weiteres die Rückgabesituation ohne Konfiguration und Konfiguration an. (1) Vor der Anpassung, wenn Sie kein Token mitbringen Um auf die geschützte API-Schnittstelle zuzugreifen, sieht das zurückgegebene Ergebnis so aus

(2) Legen wir fest, dass nach der Rückkehr der Authentifizierungsschnittstelle zur Schnittstelle Folgendes angezeigt wird: Ist es für uns besser, den Benutzer zu verarbeiten und aufzufordern?

Okay, schauen wir uns an, wohin wir gehen sollen.

Unser Ressourcenserver OautyResourceConfig schreibt den folgenden Teil des Codes neu, um das von der Authentifizierungsausnahme zurückgegebene Ergebnis anzupassen. Sie können auf diesen https verweisen: //www.yisu.com/article/131668.htmWie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

/**
     * 获得当前请求所需要的角色
     * @param object
     * @return
     * @throws IllegalArgumentException
     */
    @Override
    public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
        String requestUrl = ((FilterInvocation) object).getRequestUrl();

        if (IS_CHANGE_SECURITY) {
            loadResourceDefine();
        }
        if (requestUrl.indexOf("?") > -1) {
            requestUrl = requestUrl.substring(0, requestUrl.indexOf("?"));
        }
        UrlPathMatcher matcher = new UrlPathMatcher();
        List<Object> list = new ArrayList<>();  //无需权限的,直接返回
        list.add("/oauth/**");
        list.add("/open/**");
        if(matcher.pathsMatchesUrl(list,requestUrl))
            return null;

        Set<String> roleNames = new HashSet();
        for (Resc resc: resources) {
            String rescUrl = resc.getResc_url();
            if (matcher.pathMatchesUrl(rescUrl, requestUrl)) {
                if(resc.getParent_resc_id() != null && resc.getParent_resc_id().intValue() == 1){   //默认权限的则只要登录了,无需权限匹配都可访问
                    roleNames = new HashSet();
                    break;
                }
                Map map = new HashMap();
                map.put("resc_id", resc.getResc_id());
                // 获取能访问该资源的所有权限(角色)
                List<RoleRescDTO> roles = roleRescMapper.findAll(map);
                for (RoleRescDTO rr : roles)
                    roleNames.add(rr.getRole_name());
            }
        }

        Set<ConfigAttribute> configAttributes = new HashSet();
        for(String roleName:roleNames)
            configAttributes.add(new SecurityConfig(roleName));

        log.debug("【所需的权限(角色)】:" + configAttributes);

        return configAttributes;
    }
Nach dem Login kopieren

3. Holen Sie sich den aktuell angemeldeten BenutzerWie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

Der erste Schritt: Verwenden Sie JWT, um die Benutzerinformationen zu übertragen, und analysieren Sie sie dann, nachdem Sie das Token erhalten haben

Noch keine Erklärung

Die zweite: Schreiben Sie einen SecurityUser, um die UserDetails-Schnittstelle zu implementieren (dieses Projekt wird in verwendet)

Die ursprüngliche UserDetails-Schnittstelle hat nur Benutzernamen und Passwort. Hier fügen wir den Benutzer in unserem System hinzu

@Override
    public void decide(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException {
        if(configAttributes == null){   //属于白名单的,不需要权限
            return;
        }
        Iterator<ConfigAttribute> iterator = configAttributes.iterator();
        while (iterator.hasNext()){
            ConfigAttribute configAttribute = iterator.next();
            String needPermission = configAttribute.getAttribute();
            for (GrantedAuthority ga: authentication.getAuthorities()) {
                if(needPermission.equals(ga.getAuthority())){   //有权限,可访问
                    return;
                }
            }
        }
        throw new AccessDeniedException("没有权限访问");

    }
Nach dem Login kopieren

In BaseController erbt jeder Controller dies und schreibt es in die getUser()-Methode. Solange der Benutzer ein Token für den Zugriff mitbringt, können wir die Informationen des aktuell angemeldeten Benutzers direkt abrufenWie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

@Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.authenticationEntryPoint(authenticationEntryPoint)    //token失效或没携带token时
                .accessDeniedHandler(requestAccessDeniedHandler);   //权限不足时
    }
Nach dem Login kopieren

Also nachdem sich der Benutzer angemeldet hat Wenn wir erfolgreich sind, wie wir die Rollensammlung des Benutzers erhalten usw., müssen wir hier die UserDetailsService-Schnittstelle implementieren Sie müssen nur unsere Methode im loginService implementieren und anhand unserer tatsächlichen Geschäftsverarbeitung beurteilen, ob der Benutzer existiert usw.

protected User user;
    public SecurityUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }
Nach dem Login kopieren
Die Datenbankdatei ist hier

Wie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?

Das obige ist der detaillierte Inhalt vonWie integriert SpringBoot SpringSecurityOauth2, um dynamische Berechtigungsprobleme für die Authentifizierung zu implementieren?. 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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen 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)

17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben 17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Anwendung des JUnit-Unit-Test-Frameworks in Spring-Projekten Anwendung des JUnit-Unit-Test-Frameworks in Spring-Projekten Apr 18, 2024 pm 04:54 PM

JUnit ist ein weit verbreitetes Java-Unit-Test-Framework in Spring-Projekten und kann mit den folgenden Schritten angewendet werden: JUnit-Abhängigkeit hinzufügen: org.junit.jupiterjunit-jupiter5.8.1test Testfälle schreiben: Verwenden Sie @ExtendWith(SpringExtension.class), um die Erweiterung zu aktivieren. Verwenden Sie @Autowired-Inject-Beans, verwenden Sie @BeforeEach und @AfterEach zum Vorbereiten und Bereinigen und markieren Sie Testmethoden mit @Test.

Was sind die Frühlingsdesignmuster? Was sind die Frühlingsdesignmuster? Dec 29, 2023 pm 03:42 PM

Zu den Frühlingsentwurfsmustern gehören: 1. Abhängigkeitsinjektion und Kontrollinversion; 3. Vorlagenmuster; 6. Strategiemuster und Adaptermuster; Ausführliche Einführung: 1. Abhängigkeitsinjektion und Kontrollumkehr: Diese beiden Entwurfsmuster bilden den Kern des Spring-Frameworks. Durch die Abhängigkeitsinjektion ist Spring für die Verwaltung und Injektion von Abhängigkeiten zwischen Komponenten verantwortlich, wodurch die Kopplung zwischen Komponenten verringert wird. Die Umkehrung der Kontrolle bezieht sich auf die Übergabe der Objekterstellung und des Abhängigkeitsmanagements an den Spring-Container usw.

See all articles