一.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.PermissionAuthorizationFilter |
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.authz.UserFilter |
logout | org.apache.shiro.web.filter.authc.LogoutFilter |
二、过滤器分为两组
1.认证过滤器
anon(不认证也可以访问),authcBasic, authc(必须认证后才可访问),user
2.授权过滤器
perms(指定资源需要哪些权限才可以访问),Roles, ssl,rest, port
注意 user 和 authc 不同,当应用开启了rememberMe时,用户下次访问时可以是一个user,但绝不会是authc,因为authc是需要重新认证的。user表示用户不一定已通过认证,只要曾被Shiro记住过登录状态的用户就可以正常发起请求,比如rememberMe
3.使用案例
下面举几个例子介绍一下(注意URLPattern写的是两颗星,这样才能实现任意层次的全匹配)
/admin/**=anon
:无参,表示可匿名访问
/admin/user/**=authc
:无参,表示需要认证才能访问
/admin/user/**=authcBasic
:无参,表示需要httpBasic认证才能访问
/admin/user/**=ssl
:无参,表示需要安全的URL请求,协议为https
/home=user
:表示用户不一定需要通过认证,只要曾被 Shiro 记住过登录状态就可以正常发起 /home 请求
/edit=authc,perms[admin:edit]
:表示用户必需已通过认证,并拥有 admin:edit 权限才可以正常发起 /edit 请求
/admin=authc,roles[admin]
:表示用户必需已通过认证,并拥有 admin 角色才可以正常发起 /admin 请求
/admin/user/**=port[8081]
:当请求的URL端口不是8081时,跳转到schemal://serverName:8081?queryString
/admin/user/**=rest[user]
:根据请求方式来识别,相当于/admins/user/**=perms[user:get]或perms[user:post]
等等
/admin**=roles["admin,guest"]
:允许多个参数(逗号分隔),此时要全部通过才算通过,相当于hasAllRoles()
/admin**=perms["user:add:*,user:del:*"]
:允许多个参数(逗号分隔),此时要全部通过才算通过,相当于isPermitedAll()