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