首頁 > 軟體

SpringBoot整合Shiro的環境搭建教學

2022-12-19 14:01:45

SpringBoot整合Shiro環境搭建

匯入 SpringBoot 和 Shiro 整合包的依賴:

<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.10.1</version>
</dependency>

下面是編寫組態檔:

@Configuration
public class ShiroConfig {
    
}

Shiro 三大要素

  • subject -> ShiroFilterFactoryBean
  • securityManager -> DefaultWebSecurityManager
  • realm

實際操作中物件建立的順序 : realm -> securityManager -> subject

第一步:編寫自定義的 realm ,需要繼承 AuthorizingRealm,並且重寫認證和授權方法:

public class UserRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("執行了授權方法");
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("執行了認證方法");
        return null;
    }
}

註冊我們自己的realm到設定類裡:

@Configuration
public class ShiroConfig {
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
}

第二步:建立 securityManager,並載入realm:

@Bean(name = "SecurityManager")
public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    // 需要關聯自定義的 Realm,通過引數把 Realm 物件傳遞過來
    securityManager.setRealm(userRealm);
    return securityManager;
}

第三步:建立 subject,並關聯 securityManager:

@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
    ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean();
    // 設定安全管理器
    // 需要關聯 securityManager ,通過引數把 securityManager 物件傳遞過來
    subject.setSecurityManager(defaultWebSecurityManager);
    return subject;
}

完整設定類:

@Configuration
public class ShiroConfig {

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
        ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean();
        // 設定安全管理器
        // 需要關聯 securityManager ,通過引數把 securityManager 物件傳遞過來
        subject.setSecurityManager(defaultWebSecurityManager);
        return subject;
    }

    @Bean(name = "SecurityManager")
    public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 需要關聯自定義的 Realm,通過引數把 Realm 物件傳遞過來
        securityManager.setRealm(userRealm);
        return securityManager;
    }

    @Bean
    public UserRealm userRealm() {
        return new UserRealm();
    }
}

現在,我們來實現一個簡單的頁面攔截測試一下吧!

編寫兩個頁面、在templates目錄下新建一個 user 目錄 add.html update.html:

頁面內容可以自定義:

在index頁面上,增加跳轉連結功能:

<a th:href="@{/user/add}" rel="external nofollow" >add</a>
<hr/>
<a th:href="@{/user/update}" rel="external nofollow" >update</a>

編寫跳轉到頁面的controller:

@RequestMapping("/user/add")
public String toAdd() {
    return "user/add";
}

@RequestMapping("/user/update")
public String toUpdate() {
    return "user/update";
}

之後執行無誤即可設定成功!

到此這篇關於SpringBoot整合Shiro的環境搭建教學的文章就介紹到這了,更多相關SpringBoot整合Shiro內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com