Apache Shrio安全框架實現原理及實例詳解_java

來源:腳本之家  責任編輯:小易  

ss更強大點,也就是復雜點,shrio更輕量級一點,跟spring整合的都很好,自己用的ss,我知道springside用的是shrio,完全看個人習慣了www.13333515.buzz防采集請勿采集本網。

一、Shiro整體概述

spring boot集成shrio 權限驗證怎么做 具體要看權限控制到什么程度,簡單的單純用spring mvc 也能行,就是麻煩,什么都要自己寫。如果寫不好,以后也不好擴展,安全性得不到保證。apache shiro的

1.簡介

樓主 意思就是 在session_start()前面有輸出 你可以在session_start()前面加 ob_start();

Apache Shiro是Java的一個安全框架,功能強大,使用簡單,Shiro為開發人員提供了一個直觀而全面的認證(登錄),授權(判斷是否含有權限),加密(密碼加密)及會話管理(Shiro內置Session)的解決方案.

你好。根據你的描述: shiro當然可以根據權限控制頁面按鈕選擇是否顯示的,有tag可以控制頁面。僅供參考。

2.Shiro組件

首先介紹下思路: 1、用戶表 user;2、角色表 role;3、菜單 menu;4、角色菜單權限表 role_menu;5、用戶菜單權限表 user_menu;如圖: 根據用戶角色取出該角色所有權限,并對用戶進行權限分配;注意

3.Shiro架構

org.apache.shiro.config.ConfigurationException: Shiro INI configuration was either not found or discovered to be empty/unconfigured. 這個問題我也遇到了,原因應該是shiro.ini文件沒有添加的問題

3.1 外部架構(以應用程序角度)

3.2 內部架構

4. Shiro的過濾器

過濾器簡稱

對應的java類

anon

org.apache.shiro.web.filter.authc.AnonymousFilter

authc

org.apache.shiro.web.filter.authc.FormAuthenticationFilter

authcBasic

org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

perms

org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter

port

org.apache.shiro.web.filter.authz.PortFilter

rest

org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter

roles

org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

ssl

org.apache.shiro.web.filter.authz.SslFilter

user

org.apache.shiro.web.filter.authc.UserFilter

logout

org.apache.shiro.web.filter.authc.LogoutFilter

挑幾個重要的說明一下:

anon:匿名過濾器,不登錄也可以訪問的資源使用,比如首頁,一些靜態資源等

authc:認證過濾器,登錄成功后才能訪問的資源使用

perms:授權過濾器,必須具備某種權限才能訪問

roles:角色過濾器,必須具備某種角色才能訪問

注意:這么多過濾器,使用起來肯定不方便,Shiro框架也考慮到了這一點,所以有一個過濾器,一個頂十個,即DelegatingFilterProxy.

5. Shiro與Spring整合

5.1 pom.xml

<!--shiro和spring整合--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3.2</version> </dependency>

5.2 web.xml

<filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

5.3applicationContext-shiro.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--安全管理器,需要注入realm域,如果有緩存配置,還需要注入緩存管理器--> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!--引用自定義的realm --> <property name="realm" ref="authRealm"/> <!--引入緩存管理器--> <property name="cacheManager" ref="cacheManager"/> </bean> <!-- 自定義Realm域的編寫 --> <bean id="authRealm" class="com.itheima.web.shiro.AuthRealm"> <!-- 注入自定義的密碼比較器 --> <property name="credentialsMatcher" ref="customerCredentialsMatcher"></property> </bean> <!-- 自定義的密碼比較器 --> <bean id="customerCredentialsMatcher" class="com.itheima.web.shiro.CustomCredentialsMatcher"></bean> <!--緩存配置--> <!--內置(windows)緩存配置:MemoryConstrainedCacheManager--> <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager"></bean> <!-- filter-name這個名字的值來自于web.xml中filter的名字 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <!--登錄頁面 --> <property name="loginUrl" value="/login.jsp"></property> <!-- 登錄失敗后 --> <property name="unauthorizedUrl" value="/unauthorized.jsp"></property> <property name="filterChainDefinitions"> <!-- /**代表下面的多級目錄也過濾 --> <value> /system/module/list.do = perms["模塊管理"]<!--路徑和模塊名稱一定要和數據庫表中存儲的數據一致--> /index.jsp* = anon<!--anon 不登錄也可以訪問的資源--> /login.jsp* = anon /login* = anon /logout* = anon /css/** = anon /img/** = anon /plugins/** = anon /make/** = anon /** = authc </value> </property> </bean> <!-- 保證實現了Shiro內部lifecycle函數的bean執行 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <!-- 生成代理,通過代理進行控制 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true"/> </bean> <!-- 安全管理器 --> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> <!--支持Shiro注解配置--> <aop:aspectj-autoproxy proxy-target-class="true"/></beans>

5.4 如果想看具體的實現代碼(含sql腳本),可以點擊頁面右上角Fork me on github,到我的github倉庫中拉取

倉庫地址:  https://github.com/AdilCao/Shiro.git

代碼部分只需要關注三個類:

1.LoginController(登錄,在這里獲取Subject主體,調用subject.login()方法后直接調用認證方法)

2.AuthRealm(認證和授權在這個類中定義,認證成功后調用密碼比較器進行比較;授權即查找登錄用戶所具有的權限模塊集合)

3.CustomCredentialsMatcher(密碼比較器,將瀏覽器輸入明文密碼加密后,與數據庫中的安全密碼進行比較)

注意:整個過程中如果登錄不成功,就會拋出異常

具體要看權限控制到什么程度,簡單的單純用spring mvc 也能行,就是麻煩,什么都要自己寫。如果寫不好,以后也不好擴展,安全性得不到保證。apache shiro的話,簡單,易用,功能也強大,spring官網就是用的shiro,可見shiro的強大。shiro不僅支持web項目,還支持非web項目,和spring可以可以整合。spring security功能更強大,但是比shiro復雜,學習成本高,內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • spring-boot結合shrio實現jwt的方法
  • java集合框架map特性及實例解析
  • tp5框架實現一次選擇多張圖片并預覽的方法示例
  • yii框架結合charjs統計上一年與當前年數據的方法示例
  • yii框架結合charjs實現統計30天數據的方法
  • thinkphp5 框架結合plupload實現圖片批量上傳功能示例
  • tp5框架實現上傳多張圖片的方法分析
  • java中使用websocket實現在線聊天功能
  • springboot使用redis緩存的實現方法
  • java中網絡io的實現方式(bio、nio、aio)介紹
  • java實現sftp客戶端上傳文件以及文件夾的功能代碼
  • 關于通過java連接mysql對反斜杠”\“轉義的測試詳解
  • java中接口和事件監聽器的深入理解
  • java定時器問題實例解析
  • spring boot基礎學習之mybatis操作中使用redis做緩存詳解
  • java hashmap內部實現原理詳解
  • java基本語法筆記(菜鳥必看篇)
  • spring security與apache shiro 權限控制安全框架,那個更實用
  • Spring Security 和 Apache Shrio選哪個好
  • Spring Security 和 Apache Shrio選哪個好
  • 關于后臺管理權限的問題
  • spring boot集成shrio 權限驗證怎么做
  • 關于session
  • shiro能根據權限控制頁面按鈕是否顯示嗎
  • java如何做權限管理
  • apache shiro怎么讀
  • 誰給我分享個簡單的Java小項目,我想看看,嘗試著做幾個類似的功能
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全c#教程vbvb.netc 語言java編程delphijavaandroidiosswiftscala易語言匯編語言其它相關首頁javaspring-boot結合shrio實現jwt的方法java集合框架map特性及實例解析tp5框架實現一次選擇多張圖片并預覽的方法示例yii框架結合charjs統計上一年與當前年數據的方法示例yii框架結合charjs實現統計30天數據的方法thinkphp5 框架結合plupload實現圖片批量上傳功能示例tp5框架實現上傳多張圖片的方法分析java中使用websocket實現在線聊天功能springboot使用redis緩存的實現方法java中網絡io的實現方式(bio、nio、aio)介紹java實現sftp客戶端上傳文件以及文件夾的功能代碼關于通過java連接mysql對反斜杠”\“轉義的測試詳解java中接口和事件監聽器的深入理解java定時器問題實例解析spring boot基礎學習之mybatis操作中使用redis做緩存詳解java hashmap內部實現原理詳解java基本語法筆記(菜鳥必看篇)java使double保留兩位小數的多方java8 十大新特性詳解java.net.socketexception: connjava寫入文件的幾種方法分享java環境變量的設置方法(圖文教程java 十六進制與字符串的轉換java list用法示例詳解java中file類的使用方法javaweb實現文件上傳下載功能實例java 字符串截取的三種方法(推薦java文件上傳下載、郵件收發實例代碼springboot集成mybatisplus的方法java使用base64實現文件加密解密mybatis-plus通過插件將數據庫表生成entiwebsocket整合ssm(spring,struts2,maven)java中比較運算符compareto()、equals()與java網絡通信中serversocket的設計優化方spring boot集成druid數據庫連接池淺談java多進程程序的運行模式通過jdk源碼角度分析long類詳解
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果