當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Springboot之Shiro权限管理
生活随笔
收集整理的這篇文章主要介紹了
Springboot之Shiro权限管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Springboot之Shiro權限管理 介紹
- 1.shiro有三個核心api(接口)
- 2.如何使用:
- 第一步導入shiro與springboot整合依賴
- 第二步配置shiro類
- 第三步自定義一個Realm類(授權和認證的作用)
Springboot之Shiro權限管理 介紹
當用戶前臺登錄發起請求時: 1.從shiro中獲取subject主體 SecurityUtils.getSubject();2.判斷當前用戶是否認證過了,如果認證過了就放行了 subject.isAuthenticated()3.如果沒有認證過,就把前臺傳遞的賬號密碼封裝為一個UserNamePasswordToken對象, new UsernamePasswordToken(username, password);4.把UserNamePasswordToken對象傳入,進行登錄操作 subject.login(usernamepasswordtoken);5.我們配置的安全管理器中實現了doGetAuthenticationInfo方法,從數據庫查詢用戶數據,加密加鹽后進行shiro的認證6.如果認證成功,進行權限賦于。7.根據配置shiro的真實過濾器跳轉至登錄成功頁面或登錄失敗的頁面。1.shiro有三個核心api(接口)
Subject:用戶主體(就是把操作權交給 SecurityManager)SecurityManage:安全管理器(關聯Realm)Realm:Shiro 鏈接數據的橋梁2.如何使用:
第一步導入shiro與springboot整合依賴
<!-- shiro與spring整合依賴 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency>第二步配置shiro類
package com.itheima.shiro;import java.util.LinkedHashMap; import java.util.Map;import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;/*** Shiro的配置類* @author lenovo**/ @Configuration public class ShiroConfig {/*** 創建ShiroFilterFactoryBean*/@Beanpublic ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManager securityManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();第一步創建過濾器對象//設置安全管理器放入核心api(securityManager)shiroFilterFactoryBean.setSecurityManager(securityManager);//添加Shiro內置過濾器/*** Shiro內置過濾器,可以實現權限相關的攔截器* 常用的過濾器:* anon: 無需認證(登錄)可以訪問* authc: 必須認證才可以訪問* user: 如果使用rememberMe的功能可以直接訪問* perms: 該資源必須得到資源權限才可以訪問* role: 該資源必須得到角色權限才可以訪問*/Map<String,String> filterMap = new LinkedHashMap<String,String>();/*filterMap.put("/add", "authc");filterMap.put("/update", "authc");*/filterMap.put("/testThymeleaf", "anon");//放行login.html頁面filterMap.put("/login", "anon");//授權過濾器//注意:當前授權攔截后,shiro會自動跳轉到未授權頁面filterMap.put("/add", "perms[user:add]");filterMap.put("/update", "perms[user:update]");filterMap.put("/*", "authc");//修改調整的登錄頁面shiroFilterFactoryBean.setLoginUrl("/toLogin");//設置未授權提示頁面shiroFilterFactoryBean.setUnauthorizedUrl("/noAuth");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);return shiroFilterFactoryBean;}/*** 創建DefaultWebSecurityManager* 安全處理器SecurityManage:安全管理器(關聯Realm)*/@Bean(name="securityManager")public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm){DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();//關聯realmsecurityManager.setRealm(userRealm);return securityManager;}/*** 創建Realm*/@Bean(name="userRealm")public UserRealm getRealm(){return new UserRealm();}/*** 配置ShiroDialect,用于thymeleaf和shiro標簽配合使用*/@Beanpublic ShiroDialect getShiroDialect(){return new ShiroDialect();} }第三步自定義一個Realm類(授權和認證的作用)
授權:根據不同角色的方式進行授予不同的權利
認證:驗證賬戶名等是否正確
package com.itheima.shiro;import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired;import com.itheima.domain.User; import com.itheima.service.UserService;/*** 自定義Realm* @author lenovo**/ public class UserRealm extends AuthorizingRealm{/*** 執行授權邏輯*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {System.out.println("執行授權邏輯");//給資源進行授權SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();//添加資源的授權字符串//info.addStringPermission("user:add");//到數據庫查詢當前登錄用戶的授權字符串//獲取當前登錄用戶Subject subject = SecurityUtils.getSubject();User user = (User)subject.getPrincipal();User dbUser = userSerivce.findById(user.getId());info.addStringPermission(dbUser.getPerms());return info;}@Autowiredprivate UserService userSerivce;/*** 執行認證邏輯*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {System.out.println("執行認證邏輯");//編寫shiro判斷邏輯,判斷用戶名和密碼//1.判斷用戶名UsernamePasswordToken token = (UsernamePasswordToken)arg0;User user = userSerivce.findByName(token.getUsername());if(user==null){//用戶名不存在return null;//shiro底層會拋出UnKnowAccountException}//2.判斷密碼return new SimpleAuthenticationInfo(user,user.getPassword(),"");}}總結
以上是生活随笔為你收集整理的Springboot之Shiro权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北大计算机系研究生宿舍地址,北京大学研究
- 下一篇: 枫叶管理