zoukankan      html  css  js  c++  java
  • apache shiro内置过滤器 标签 注解

    内置过滤器
    anon(匿名)  org.apache.shiro.web.filter.authc.AnonymousFilter
    authc(身份验证)       org.apache.shiro.web.filter.authc.FormAuthenticationFilter
    authcBasic(http基本验证)    org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
    logout(退出)        org.apache.shiro.web.filter.authc.LogoutFilter
    noSessionCreation(不创建session) org.apache.shiro.web.filter.session.NoSessionCreationFilter
    perms(许可验证)  org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
    port(端口验证)   org.apache.shiro.web.filter.authz.PortFilter
    rest  (rest方面)  org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
    roles(权限验证)  org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
    ssl (ssl方面)   org.apache.shiro.web.filter.authz.SslFilter
    user (用户方面)  org.apache.shiro.web.filter.authc.UserFilter
     

    身份验证相关的
    authc
    org.apache.shiro.web.filter.authc.FormAuthenticationFilter
    基于表单的拦截器;如“/**=authc”,如果没有登录会跳到相应的登录页面登录;主要属性:usernameParam:表单提交的用户名参数名( username); passwordParam:表单提交的密码参数名(password); rememberMeParam:表单提交的密码参数名(rememberMe); loginUrl:登录页面地址(/login.jsp);successUrl:登录成功后的默认重定向地址; failureKeyAttribute:登录失败后错误信息存储key(shiroLoginFailure);
    authcBasic
    org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
    Basic HTTP身份验证拦截器,主要属性: applicationName:弹出登录框显示的信息(application);
    logout
    org.apache.shiro.web.filter.authc.LogoutFilter
    退出拦截器,主要属性:redirectUrl:退出成功后重定向的地址(/);示例“/logout=logout”
    user
    org.apache.shiro.web.filter.authc.UserFilter
    用户拦截器,用户已经身份验证/记住我登录的都可;示例“/**=user”
    anon
    org.apache.shiro.web.filter.authc.AnonymousFilter
    匿名拦截器,即不需要登录即可访问;一般用于静态资源过滤;示例“/static/**=anon”

    授权相关的
    roles
    org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
    角色授权拦截器,验证用户是否拥有所有角色;主要属性: loginUrl:登录页面地址(/login.jsp);unauthorizedUrl:未授权后重定向的地址;示例“/admin/**=roles[admin]”
    perms
    org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
    权限授权拦截器,验证用户是否拥有所有权限;属性和roles一样;示例“/user/**=perms["user:create"]”
    port
    org.apache.shiro.web.filter.authz.PortFilter
    端口拦截器,主要属性:port(80):可以通过的端口;示例“/test= port[80]”,如果用户访问该页面是非80,将自动将请求端口改为80并重定向到该80端口,其他路径/参数等都一样
    rest
    org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
    rest风格拦截器,自动根据请求方法构建权限字符串(GET=read, POST=create,PUT=update,DELETE=delete,HEAD=read,TRACE=read,OPTIONS=read, MKCOL=create)构建权限字符串;示例“/users=rest[user]”,会自动拼出“user:read,user:create,user:update,user:delete”权限字符串进行权限匹配(所有都得匹配,isPermittedAll);
    ssl
    org.apache.shiro.web.filter.authz.SslFilter
    SSL拦截器,只有请求协议是https才能通过;否则自动跳转会https端口(443);其他和port拦截器一样;


    其他
    noSessionCreation
    org.apache.shiro.web.filter.session.NoSessionCreationFilter
    不创建会话拦截器,调用 subject.getSession(false)不会有什么问题,但是如果 subject.getSession(true)将抛出 DisabledSessionException异常;

    详细说明:
    rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
    port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
    perms:例子/admins/user/**=perms[user:add:*],perms参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
    roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如/admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
    anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
    authc:例如/admins/user/**=authc表示需要认证才能使用,没有参数。
    authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证。
    ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https。
    user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查。
     
    这些过滤器分为两组,一组是认证过滤器,一组是授权过滤器。
    其中anon,authcBasic,auchc,user是第一组,perms,roles,ssl,rest,port是第二组。
     
    注释支持
    @RequiresAuthentication 验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时;
    @RequiresUser 验证用户是否被记忆,user有两种含义:一种是成功登录的(subject.isAuthenticated()结果为true)另外一种是被记忆的(subject.isRemembered()结果为true);
    @RequiresGuest 验证是否为匿名请求;
    @RequiresRoles 必须要有角色;
    @RequiresPermissions 必须要有权限;
     
    jsp-taglib支持 
    <shiro:authenticated> 登录之后
    <shiro:notAuthenticated> 不在登录状态时
    <shiro:guest> 用户在没有RememberMe时
    <shiro:user> 用户在RememberMe时
    <shiro:hasAnyRoles name="abc,123"> 在有abc或者123角色时
    <shiro:hasRole name="abc"> 拥有角色abc
    <shiro:lacksRole name="abc"> 没有角色abc
    <shiro:hasPermission name="abc"> 拥有权限abc
    <shiro:lacksPermission name="abc"> 没有权限abc
    <shiro:principal> 显示用户登录名
     
    参考:http://yingzhuo.iteye.com/blog/1709002
     
        shiro功能相当强大,主要由四部分组成;一,身份认证;二,授权;三,会话管理;四,数据加密;还有一些额外的支持,比如针对web应用提供支持、缓存支持、多线程相关支持、测试相关支持等;框架不仅适用于web应用,也同样可以在application中适用;
        不过,如果一个系统仅仅只需要身份认证(访问时认证用户身份)和授权(针对访问URL来设置权限、访问方法上设置权限);个人认为,如果业务不复杂的情况下,完全没有必要使用shiro;因为,shiro强大并非使用它的理由!事实上一般的中、小型系统根本没必要用;如果通过普通的过滤器与拦截器就能轻易解决的问题,就没必要动用shiro;因为,那样速度会更快;当然,有必要掌握shiro,因为目前是它最出色;
  • 相关阅读:
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    课程总结
  • 原文地址:https://www.cnblogs.com/koal/p/5235379.html
Copyright © 2011-2022 走看看