shiro基础(一)shiroFilter

一、功能简介

shiro是java的一个安全(权限)框架,不仅可以用于javaSE环境,还可以用于javaEE环境。shiro可以完成认证、授权、加密、会话管理、缓存等功能。

  • Authentication:身份认证/登录。
  • Authorization:授权,即权限验证。
  • Session Manager:会话管理
  • Crpytography:加密
  • Web Support:Web集成
  • Remember Me:记住我

二、shiro架构

shiro框架(从外部看)

  • Subject:应用代码直接交互的对象,代表了当前“用户”,这个用户不一定指的是具体的人,与当前应用交互的任何东西都可以是Subject。而且与Subject的所有交互都会委托给SecurityManager,Subject其实就是一个门面,SecurityManager才是真正的执行者。
  • SecurityManager:安全管理器,也就是说所有和安全有关的操作都会与它交互。它也是shiro的核心,负责和其他shiro组件的交互。相当于springmvc的DispatcherServlet。
  • Realm:shiro从Realm获取安全数据比如角色,权限。如果SecurityManager要验证用户身份,那么就要从Realm获取相应的用户进行比较,确定用户身份是否合法。可以把Realm看成datasource。

shiro框架(从内部看)

  • Subject:任何可以与应用交互的“用户“。
  • SecurityManager:相当于SpringMVC的DispatcherServlet,核心。
  • Authenticator:负责Subject的认证,可以自定义实现。包含多种认证策略。
  • Authorizer:授权器,也就是访问控制器。控制用户能访问应用中的哪些功能。
  • Realm:可以认为是安全实体数据源,获取安全实体,可以有一个或者多个。
  • SessionManager:管理Session生命周期组件。
  • CacheManager:缓存控制器。
  • Cryptography:密码模块,提供加密组件。

三、集成

与Spring集成

  1. 加入Spring好Shiro的jar包。
  2. 配置Spring和SpringMVC。
  3. 参照1.3.2shiro-root-1.3.2-source-releaseshiro-root-1.3.2samplesspring配置web.xml和Spring配置文件。

与web集成

  1. shiro提供了与web集成的支持,其通过一个shiroFilter入口拦截需要控制的url,然后进行相应的权限控制。
  2. shiroFilter类似于springmvc中的前端控制器,是安全控制的入口点,负责读取配置文件,比如ini配置文件,然后判断url是否需要登录/权限等工作。

四、shiroFilter

下面看shiroFilter在web.xml中的配置:

<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>tartgetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattren>*</url-pattern>
</filter-mapping>

DelegatingFilterProxy的作用就是自动到spring的容器中,查找名字为shiroFilter(filter-name)的bean,并将所有filter的操作委托给spring的容器中的bean。

shiro默认的过滤器

  • anon:没有参数,表示可以匿名使用。例子:/admin/**=anon
  • authc:没有参数,表四需要认证(登录)才能使用。例子:/user/**=authc
  • roles:角色过滤器,判断当前用户是否拥有指定角色。例子:admins/**=roles[“admin,guest”]

url匹配模式(使用Ant风格模式)

Ant路径通配符支持、*、**,注意通配符匹配不包括目录分隔符"/"

  • :匹配一个字符,比如/admin将匹配/admin1,但是不匹配/admin或者/admin/
  • *:匹配0个或者多个字符串,比如/admin*将匹配/admin或者/admin123,但是不匹配/admin/1
  • **:匹配路径中的0个或者多个路径,比如/admin/**将匹配/admin/a或者/admin/a/s

url匹配顺序

url匹配顺序按照第一次匹配优先原则,即从头开始选择第一个能匹配上的拦截器链。

比如:

/admin/**=filter1

/admin/user=filter2

/**=filter3

如果请求的是/admin/user,将使用filter1拦截。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
web.xml配置 因为我们是与spring进行集成的,而spring的基本就是web项目的xml文件。所以我们在web.xml中配置shiros的过滤拦截。正常情况下,我们需要将shirofilter配置在所有的filter前面,当然和encodingFilter这个filter是不区分前后的。因为两者互相不影响的。spring-shiro.xml 这里我们将来看看spring-shiro.xml的配置,这里我采取倒叙的方式讲解,我觉的倒叙更加的有助于我们理解代码。首先我们还记得在web.xml中配置的那个filter吧,名字shiroFilter,对spring-shiro.xml配置文件就是通过这个filter展开的。首先我们在web.xml配置的过滤器实际上是配置ShiroFilterFactoryBean,所以在这里需要将ShiroFilterFactoryBean定义为shiroFilter <!-- Shiro的核心安全接口,这个属性是必须的 --> <!-- 要求登录时的链接(可根据项目的URL进行替换),非必须的属性,默认会自动寻找Web工程根目录下的"/login.html"页面 --> <!-- 登录成功后要跳转的连接 --> <!-- 用户访问未对其授权的资源时,所显示的连接 --> <!-- 若想更明显的测试此属性可以修改它的值,如unauthor.jsp,然后用[玄玉]登录后访问/admin/listUser.jsp就看见浏览器会显示unauthor.jsp --> <!-- Shiro连接约束配置,即过滤链的定义 --> <!-- 此处可配合我的这篇文章来理解各个过滤连的作用http://blog.csdn.net/jadyer/article/details/12172839 --> <!-- 下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 --> <!-- anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种 --> <!-- authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter --> /statics/**=anon /login.html=anon /sys/schedule.html=perms[sys:schedule:save] /sys/login=anon /captcha.jpg=anon /**=authc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluepad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值