您好,登錄后才能下訂單哦!
怎么在SpringBoot中實現Shiro授權?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
使用Shiro過濾器實現授權
設置好授權攔截跳轉的請求地址
/** * 創建ShiroFilterFactoryBean */ @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean(); //設置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); //添加Shiro內置過濾器 /** * Shiro內置過濾器,可以實現權限相關的攔截器 * 常用的過濾器: * anon:無需認證(登錄)可以訪問 * authc:必須認證才可以訪問 * user:如果使用rememberMe的功能可以直接訪問 * perms:該資源必須得到資源權限才可以訪問 * role:該資源必須得到角色權限才可以訪問 */ Map<String, String> filterMap= new LinkedHashMap<String,String>(); //設置攔截后跳轉的請求路徑 shiroFilterFactoryBean.setLoginUrl("/user/badRequest"); //設置未授權提示的頁面 shiroFilterFactoryBean.setUnauthorizedUrl("/user/badRequest"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; }
再使用 filterMap 去放對應的攔截即可,例如 filterMap.put("/**", "anon")
上面是認證的,如果需要授權的,相應的多給一個任意的授權字符串如 filterMap.put("/user/add", "perms[user:add]")
授權邏輯編寫的位置
/** * 執行授權邏輯 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { System.out.println("開始執行Shiro的授權方法..."); //給資源進行授權 SimpleAuthorizationInfo info= new SimpleAuthorizationInfo(); //添加資源的授權字符串 info.addStringPermission("user:add"); return null; }
授權字符串和之前的字符串對應
補充
/** * 執行認證邏輯 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException { System.out.println("開始執行Shiro的認證方法..."); //編寫Shiro判斷邏輯,判斷用戶名和密碼 //判斷用戶名是否存在 UsernamePasswordToken token=(UsernamePasswordToken)arg0; User user = userMapper.findByUsername(token.getUsername()); if(user==null) return null; //判斷密碼是否正確,參數一為認證的實體 return new SimpleAuthenticationInfo(user,user.getPassword(),""); }
在執行認證時的SimpleAuthenticationInfo第一個傳參可以用來獲取當前用戶
/** * 執行授權邏輯 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { System.out.println("開始執行Shiro的授權方法..."); //給資源進行授權 SimpleAuthorizationInfo info= new SimpleAuthorizationInfo(); //添加資源的授權字符串 info.addStringPermission("user:register"); //獲取當前的登錄用戶 User user=(User)SecurityUtils.getSubject().getPrincipal(); return null; }
看完上述內容,你們掌握怎么在SpringBoot中實現Shiro授權的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。