Shiro項目配置

Apache Shiro是一個常見而且易用的的Java安全框架,能夠很方便的實現執行身份驗證、受權、密碼和會話管理等功能html

它有三個核心組件:Subject, SecurityManager 和 Realms
Subject:即「當前操做用戶」。可是,在Shiro中,Subject這一律念並不單單指人,也能夠是第三方進程、後臺賬戶(Daemon Account)或其餘相似事物。它僅僅意味着「當前跟軟件交互的東西」。
Subject表明了當前用戶的安全操做,SecurityManager則管理全部用戶的安全操做。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro經過SecurityManager來管理內部組件實例,並經過它來提供安全管理的各類服務。
Realm: Realm充當了Shiro與應用安全數據間的「橋樑」或者「鏈接器」。也就是說,當對用戶執行認證(登陸)和受權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。

shiro各個組件介紹

UserRealm: 實現鑑權(登陸驗證) | 受權管理(檢查用戶是否有權限訪問)
SecurityManager: 權限總管
Subject: 受權對象
ShiroConfig: 決定給哪些地址設定權限spring

步驟

  • 1.依賴導入json

    • 首先在pom.xml文件中導入shiro-spring依賴
  • 2.實現自定義的UserRealm安全

    • 在commons包下自定義一個繼承自AuthorizingRealm的Realm類
  • 3.實現登陸認證的業務邏輯框架

    subject執行登陸代碼(根據SecurityManager已分配的權限)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,password.toCharArray());
try {
  subject.login(token);// 執行登陸
} catch(Exception ex) {
  jsonData = new JsonData(1,ex.getMessage());
}
if(subject.isAuthenticated()){// 爲真則登陸成功
  jsonData = new JsonData(0,"登陸成功");
}
  • 4.配置Shiro並提供SecurityManager
@Configuration
public class ShiroConfig {
    
    /**
     * Shiro權限過濾器的設置
     * @param securityManager
     * @return
     */
    @Bean("shiroFilter")
    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager securityManager) {
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        bean.setSecurityManager(securityManager);
        bean.setLoginUrl("/sys/toLogin");// 設置登陸地址,鑑權失敗時返回這個地址
        
        // 權限的全局設置
        Map<String,String> auths = new HashMap<String, String>();
        auths.put("/sys/toLogin", "anon");// anon表示該地址無需權限訪問
        auths.put("/sys/doLogin", "anon");
        auths.put("/**", "anon");
        bean.setFilterChainDefinitionMap(auths);
        return bean;
    }
    
    /**
     * 給SecurityManager分配Realm
     * @return
     */
    @Bean(name = "securityManager")
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(new MyUserRealm());
        return securityManager;
    }
}

參考網址

https://www.cnblogs.com/hyyq/...code

相關文章
相關標籤/搜索