Table des matières
Contenu de la question
Solution
Maison Java Spring Security obtient des informations sur les utilisateurs authentifiés et non authentifiés dans les services restants

Spring Security obtient des informations sur les utilisateurs authentifiés et non authentifiés dans les services restants

Feb 08, 2024 pm 11:00 PM
spring security

La sécurité est une considération importante lors du développement d'applications Web. Pour protéger les données des utilisateurs et empêcher tout accès non autorisé, nous devons utiliser un mécanisme d'authentification et d'autorisation fiable. Spring Security est un framework de sécurité puissant et largement utilisé qui fournit un ensemble complet de solutions pour protéger nos applications. Dans cet article, nous explorerons comment obtenir des informations utilisateur pour les utilisateurs authentifiés et non authentifiés dans Spring Security. L'éditeur PHP Baicao vous montrera comment utiliser les fonctions de Spring Security pour obtenir des informations utilisateur et partager des informations utilisateur entre différents services. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des informations détaillées sur Spring Security et vous aidera à améliorer la sécurité de votre application.

Contenu de la question

J'ai un service Spring Rest et je souhaite l'utiliser à la fois pour les utilisateurs authentifiés et non authentifiés. Si l'utilisateur est authentifié, je souhaite obtenir les informations utilisateur de securitycontextholder.getcontext().getauthentication().

  • Si j'utilise .antmatchers("/app/rest/question/useroperation/list/**").permitall() Dans la configuration ouath2 comme indiqué ci-dessous, je peux alors obtenir les informations utilisateur Les utilisateurs authentifiés, mais les utilisateurs non authentifiés, obtiennent une erreur 401.
  • Si je .antmatchers("/app/rest/question/useroperation/list/**").permitall() et ignorer l'URL dans Websecurity web.ignoring()..antmatchers("/app/rest/question/useroperation/list/**") Dans securityconfiguration comme ci-dessous, tous les utilisateurs peuvent appeler service mais je ne parviens pas à obtenir les informations utilisateur à partir du contexte de sécurité.

Comment configurer ma sécurité Spring pour appeler l'URL des utilisateurs authentifiés et non authentifiés et obtenir les informations utilisateur du contexte de sécurité lorsque l'utilisateur se connecte.

@configuration
@enableresourceserver
protected static class resourceserverconfiguration extends resourceserverconfigureradapter {

    @inject
    private http401unauthorizedentrypoint authenticationentrypoint;

    @inject
    private ajaxlogoutsuccesshandler ajaxlogoutsuccesshandler;

    @override
    public void configure(httpsecurity http) throws exception {
        http
                .exceptionhandling()
                .authenticationentrypoint(authenticationentrypoint)
                .and()
                .logout()
                .logouturl("/app/logout")
                .logoutsuccesshandler(ajaxlogoutsuccesshandler)
                .and()
                .csrf()
                .requirecsrfprotectionmatcher(new antpathrequestmatcher("/oauth/authorize"))
                .disable()
                .headers()
                .frameoptions().disable()
                .sessionmanagement()
                .sessioncreationpolicy(sessioncreationpolicy.stateless)
                .and()
                .authorizerequests()
                .antmatchers("/views/**").permitall()
                .antmatchers("/app/rest/authenticate").permitall()
                .antmatchers("/app/rest/register").permitall()
                .antmatchers("/app/rest/question/useroperation/list/**").permitall()
                .antmatchers("/app/rest/question/useroperation/comment/**").authenticated()
                .antmatchers("/app/rest/question/useroperation/answer/**").authenticated()
                .antmatchers("/app/rest/question/definition/**").hasanyauthority(authoritiesconstants.admin)
                .antmatchers("/app/rest/logs/**").hasanyauthority(authoritiesconstants.admin)
                .antmatchers("/app/**").authenticated()
                .antmatchers("/websocket/tracker").hasauthority(authoritiesconstants.admin)
                .antmatchers("/websocket/**").permitall()
                .antmatchers("/metrics/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/health/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/dump/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/shutdown/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/beans/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/info/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/autoconfig/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/env/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/api-docs/**").hasauthority(authoritiesconstants.admin)
                .antmatchers("/protected/**").authenticated();

    }

}
Copier après la connexion

