Rumah > Java > javaTutorial > teks badan

Bagaimana untuk mengintegrasikan Shiro dalam SpringBoot

WBOY
Lepaskan: 2023-05-17 23:01:10
ke hadapan
1091 orang telah melayarinya

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>
Salin selepas log masuk

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());
  }
}
Salin selepas log masuk
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>
Salin selepas log masuk
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!";
  }
}
Salin selepas log masuk
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>
Salin selepas log masuk

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
Salin selepas log masuk
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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan