Maison > Java > javaDidacticiel > le corps du texte

Comment intégrer Shiro dans SpringBoot

WBOY
Libérer: 2023-05-17 23:01:10
avant
1038 Les gens l'ont consulté

Intégration native

Créer un projet

Pour créer un projet Spring Boot, ajoutez simplement des dépendances Web :

Comment intégrer Shiro dans SpringBoot

Une fois le projet créé avec succès, ajoutez les dépendances liées à Shiro, complétez le fichier pom.xml Les dépendances sont comme suit :

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-web</artifactid>
    <version>1.4.0</version>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-spring</artifactid>
    <version>1.4.0</version>
  </dependency>
</dependencies>
Copier après la connexion

Créer un royaume

Ensuite, nous personnalisons le composant principal Realm :

public class MyRealm extends AuthorizingRealm {
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    return null;
  }
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    String username = (String) token.getPrincipal();
    if (!"javaboy".equals(username)) {
      throw new UnknownAccountException("账户不存在!");
    }
    return new SimpleAuthenticationInfo(username, "123", getName());
  }
}
Copier après la connexion

Implémentez simplement une opération d'authentification simple dans Realm sans autorisation. La méthode d'écriture spécifique d'autorisation est la même que celle de Shiro dans SSM Idem, non. il faut entrer dans les détails. L'authentification signifie ici que le nom d'utilisateur doit être javaboy et le mot de passe utilisateur doit être 123. Si ces conditions sont remplies, vous pouvez vous connecter avec succès !

Configurez Shiro

Ensuite, configurez Shiro :

@Configuration
public class ShiroConfig {
  @Bean
  MyRealm myRealm() {
    return new MyRealm();
  }
  
  @Bean
  SecurityManager securityManager() {
    DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
    manager.setRealm(myRealm());
    return manager;
  }
  
  @Bean
  ShiroFilterFactoryBean shiroFilterFactoryBean() {
    ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
    bean.setSecurityManager(securityManager());
    bean.setLoginUrl("/login");
    bean.setSuccessUrl("/index");
    bean.setUnauthorizedUrl("/unauthorizedurl");
    Map<string> map = new LinkedHashMap();
    map.put("/doLogin", "anon");
    map.put("/**", "authc");
    bean.setFilterChainDefinitionMap(map);
    return bean;
  }
}</string>
Copier après la connexion

Configurez Shiro ici. Configurez principalement 3 beans :

  • Vous devez d'abord fournir une instance de Realm.

  • Lors de la configuration de Realm, vous devez le définir dans SecurityManager.

  • Configurez un ShiroFilterFactoryBean et spécifiez les règles d'interception de chemin, etc. dans ShiroFilterFactoryBean.

  • Configurez la connexion et l'interface de test.

Parmi eux, ShiroFilterFactoryBean a un peu plus de configurations, et la signification de la configuration est la suivante :

  • setSecurityManager signifie spécifier le SecurityManager.

  • setLoginUrl représente la page de connexion spécifiée.

  • setSuccessUrl indique la page de réussite de connexion spécifiée.

  • Les règles d'interception de chemin sont configurées dans la prochaine Map. Notez qu'elles doivent être dans l'ordre.

Une fois ces éléments configurés, configurez ensuite le contrôleur de connexion :

@RestController
public class LoginController {
  @PostMapping("/doLogin")
  public void doLogin(String username, String password) {
    Subject subject = SecurityUtils.getSubject();
    try {
      subject.login(new UsernamePasswordToken(username, password));
      System.out.println("登录成功!");
    } catch (AuthenticationException e) {
      e.printStackTrace();
      System.out.println("登录失败!");
    }
  }
  @GetMapping("/hello")
  public String hello() {
    return "hello";
  }
  @GetMapping("/login")
  public String login() {
    return "please login!";
  }
}
Copier après la connexion

Lors du test, accédez d'abord à l'interface /hello Puisque vous n'êtes pas connecté, il passera automatiquement à l'interface /login :

Comment intégrer Shiro dans SpringBoot

.

Ensuite, appelez l'interface /doLogin pour terminer la connexion :

Comment intégrer Shiro dans SpringBoot

Visitez à nouveau l'interface /hello, vous pouvez accéder avec succès :

Comment intégrer Shiro dans SpringBoot

Utilisez Shiro Starter

La méthode de configuration ci-dessus est en fait équivalente au XML configuration dans SSM Obtenez Spring Boot et réécrivez-le en code Java En plus de cette méthode, nous pouvons également utiliser directement le Starter officiellement fourni par Shiro.

Créez le projet, comme ci-dessus

Après la création réussie, ajoutez shiro-spring-boot-web-starter ,这个依赖可以代替之前的 shiro-web 和 shiro-spring deux dépendances, le fichier pom.xml est le suivant :

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.apache.shiro</groupid>
    <artifactid>shiro-spring-boot-web-starter</artifactid>
    <version>1.4.0</version>
  </dependency>
</dependencies>
Copier après la connexion

Créer un royaume

Le royaume ici est le même qu'avant, j'ai gagné je n'entre pas dans les détails.

Configurez les informations de base de Shiro

Ensuite, configurez les informations de base de Shiro dans application.properties :

shiro.sessionManager.sessionIdCookieEnabled=true
shiro.sessionManager.sessionIdUrlRewritingEnabled=true
shiro.unauthorizedUrl=/unauthorizedurl
shiro.web.enabled=true
shiro.successUrl=/index
shiro.loginUrl=/login
Copier après la connexion

Explication de la configuration :

  • La première ligne indique s'il faut autoriser le placement de sessionId dans les cookies

  • La deuxième ligne indique s'il est autorisé de mettre le sessionId dans le bloc d'adresse Url. La troisième ligne indique le chemin de saut par défaut lors de l'accès à une page non autorisée. La quatrième ligne indique s'il faut activer Shiro. activé. La page de saut indiquant une connexion réussie

  • La sixième ligne indique la page de connexion

  • Configurer ShiroConfig

    @Configuration
    public class ShiroConfig {
      @Bean
      MyRealm myRealm() {
        return new MyRealm();
      }
      @Bean
      DefaultWebSecurityManager securityManager() {
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        manager.setRealm(myRealm());
        return manager;
      }
      @Bean
      ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
        definition.addPathDefinition("/doLogin", "anon");
        definition.addPathDefinition("/**", "authc");
        return definition;
      }
    }
    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!

Étiquettes associées:
source:yisu.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!