Configuration de sécurité

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


    @Inject
    private UserDetailsService userDetailsService;


    @Bean
    public PasswordEncoder passwordEncoder() {
        return new StandardPasswordEncoder();
    }

    @Inject
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .userDetailsService(userDetailsService)
                .passwordEncoder(passwordEncoder());
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
            .antMatchers("/bower_components/**")
            .antMatchers("/fonts/**")
            .antMatchers("/images/**")
            .antMatchers("/scripts/**")
            .antMatchers("/styles/**")
            .antMatchers("/views/**")
            .antMatchers("/i18n/**")
            .antMatchers("/swagger-ui/**")
            .antMatchers("/app/rest/register")
            .antMatchers("/app/rest/activate")
            .antMatchers("/app/rest/question/useroperation/list/**")
            .antMatchers("/console/**");
    }


    @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
    private static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration {
        @Override
        protected MethodSecurityExpressionHandler createExpressionHandler() {
            return new OAuth2MethodSecurityExpressionHandler();
        }

    }
}
Copier après la connexion

Solution

permitall() 仍然需要 authentication 对象出现在 securitycontext dans.

Pour les utilisateurs non-oauth, cela peut être réalisé en activant l'accès anonyme :

@override
public void configure(httpsecurity http) throws exception {
   http
//some configuration
     .and()
        .anonymous() //allow anonymous access
     .and()
        .authorizerequests()
           .antmatchers("/views/**").permitall()
//other security settings
Copier après la connexion

L'accès anonyme ajoutera un filtre supplémentaire : anonymousauthenticationfilter到填充anonymousauthenticationtoken作为身份验证信息的过滤器链,以防securitycontext中没有authentication objet

J'ai cette configuration de sécurité pour vérifier l'utilisateur via /public/authphpcnendcphp Chinois :

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().authorizeRequests()
           .antMatchers("/api/skills/**", "/api/profile/**", "/api/info/**").authenticated()
           .antMatchers("/api/**").hasAuthority(Role.ROLE_ADMIN.getAuthority())
           .antMatchers("/public/auth").permitAll()
           .and().httpBasic()
           .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
           .and().csrf().disable();
}

