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

歡迎訪問 生活随笔!

生活随笔

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

javascript

authc过滤器 shiro_使用Shiro实现认证和授权(基于SpringBoot)

發布時間:2025/3/15 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 authc过滤器 shiro_使用Shiro实现认证和授权(基于SpringBoot) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Apache Shiro是一個功能強大且易于使用的Java安全框架,它為開發人員提供了一種直觀,全面的身份驗證,授權,加密和會話管理解決方案。下面是在SpringBoot中使用Shiro進行認證和授權的例子,代碼如下:

pom.xml

導入SpringBoot和Shiro依賴:

Copyorg.springframework.boot spring-boot-starter-web org.apache.shiro shiro-spring 1.4.2

也可以直接導入Apache Shiro提供的starter:

Copyorg.apache.shiro shiro-spring-boot-web-starter

Shiro配置類

Copypackage com.cf.shiro1.config;import org.apache.shiro.authc.credential.HashedCredentialsMatcher;import org.apache.shiro.realm.Realm;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 java.util.HashMap;import java.util.Map;@Configurationpublic class ShiroConfig { @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //設置安全管理器 shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); //設置未認證(登錄)時,訪問需要認證的資源時跳轉的頁面 shiroFilterFactoryBean.setLoginUrl("/loginPage"); //設置訪問無權限的資源時跳轉的頁面 shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorizedPage"); //指定路徑和過濾器的對應關系 Map filterMap = new HashMap<>(); //設置/user/login不需要登錄就能訪問 filterMap.put("/user/login", "anon"); //設置/user/list需要登錄用戶擁有角色user時才能訪問 filterMap.put("/user/list", "roles[user]"); //其他路徑則需要登錄才能訪問 filterMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; } @Bean public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("realm") Realm realm) { DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(realm); return defaultWebSecurityManager; } @Bean public Realm realm() { MyRealm realm = new MyRealm(); //使用HashedCredentialsMatcher帶加密的匹配器來替換原先明文密碼匹配器 HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); //指定加密算法 hashedCredentialsMatcher.setHashAlgorithmName("MD5"); //指定加密次數 hashedCredentialsMatcher.setHashIterations(3); realm.setCredentialsMatcher(hashedCredentialsMatcher); return realm; }}

自定義Realm

Copypackage com.cf.shiro1.config;import org.apache.shiro.authc.*;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.crypto.hash.SimpleHash;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.util.ByteSource;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;public class MyRealm extends AuthorizingRealm { /** * 授權 * * @param principalCollection * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { Object username = principalCollection.getPrimaryPrincipal(); SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); simpleAuthorizationInfo.setRoles(getRoles(username.toString())); return simpleAuthorizationInfo; } /** * 認證 * * @param authenticationToken * @return * @throws AuthenticationException */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String username = token.getUsername(); Map userInfo = getUserInfo(username); if (userInfo == null) { throw new UnknownAccountException(); } //鹽值,此處使用用戶名作為鹽 ByteSource salt = ByteSource.Util.bytes(username); SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, userInfo.get("password"), salt, getName()); return authenticationInfo; } /** * 模擬數據庫查詢,通過用戶名獲取用戶信息 * * @param username * @return */ private Map getUserInfo(String username) { Map userInfo = null; if ("zhangsan".equals(username)) { userInfo = new HashMap<>(); userInfo.put("username", "zhangsan"); //加密算法,原密碼,鹽值,加密次數 userInfo.put("password", new SimpleHash("MD5", "123456", username, 3)); } return userInfo; } /** * 模擬查詢數據庫,獲取用戶角色列表 * * @param username * @return */ private Set getRoles(String username) { Set roles = new HashSet<>(); roles.add("user"); roles.add("admin"); return roles; }}

Controller

Copypackage com.cf.shiro1.controller;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.*;import org.apache.shiro.subject.Subject;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/user")public class UserController { /** * 登錄 * @param username * @param password * @return */ @RequestMapping("/login") public String userLogin(String username, String password) { String result; //獲取當前用戶 Subject currentUser = SecurityUtils.getSubject(); //用戶是否已經登錄,未登錄則進行登錄 if (!currentUser.isAuthenticated()) { //封裝用戶輸入的用戶名和密碼 UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password); try { //登錄,進行密碼比對,登錄失敗時將會拋出對應異常 currentUser.login(usernamePasswordToken); result = "登錄成功"; } catch (UnknownAccountException uae) { result = "用戶名不存在"; } catch (IncorrectCredentialsException ice) { result = "密碼錯誤"; } catch (LockedAccountException lae) { result = "用戶狀態異常"; } catch (AuthenticationException ae) { result = "登錄失敗,請與管理員聯系"; } } else { result = "您已經登錄成功了"; } return result; } @RequestMapping("/list") public String userList() { return "訪問我需要登錄并且需要擁有user角色!"; }}

總結

以上是生活随笔為你收集整理的authc过滤器 shiro_使用Shiro实现认证和授权(基于SpringBoot)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲欧美一区二区三 | 日本一区二区三区视频在线 | 成人无高清96免费 | av在线网址观看 | 最近中文字幕在线视频 | 国产成人精品一区二区三区 | 国产性生活视频 | 日韩在线视频一区 | 欧美巨鞭大战丰满少妇 | 顶级尤物极品女神福利视频 | 亚洲熟乱 | 一区二区三区日韩 | 亚洲精品在线网站 | 黄色在线免费看 | 高清国产一区 | 黄色a级片| 波多野吉衣av无码 | 国产一区二区三区在线看 | 国产精品一区二区欧美 | 91精品区 | 九色porny蝌蚪视频 | 这里只有精品视频在线观看 | 亚洲av激情无码专区在线播放 | 亚洲AV无码精品久久一区二区 | 久久看片 | 日本女人毛茸茸 | 911色 | 91成人福利在线 | 色av一区二区三区 | av视屏 | 欧美色综合 | 国产成人亚洲综合 | 91影音| 亚洲第一成人在线 | 亚洲激情在线视频 | 91高潮大合集爽到抽搐 | 日本不卡一区二区三区在线观看 | 亚洲人高潮女人毛茸茸 | 性开放视频 | 国产精品国产一区二区三区四区 | 国产在线视频91 | 国产一区二区在线免费观看 | 久久精品性爱视频 | 免费黄色在线网站 | 亚洲无吗视频 | 成人一区二区三区 | 91精产国品一二三区在线观看 | 日本黄色录相 | 婷婷色在线观看 | 九九啪| 黄色网日本 | 爱爱视频一区二区 | 毛片的网站 | 亚洲图片小说区 | 97福利视频 | 日韩综合网 | 欧美啪啪一区二区 | 咪咪成人网 | 精品美女一区二区三区 | 亚洲爽爽 | 成人黄色a级片 | 亚洲最大成人在线 | 国产男女猛烈无遮挡免费视频 | 日韩久久久久久久久久 | 一二三区精品 | 日本三级中国三级99人妇网站 | 中文字幕一区二区精品 | 亚洲欧美在线看 | 男人的天堂色偷偷 | 日韩午夜在线观看 | 青青青免费视频观看在线 | 天堂在线中文字幕 | 免费在线精品视频 | 超碰在线c | 波多野结衣国产在线 | 国产女主播喷水视频在线观看 | 免费黄色国产 | 亚洲视频国产精品 | 亚洲黄色免费在线观看 | av先锋在线 | 男女瑟瑟视频 | 在线观看欧美一区 | 色碰视频| a资源在线观看 | 国产99在线观看 | 久久久国产成人一区二区三区 | 国产男女猛烈无遮挡 | 天天射天天爽 | cao在线 | 稀缺小u女呦精品呦 | 97视频| 看av网站 | 一区二区三区视频在线观看免费 | av三级网 | 无码人妻丰满熟妇区毛片蜜桃精品 | 少妇一级淫片免费播放 | 精品91自产拍在线观看二区 | 少妇紧身牛仔裤裤啪啪 | 成年人性视频 |