shrio安全框架

(一)shrio简介
1、什么是 apache shiro :
Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理
如同 Spring security 一样都是是一个权限安全框架,但是与Spring Security相比,在于他使用了和比较简洁易懂的认证和授权方式。

2、Apache Shiro 的三大核心组件:
1、 Subject :当前用户的操作。即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Subject 不仅仅代表某个用户,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。
2、 SecurityManager :用于管理所有的Subjec。即所有Subject的管理者,这是Shiro框架的核心组件,可以把他看做是一个Shiro框架的全局管理组件,用于调度各种Shiro框架的服务。
3、 Realms: 用于进行权限信息的验证。是用户的信息认证器和用户的权限人证器,我们需要自己来实现Realms来自定义的管理我们自己系统内部的权限规则。

3、 shiro的用户权限认证过程中的 实现方法 Authentication 和 Authorization

在shiro的用户权限认证过程中其通过两个方法来实现:
1、Authentication:是验证用户身份的过程。
2、Authorization:是授权访问控制,用于对用户进行的操作进行人证授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。
4 、其他组件:
除了以上几个组件外,Shiro还有几个其他组件:
1 SessionManager Shiro为任何应用提供了一个会话编程范式。
2、 CacheManager :对Shiro的其他组件提供缓存支持。 
(二)shrio操作
1:shrio在web.xml中的配置
  1. <!--==================shiro过虑器====================-->  
  2.     <!-- shiro过虑器,DelegatingFilterProx会从spring容器中找shiroFilter代理模式(律师模式) -->  
  3.     <filter>  
  4.         <filter-name>shiroFilter</filter-name>  
  5.         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
  6.         <!--设置为true有servlet容器控制filter声明周期-->  
  7.         <init-param>  
  8.             <param-name>targetFilterLifecycle</param-name>  
  9.             <param-value>true</param-value>  
  10.         </init-param>  
  11.     </filter>  
  12.     <filter-mapping>  
  13.         <filter-name>shiroFilter</filter-name>  
  14.         <url-pattern>/*</url-pattern>  
  15.     </filter-mapping>  
2:在applicationContext-shrio.xml中的配置
  1.  <!-- Shiro 的Web过滤器 -->  
  2.     <!--1、与web.xml对应的bean-->  
  3.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  4.         <property name="securityManager" ref="securityManager" />  
  5.         <!-- 如果没有认证将要跳转的登陆地址,http可访问的url,如果不在表单认证过虑器FormAuthenticationFilter中指定此地址就为身份认证地址 -->  
  6.         <property name="loginUrl" value="/login.action" />  
  7.         <!-- 没有权限跳转的地址 -->  
  8.         <property name="unauthorizedUrl" value="/pages/jsp/refuse.jsp" />  
  9.         <!--过滤定义,从上而下,蒋匿名的anon放最下面-->  
  10.         <property name="filterChainDefinitions">  
  11.             <value>  
  12.                 /** anon  
  13.             </value>  
  14.         </property>  
  15.     </bean>  
  16.   
  17.     <!-- 2、安全管理器 -->  
  18.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  19.         <property name="realm" ref="userRealm" />  
  20.     </bean>  
  21.   
  22.     <!--3、realm-->  
  23.     <bean id="userRealm" class="com.ycy.shiro.CustomRealm"/>  

3: shrio过滤器
上面所说的过滤器需要配置文件,配置如下
过滤器简称
对应的 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
(1)通常可将这些过滤器分为两组
  •     anon,authc,authcBasic,user是第一组认证过滤器
  •     perms,port,rest,roles,ssl是第二组授权过滤器
  •     注意user和authc不同:当应用开启了rememberMe时,用户下次访问时可以是一个user,但绝不会是authc,因为authc是需要重新认证的
  •                        user表示用户不一定已通过认证,只要曾被Shiro记住过登录状态的用户就可以正常发起请求,比如rememberMe
  •                        说白了,以前的一个用户登录时开启了rememberMe,然后他关闭浏览器,下次再访问时他就是一个user,而不会authc
例:
  •  /admin=authc,roles[admin]      表示用户必需已通过认证,并拥有admin角色才可以正常发起'/admin'请求
  •     /edit=authc,perms[admin:edit]  表示用户必需已通过认证,并拥有admin:edit权限才可以正常发起'/edit'请求
  •     /home=user                     表示用户不一定需要已经通过认证,只需要曾经被Shiro记住过登录状态就可以正常发起'/home'请求
(2)各默认过滤器常用如下(注意URL Pattern里用到的是两颗星,这样才能实现任意层次的全匹配)
  •     /admins/**=anon             无参,表示可匿名使用,可以理解为匿名用户或游客
  •     /admins/user/**=authc       无参,表示需认证才能使用
  •     /admins/user/**=authcBasic  无参,表示httpBasic认证
  •     /admins/user/**=user        无参,表示必须存在用户,当登入操作时不做检查
  •     /admins/user/**=ssl         无参,表示安全的URL请求,协议为https
  •     /admins/user/**=perms[user:add:*]
  •         参数可写多个,多参时必须加上引号,且参数之间用逗号分割,如/admins/user/**=perms["user:add:*,user:modify:*"]
  •         当有多个参数时必须每个参数都通过才算通过,相当于isPermitedAll()方法
  •     /admins/user/**=port[8081]
  •         当请求的URL端口不是8081时,跳转到schemal://serverName:8081?queryString
  •         其中schmal是协议http或https等,serverName是你访问的Host,8081是Port端口,queryString是你访问的URL里的?后面的参数
  •     /admins/user/**=rest[user]
  •         根据请求的方法,相当于/admins/user/**=perms[user:method],其中method为post,get,delete等
  •     /admins/user/**=roles[admin]
  •         参数可写多个,多个时必须加上引号,且参数之间用逗号分割,如/admins/user/**=roles["admin,guest"]
  •         当有多个参数时必须每个参数都通过才算通过,相当于hasAllRoles()方法
(3) 总结登录退出实例5步走
1、web.xml配置shiroFileter拦截器
2、applicationContext-shiro配置:1、首先配置 shiroFileter  2、设置securityManager 3、设置过滤表达式 4、设置我们自己的realm
3、再配置loginController,根据异常返回用户认证错误信息
4、配置FristController,从securityUtil.getInstance(),加入环境。然后获取subject主体,再用属性注入到实体
5、在frist.jsp 获取controller传入的activeUser数据展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值