@GetMapping(value = "/public/auth")
private ResponseEntity<User> getAuthUser(@AuthenticationPrincipal AuthUser authUser) {
    return authUser == null ? 
               ResponseEntity.notFound().build() :
               ResponseEntity.ok(authUser.getUser());
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Spring Security 6 : cors() est obsolète et marqué pour suppression Spring Security 6 : cors() est obsolète et marqué pour suppression Feb 10, 2024 pm 11:45 PM

我有下面的代码:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java Sep 22, 2023 am 08:49 AM

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecuritySAML Introduction : Avec le développement rapide d'Internet, de plus en plus d'applications sont développées. Dans ces applications, la connexion des utilisateurs est l'une des fonctionnalités les plus courantes. Cependant, pour les applications de niveau entreprise, les utilisateurs doivent se connecter à plusieurs systèmes, ce qui entraînera une très mauvaise expérience de connexion. Afin de résoudre ce problème, le système d'authentification unique (SingleSign-On, appelé SSO) a vu le jour. simple

GO authentifier le jeton d'accès (keycloak) GO authentifier le jeton d'accès (keycloak) Feb 09, 2024 am 09:30 AM

J'essaie d'implémenter la validation du jeton d'accès à l'aide de GO. Mais les exemples que j'ai vus en ligne semblent simplement utiliser TOKEN_SECRET pour le vérifier. Mais je suis habitué à programmer dans Javaspring et je n'ai pas besoin d'utiliser TOKEN_SECRET. Je fournis simplement le jwk-set-uri et il vérifie la validité (filtres de sécurité automatique, etc.) et je sais qu'il parle au serveur oauth et effectue cette validation. N'y a-t-il pas de bibliothèque dans Go pour vérifier si le token est valide en faisant une requête au serveur oauth ? Je sais que je peux le faire manuellement en faisant une requête au point de terminaison userinfo du serveur oauth : http://localh

Guide d'utilisation du cadre de contrôle des autorisations Spring Security Guide d'utilisation du cadre de contrôle des autorisations Spring Security Feb 18, 2024 pm 05:00 PM

Dans les systèmes de gestion back-end, le contrôle des autorisations d'accès est généralement requis pour limiter la capacité des différents utilisateurs à accéder aux interfaces. Si un utilisateur ne dispose pas d'autorisations spécifiques, il ne peut pas accéder à certaines interfaces. Cet article utilisera le projet waynboot-mall comme exemple pour présenter comment les systèmes de gestion back-end courants introduisent le cadre de contrôle des autorisations SpringSecurity. Le schéma est le suivant : Adresse du projet waynboot-mall : https://github.com/wayn111/waynboot-mall 1. Qu'est-ce que SpringSecurity SpringSecurity est un projet open source basé sur le framework Spring, visant à fournir une sécurité puissante et flexible ? pour les applications Java.

Comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security OAuth2 Comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security OAuth2 Sep 20, 2023 pm 01:06 PM

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecurityOAuth2 Introduction : Avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications nécessitent que les utilisateurs se connectent, mais les utilisateurs ne veulent pas se souvenir de chaque site Web ou application. Un numéro de compte et un mot de passe. Le système d'authentification unique (SingleSign-On, appelé SSO) peut résoudre ce problème, permettant aux utilisateurs d'accéder à plusieurs sites Web et applications sans authentification répétée après s'être connectés une fois. Cet article présentera

Spring Security obtient des informations sur les utilisateurs authentifiés et non authentifiés dans les services restants Spring Security obtient des informations sur les utilisateurs authentifiés et non authentifiés dans les services restants Feb 08, 2024 pm 11:00 PM

J'ai un service Springrest et je souhaite l'utiliser à la fois pour les utilisateurs authentifiés et non authentifiés. Si l'utilisateur est authentifié, je souhaite obtenir les informations utilisateur de securitycontextholder.getcontext().getauthentication(). Si j'utilise .antmatchers("/app/rest/question/useroperation/list/**").permitall() dans la configuration ouath2 comme indiqué ci-dessous, je peux alors obtenir les informations utilisateur de l'utilisateur authentifié, mais pas les utilisateurs authentifiés. apparaîtra 40

Le livre de recettes de l'API Java RESTful : créer le service parfait pour chaque application Le livre de recettes de l'API Java RESTful : créer le service parfait pour chaque application Mar 27, 2024 pm 12:11 PM

Introduction Dans le monde interconnecté d'aujourd'hui, les API RESTful sont devenues un mécanisme clé de communication entre les applications. Avec Java, un langage de programmation puissant, vous pouvez créer des API RESTful efficaces, évolutives et bien entretenues. Chapitre 1 : Principes de base de RESTfulAPI et meilleures pratiques de l'architecture RESTful Méthodes HTTP, codes d'état et en-têtes de réponse Formats de données tels que JSON et XML Chapitre 2 : Conception et modélisation de RESTfulAPI Principes de conception de RESTfulAPI Modélisation des ressources et conception d'URI Contrôle de version et HATEOAS Chapitre 3 : Utilisation SpringBoot pour créer l'API RESTful Introduction à SpringBoot et démarrage de la création et

Comment le framework vue et le framework springboot interagissent-ils avec le front-end et le back-end ? Comment le framework vue et le framework springboot interagissent-ils avec le front-end et le back-end ? Apr 06, 2024 am 01:51 AM

Vue.js et Spring Boot interagissent via : API RESTful : Vue.js utilise Axios pour envoyer des requêtes HTTP asynchrones, et Spring Boot fournit une implémentation d'API RESTful. Transmission de données : les données sont transmises via des requêtes et des réponses, telles que le corps de la requête ou les paramètres de requête. Méthode de requête : les méthodes de requête HTTP telles que GET, POST, PUT et DELETE sont utilisées pour spécifier l'opération. Routage : l'annotation Spring Boot @RequestMapping définit le routage du contrôleur et Vue.js utilise Vue Router pour définir le routage de l'interface. Gestion de l'état : Vu