Heim >Java >javaLernprogramm >So integrieren Sie Shiro in SpringBoot

So integrieren Sie Shiro in SpringBoot

WBOY
WBOYnach vorne
2023-05-17 23:01:101130Durchsuche

Native Integration

Projekt erstellen

Um ein Spring Boot-Projekt zu erstellen, fügen Sie einfach Webabhängigkeiten hinzu:

So integrieren Sie Shiro in SpringBoot

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:

So integrieren Sie Shiro in SpringBoot

Dann wird die /doLogin-Schnittstelle aufgerufen, um die Anmeldung abzuschließen:

So integrieren Sie Shiro in SpringBoot

Besuchen Sie die /hello-Schnittstelle erneut und Sie können erfolgreich darauf zugreifen:

So integrieren Sie Shiro in SpringBoot

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen