Shiro 能夠幫助咱們完成:認證、受權、加密、會話管理、與Web 集成、緩存等html
其中工做原理主要如圖,進入後建立一個Subject(即爲當前用戶),而後SecurityManager管理全部Subject,這裏能夠理解爲於SpringMVC的DispatcherServlet,最後咱們Realm至關因而一個數據源,管理用戶身份是否合法。java
@Test public void testHelloworld() { //一、獲取SecurityManager工廠,此處使用Ini配置文件初始化SecurityManager Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); //二、獲得SecurityManager實例並綁定給SecurityUtils org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); //三、獲得Subject及建立用戶名/密碼身份驗證Token(即用戶身份/憑證) Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123"); try { //四、登陸,即身份驗證 subject.login(token); } catch (AuthenticationException e) { //五、身份驗證失敗 } Assert.assertEquals(true, subject.isAuthenticated()); //斷言用戶已經登陸 //六、退出 subject.logout(); }
2.一、首先經過new IniSecurityManagerFactory 並指定一個ini 配置文件來建立一個SecurityManager工廠;web
2.二、接着獲取SecurityManager並綁定到SecurityUtils,這是一個全局設置,設置一次便可;
2.三、經過SecurityUtils獲得Subject,其會自動綁定到當前線程;若是在web環境在請求結
束時須要解除綁定;而後獲取身份驗證的Token,如用戶名/密碼;
2.四、調用subject.login 方法進行登陸,其會自動委託給SecurityManager.login方法進行登陸;
2.五、若是身份驗證失敗請捕獲AuthenticationException 或其子類;spring
2.六、最後能夠調用subject.logout退出apache
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.2</version> </dependency>
<filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>*.shtml</url-pattern> </filter-mapping>
DelegatingFilterProxy做用是自動到spring容器查找名字爲shiroFilter(filter-name)的bean並把全部Filter的操做委託給它,而後將ShiroFilter 配置到spring容器便可緩存
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> </bean>
[main] #默認是/login.jsp authc.loginUrl=/login roles.unauthorizedUrl=/unauthorized perms.unauthorizedUrl=/unauthorized [users] zhang=123,admin wang=123 [roles] admin=user:*,menu:* [urls] /login=anon /unauthorized=anon /static/**=anon /authenticated=authc /role=authc,roles[admin] /permission=authc,perms["user:create"]
其中最重要的就是[urls]部分的配置,其格式是: 「url=攔截器[參數],攔截器[參數]」;
即若是當前請求的url匹配[urls]部分的某個url模式,將會執行其配置的攔截器。好比anon
攔截器表示匿名訪問(即不須要登陸便可訪問);authc攔截器表示須要身份認證經過後才
能訪問;roles[admin]攔截器表示須要有admin 角色受權才能訪問;而perms["user:create"]
攔截器表示須要有「user:create」權限才能訪問app
暫時就看到這裏,做一個記錄,下次繼續更新jsp