Apache Shiro是一個常見而且易用的的Java安全框架,能夠很方便的實現執行身份驗證、受權、密碼和會話管理等功能html
它有三個核心組件:Subject, SecurityManager 和 Realms
Subject:即「當前操做用戶」。可是,在Shiro中,Subject這一律念並不單單指人,也能夠是第三方進程、後臺賬戶(Daemon Account)或其餘相似事物。它僅僅意味着「當前跟軟件交互的東西」。
Subject表明了當前用戶的安全操做,SecurityManager則管理全部用戶的安全操做。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro經過SecurityManager來管理內部組件實例,並經過它來提供安全管理的各類服務。
Realm: Realm充當了Shiro與應用安全數據間的「橋樑」或者「鏈接器」。也就是說,當對用戶執行認證(登陸)和受權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。
UserRealm: 實現鑑權(登陸驗證) | 受權管理(檢查用戶是否有權限訪問)
SecurityManager: 權限總管
Subject: 受權對象
ShiroConfig: 決定給哪些地址設定權限spring
1.依賴導入json
shiro-spring
依賴2.實現自定義的UserRealm安全
繼承自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,"登陸成功"); }
@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; } }