日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot之Shiro权限管理

發布時間:2023/12/20 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。