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

相关文章
相关标签/搜索