Maison >Java >javaDidacticiel >Comment intégrer Shiro dans SpringBoot

Comment intégrer Shiro dans SpringBoot

WBOY
WBOYavant
2023-05-17 23:01:101127parcourir

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>

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());
  }
}

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>

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!";
  }
}

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>

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

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;
      }
    }

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer