Maison >Java >javaDidacticiel >Comment intégrer Shiro dans SpringBoot
Intégration native
Créer un projet
Pour créer un projet Spring Boot, ajoutez simplement des dépendances Web :
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 :
.Ensuite, appelez l'interface /doLogin pour terminer la connexion :
Visitez à nouveau l'interface /hello, vous pouvez accéder avec succès :
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!