Heim >Java >javaLernprogramm >So integrieren Sie Shiro in SpringBoot
Native Integration
Projekt erstellen
Um ein Spring Boot-Projekt zu erstellen, fügen Sie einfach Webabhängigkeiten hinzu:
Nachdem das Projekt erfolgreich erstellt wurde, fügen Sie Shiro-bezogene Abhängigkeiten hinzu und vervollständigen Sie die pom.xml-Datei. Die Abhängigkeiten sind wie folgt:
<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>
Realm erstellen
Als nächstes passen wir die Kernkomponente Realm an:
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()); } }
Implementieren Sie einfach einen einfachen Authentifizierungsvorgang im Realm ohne Autorisierung. Die spezifische Schreibmethode der Autorisierung ist die gleiche wie bei Shiro in SSM muss ins Detail gehen. Die Authentifizierung bedeutet hier, dass der Benutzername javaboy und das Benutzerkennwort 123 lauten muss. Wenn diese Bedingungen erfüllt sind, können Sie sich erfolgreich anmelden!
Shiro konfigurieren
Als nächstes konfigurieren Sie 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>
Konfigurieren Sie Shiro hier. Konfigurieren Sie hauptsächlich 3 Beans:
Zuerst müssen Sie eine Instanz von Realm bereitstellen.
Bei der Konfiguration von Realm müssen Sie es im SecurityManager festlegen.
Konfigurieren Sie eine ShiroFilterFactoryBean und geben Sie Pfadabfangregeln usw. in ShiroFilterFactoryBean an.
Anmelde- und Testschnittstelle konfigurieren.
Davon verfügt ShiroFilterFactoryBean über etwas mehr Konfigurationen, und die Konfigurationsbedeutung lautet wie folgt:
setSecurityManager bedeutet die Angabe des SecurityManagers.
setLoginUrl stellt die angegebene Anmeldeseite dar.
setSuccessUrl gibt die angegebene Anmeldeerfolgsseite an.
Die Pfadabfangregeln werden in der nächsten Karte konfiguriert. Beachten Sie, dass sie in Ordnung sein müssen.
Nachdem diese Dinge konfiguriert sind, konfigurieren Sie als nächstes den Login-Controller:
@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!"; } }
Greifen Sie beim Testen zuerst auf die /hello-Schnittstelle zu. Da Sie nicht angemeldet sind, wird automatisch zur /login-Schnittstelle gesprungen:
Dann wird die /doLogin-Schnittstelle aufgerufen, um die Anmeldung abzuschließen:
Besuchen Sie die /hello-Schnittstelle erneut und Sie können erfolgreich darauf zugreifen:
Shiro Starter verwenden
Die obige Konfigurationsmethode entspricht tatsächlich der XML-Konfiguration in SSM Holen Sie sich Spring Boot und schreiben Sie es in Java-Code um. Zusätzlich zu dieser Methode können wir auch direkt den von Shiro offiziell bereitgestellten Starter verwenden.
Erstellen Sie das Projekt wie oben.
Fügen Sie nach erfolgreicher Erstellung shiro-spring-boot-web-starter
,这个依赖可以代替之前的 shiro-web
和 shiro-spring
zwei Abhängigkeiten hinzu. Die pom.xml-Datei lautet wie folgt:
<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>
Realm erstellen
Der Realm hier ist derselbe wie zuvor, ich habe gewonnen Ich gehe nicht auf Details ein.
Konfigurieren Sie die Basisinformationen von Shiro
Konfigurieren Sie als Nächstes die Basisinformationen von Shiro in application.properties:
shiro.sessionManager.sessionIdCookieEnabled=true shiro.sessionManager.sessionIdUrlRewritingEnabled=true shiro.unauthorizedUrl=/unauthorizedurl shiro.web.enabled=true shiro.successUrl=/index shiro.loginUrl=/login
Konfigurationserklärung:
Die erste Zeile gibt an, ob die Platzierung der Sitzungs-ID in Cookies zulässig ist
Die zweite Zeile gibt an, ob die Sitzungs-ID in den URL-Adressblock eingefügt werden darf. Die dritte Zeile gibt den Standardsprungpfad an, wenn auf nicht autorisierte Seiten zugegriffen werden soll. Die fünfte Zeile gibt an, dass Shiro aktiviert ist . Die Sprungseite zeigt die erfolgreiche Anmeldung an. Die sechste Zeile zeigt die Anmeldeseite an. ShiroConfig konfigurieren
Das obige ist der detaillierte Inhalt vonSo integrieren Sie Shiro in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!