Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

WBOY
WBOYke hadapan
2023-05-17 23:01:101029semak imbas

Integrasi asli

Buat projek

Buat projek Spring Boot, cuma tambah kebergantungan Web:

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

Selepas projek berjaya dibuat, tambahkan kebergantungan berkaitan Shiro Kebergantungan dalam fail pom.xml yang lengkap adalah seperti berikut:

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

Buat Alam

Seterusnya, mari sesuaikan Realm komponen teras:

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());
  }
}
Hanya laksanakan operasi pengesahan mudah dalam Realm tanpa kebenaran Kaedah penulisan khusus untuk kebenaran adalah sama seperti Shiro dalam SSM, jadi saya tidak akan pergi ke butiran. Pengesahan di sini bermakna nama pengguna mestilah javaboy dan kata laluan pengguna mestilah 123. Jika syarat ini dipenuhi, anda boleh log masuk dengan jayanya!

Konfigurasikan Shiro

Seterusnya, konfigurasikan 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>
Konfigurasikan Shiro di sini terutamanya untuk mengkonfigurasi 3 biji:

  • Mula-mula anda perlu menyediakan contoh Realm.

  • Apabila mengkonfigurasi Realm, anda perlu menetapkannya dalam SecurityManager.

  • Konfigurasikan ShiroFilterFactoryBean dan nyatakan peraturan pemintasan laluan, dsb. dalam ShiroFilterFactoryBean.

  • Konfigurasikan log masuk dan antara muka ujian.

Antaranya, ShiroFilterFactoryBean mempunyai lebih sedikit konfigurasi, dan makna konfigurasi adalah seperti berikut:

  • setSecurityManager bermaksud menentukan SecurityManager.

  • setLoginUrl mewakili halaman log masuk yang ditentukan.

  • setSuccessUrl menunjukkan halaman kejayaan log masuk yang ditentukan.

  • Peraturan pemintasan laluan dikonfigurasikan dalam Peta seterusnya Ambil perhatian bahawa ia mesti teratur.

Selepas perkara ini dikonfigurasikan, seterusnya konfigurasikan Pengawal log masuk:

@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!";
  }
}
Apabila menguji, mula-mula akses antara muka /hello Memandangkan anda tidak log masuk, ia akan melompat secara automatik Pergi ke antara muka /login:

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

Kemudian panggil antara muka /doLogin untuk melengkapkan log masuk:

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

Lawati antara muka /hello sekali lagi, cuma Boleh diakses dengan jayanya:

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

Gunakan Shiro Starter

Kaedah konfigurasi di atas sebenarnya setara kepada konfigurasi XML dalam SSM Dapatkan Spring Boot dan tulis semula dalam kod Java Selain kaedah ini, kami juga boleh terus menggunakan Starter yang disediakan secara rasmi oleh Shiro.

Buat projek seperti di atas

Selepas berjaya dibuat, tambah

, kebergantungan ini boleh menggantikan dua kebergantungan sebelumnya shiro-spring-boot-web-starter dan shiro-web , fail pom.xml adalah seperti berikut :shiro-spring

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

Create Realm

Alam di sini adalah sama seperti dahulu, jadi saya tidak akan menjelaskan secara terperinci.

Konfigurasikan maklumat asas Shiro

Seterusnya, konfigurasikan maklumat asas Shiro dalam application.properties:

shiro.sessionManager.sessionIdCookieEnabled=true
shiro.sessionManager.sessionIdUrlRewritingEnabled=true
shiro.unauthorizedUrl=/unauthorizedurl
shiro.web.enabled=true
shiro.successUrl=/index
shiro.loginUrl=/login
Penjelasan konfigurasi:

  • Baris pertama menunjukkan sama ada dibenarkan untuk meletakkan sessionId ke dalam kuki

  • Baris kedua menunjukkan sama ada dibenarkan untuk meletakkan sessionId ke dalam Blok alamat url

  • Baris ketiga menunjukkan laluan lompat lalai apabila mengakses halaman yang tidak dibenarkan

  • Baris keempat menunjukkan shiro didayakan

  • Baris kelima menunjukkan halaman log masuk yang berjaya

  • Baris keenam menunjukkan halaman log masuk

Konfigurasikan ShiroConfig

rreeee

Atas ialah kandungan terperinci Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam