Apache-shiro學習

1.Shiro簡介

Shiro 能夠幫助咱們完成:認證、受權、加密、會話管理、與Web 集成、緩存等html

其中工做原理主要如圖,進入後建立一個Subject(即爲當前用戶),而後SecurityManager管理全部Subject,這裏能夠理解爲於SpringMVC的DispatcherServlet,最後咱們Realm至關因而一個數據源,管理用戶身份是否合法。java

2.入門示例

@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

3.與web集成

<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>

必要的架包。

web.xml如圖所示

<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>

ini配置部分說明

[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

相關文章
相關標籤/搜索