日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

解決springboot+shiro 權限攔截失效的問題

瀏覽:20日期:2023-04-21 09:32:40

最近因為項目需要,接觸了shiro。新手入門

發現權限攔截失效,

一直以為是以為授權和DB的問題

研究了一個下午,終于發現了問題所在

解決springboot+shiro 權限攔截失效的問題

我的訪問路徑沒有寫前面的斜杠!!,而DB中的資源路徑是可以省略的,崩潰了吧

但是問題來了,為什么在其他地方可以忽略掉前面的小斜杠呢?

經過幾分鐘的搗鼓發現,在springboot中,不論是thymeleaf的模板也好(我用的thymeleaf),還是后端代碼也好,底層會自動補全這個斜杠

問題解決!!

補充知識:SpringBoot整合shiro的一個完整的小案例

SpringBoot整合配置版的shiro很簡單,邏輯清

首先在pom.xml的配置如下,shiro使用緩存ehcache

<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.4</version> </dependency> <!-- shiro spring. --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.2</version> </dependency> <!-- shiro ehcache --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.2</version> </dependency>

接著配置shiro

@Configurationpublic class ShiroConfig { @Bean public ShiroFilterFactoryBean shirFilter(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); // 必須設置 SecurityManager shiroFilter.setSecurityManager(securityManager); // 攔截器 Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); // 設置login URL shiroFilter.setLoginUrl('/login'); // 登錄成功后要跳轉的鏈接 shiroFilter.setSuccessUrl('/main'); filterChainDefinitionMap.put('/webjars/**', 'anon'); filterChainDefinitionMap.put('/druid/**', 'anon'); //靜態資源的處理 filterChainDefinitionMap.put('/js/**', 'anon'); filterChainDefinitionMap.put('/css/**', 'anon'); filterChainDefinitionMap.put('/asserts/**', 'anon'); filterChainDefinitionMap.put('/fonts/**', 'anon'); filterChainDefinitionMap.put('/images/**', 'anon'); // 退出系統的過濾器 filterChainDefinitionMap.put('/logout', 'logout'); filterChainDefinitionMap.put('/login', 'anon'); filterChainDefinitionMap.put('/kaptcha', 'anon'); filterChainDefinitionMap.put('/**', 'authc'); shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilter; } @Bean public HashedCredentialsMatcher hashedCredentialsMatcher() { HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); hashedCredentialsMatcher.setHashAlgorithmName('MD5'); hashedCredentialsMatcher.setHashIterations(1024); return hashedCredentialsMatcher; } @Bean public ShiroRealm shiroRealm(HashedCredentialsMatcher hashedCredentialsMatcher) { ShiroRealm shiroRealm = new ShiroRealm(); shiroRealm.setCredentialsMatcher(hashedCredentialsMatcher); return shiroRealm; } //shiro使用緩存ehcachae @Bean public EhCacheManager ehCacheManager() { EhCacheManager ehCacheManager = new EhCacheManager(); ehCacheManager.setCacheManagerConfigFile('classpath:ehcache.xml'); return ehCacheManager; } @Bean('sessionManager') public SessionManager sessionManager(){ DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setSessionValidationSchedulerEnabled(true); sessionManager.setSessionIdCookieEnabled(true); return sessionManager; } @Bean('securityManager') public DefaultWebSecurityManager securityManager(ShiroRealm shiroRealm, SessionManager sessionManager) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm); securityManager.setSessionManager(sessionManager); return securityManager; } @Bean('lifecycleBeanPostProcessor') public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); proxyCreator.setProxyTargetClass(true); return proxyCreator; } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(securityManager); return advisor; }}

在配置中提到的realm如下配置

public class ShiroRealm extends AuthorizingRealm { @Autowired private UserService userService; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; // 取出表單用戶名 String username = upToken.getUsername(); // 查詢是否有該用戶 if (userService.getByName(username) == null) { throw new UnknownAccountException('用戶不存在!'); } // 靠用戶名從數據庫查詢該用戶的全部信息 User user = userService.getByName(username); // 傳入:用戶名,加密后的密碼,鹽值,該realm的名字,加密算法和加密次數在已經在配置文件中指定 SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, user.getPassword(),ByteSource.Util.bytes(username), getName()); return info; } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 1. 從 PrincipalCollection 中來獲取登錄用戶的信息 Object principal = principals.getPrimaryPrincipal(); // 2. 利用登錄的用戶的信息來..當前用戶的角色或權限(可能需要查詢數據庫) Set<String> roles = new HashSet<String>(); roles.add('user'); if ('admin'.equals(principal)) { roles.add('admin'); } // 3. 創建 SimpleAuthorizationInfo, 并設置其 reles 屬性 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles); // 4. 返回 SimpleAuthorizationInfo 對象. return info; }}

由于我做的平臺只有一個管理員就不寫注冊了,這時手動算出一個admin用戶的密碼

public static void main(String[] args) { Object result = new SimpleHash('MD5','123456',ByteSource.Util.bytes('admin'),1024); System.out.println(result); }

最后寫登錄的Controller

@Controllerpublic class LoginController { // 處理登錄邏輯 @PostMapping('/login') public String login(String username, String password, String kaptcha, HttpSession session, Map<String, Object> map) { Subject currentUser = SecurityUtils.getSubject(); if (!currentUser.isAuthenticated()) { // 把用戶名和密碼封裝為 UsernamePasswordToken 對象 UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 設置為rememberme token.setRememberMe(true); try {// 執行登錄.currentUser.login(token); } // 所有認證時異常的父類 catch (AuthenticationException ae) {map.put('password', '輸入的用戶名或密碼錯誤');log.info('登錄失敗: ' + ae.getMessage());return 'login'; } } if (!session.getAttribute('code').equals(kaptcha)) { map.put('kaptcha', '輸入的驗證碼錯誤'); return 'login'; } session.setAttribute('loginUser', 'user'); return 'main'; }}

以上這篇解決springboot+shiro 權限攔截失效的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久蜜桃一区二区人| 在线国产精品一区| 亚洲免费高清| bbw在线视频| 老司机免费视频一区二区| 国产视频一区二区在线播放| 羞羞答答国产精品www一本| 色综合www| 91综合视频| 深夜视频一区二区| 麻豆久久久久久久| 国产精品分类| 久久精品国产亚洲一区二区三区| 日韩激情综合| 日韩三级久久| 国产欧美一区二区精品久久久| 综合一区av| 一区二区三区国产盗摄| 日韩精品亚洲一区二区三区免费| 一区二区国产在线| 亚洲精品乱码日韩| 久久av网站| 久久麻豆视频| 久久字幕精品一区| 欧美日韩一区二区综合| 日韩一区二区三区免费播放| 六月婷婷综合| 日韩视频久久| 老牛影视一区二区三区| 免费在线看一区| 欧美久久一区二区三区| 日本视频在线一区| 欧美片网站免费| 高清久久精品| 欧美手机在线| 蜜桃久久久久久久| 国产精品久久久网站| 国产精品s色| 久久精品国产亚洲aⅴ| 欧美一区二区三区激情视频| 久久九九精品| 99在线精品免费视频九九视| 蜜桃久久久久久| 欧美日本不卡高清| 精品国产乱码久久久久久1区2匹| 精品视频国产| 日韩深夜视频| 亚洲国产日韩欧美在线| 日本午夜精品| 日韩成人a**站| 久久精品亚洲人成影院| 天堂va在线高清一区| 国产精品亚洲欧美日韩一区在线| 美女精品视频在线| 亚洲天堂av影院| 国产99亚洲| 蜜桃免费网站一区二区三区| 国产精品日本一区二区三区在线| 国产成人免费精品| 九一成人免费视频| 欧美久久亚洲| 久久久久国产精品一区二区| 蜜桃一区二区三区在线观看| 国产精品久久久亚洲一区| 国产拍在线视频| 国产亚洲高清视频| 久久精品电影| 国产麻豆一区二区三区精品视频| 吉吉日韩欧美| 视频一区在线播放| 四虎国产精品免费观看| 私拍精品福利视频在线一区| 日韩影院免费视频| 神马久久午夜| 中文字幕日韩高清在线 | 亚洲成人二区| 日韩不卡视频在线观看| 日本午夜免费一区二区 | 久久超碰99| 最新亚洲国产| 亚洲国产欧美日本视频| 夜夜精品视频| 久久国产精品美女| 亚洲电影在线一区二区三区| 国产精品久久久久久久久久妞妞| 米奇777超碰欧美日韩亚洲| 蜜臀久久99精品久久久久宅男| 国产欧美日韩亚洲一区二区三区| 欧美日韩尤物久久| 国产日韩欧美一区在线| 久久高清免费观看| 成人在线黄色| 亚欧成人精品| 午夜精品影院| 91一区二区三区四区| 日韩精品国产精品| 亚洲综合日韩| 国产成人精品一区二区三区免费| 91精品蜜臀一区二区三区在线| 国产欧美日韩免费观看| 欧美日韩日本国产亚洲在线| 免费在线观看一区| 视频一区中文字幕| 国产一区国产二区国产三区| 在线精品福利| 久久视频精品| 国产 日韩 欧美一区| 国产激情久久| 亚洲三级视频| 美女黄网久久| 久久中文亚洲字幕| 你懂的亚洲视频| 成人日韩在线| 久久丁香四色| 婷婷五月色综合香五月| 蜜臀精品久久久久久蜜臀| 精品日韩视频| av资源新版天堂在线| 中文字幕在线视频久| 美女在线视频一区| 人人爽香蕉精品| 美女尤物久久精品| 欧美中文字幕一区二区| 日韩中文在线电影| 精品国产不卡一区二区| 欧美日韩中出| 国产精品久久久久久av公交车| 蜜桃av一区二区三区电影| 免费污视频在线一区| 日本不卡免费高清视频在线| 你懂的网址国产 欧美| 欧美日韩在线精品一区二区三区激情综合| 日本亚洲视频在线| 亚洲欧美高清| 免费成人网www| 欧美专区在线| 免费日韩一区二区| 亚洲精品va| 中文字幕日韩亚洲| 蘑菇福利视频一区播放| 99久久精品网| 狠狠久久婷婷| 99精品视频在线观看免费播放| 九九精品调教| 久久久水蜜桃av免费网站| 日韩精品麻豆| 国产美女精品| 蜜臀久久久久久久| 亚洲日本国产| 国产精品久久久久久久久久白浆 | 日韩精品一二三区| 噜噜噜躁狠狠躁狠狠精品视频 | 老牛国产精品一区的观看方式| 国内精品福利| 黄色成人精品网站| 午夜日本精品| 91久久黄色| 97精品资源在线观看| 91在线成人| 国产精品伦一区二区| 日韩国产一区二区三区| 日韩高清中文字幕一区二区| 久久香蕉国产| 亚洲精品麻豆| 日韩成人精品一区二区三区| 欧美国产先锋| 伊伊综合在线| 精品一区毛片| 日本少妇一区二区| 麻豆精品在线观看| 欧美少妇精品| 亚洲天堂日韩在线| 久久国产婷婷国产香蕉| 麻豆中文一区二区| 欧美日韩精品一本二本三本| 亚洲天堂免费| 伊人影院久久| 日本精品另类| 麻豆成人综合网| 成人亚洲一区二区| 国产综合亚洲精品一区二| 天使萌一区二区三区免费观看| 国产精品一级在线观看| 波多野结衣久久精品| 99国产精品免费视频观看| 亚洲精品三级| 国产精品亲子伦av一区二区三区| 色在线视频观看| 亚洲精品三级| 欧美精品资源| 青草久久视频| 九九久久婷婷| 久久久91麻豆精品国产一区| 老鸭窝毛片一区二区三区| 国产精品777777在线播放| 五月天久久网站| 精品精品99| 日本久久一区| 999在线观看精品免费不卡网站| 久久亚洲国产精品尤物|