运行 Web 应用时,Shiro会创建一些有用的默认 Filter 实例,并自动地在 [main] 项中将它们置为可用
这些可用的默认的 Filter 实例是被 DefaultFilter 枚举类定义的(枚举的名称字段就是可供配置的名称)
- ssl :org.apache.shiro.web.filter.authz.SslFilter
- user :org.apache.shiro.web.filter.authz.UserFilter
- anon :org.apache.shiro.web.filter.authc.AnonymousFilter
- port :org.apache.shiro.web.filter.authz.PortFilter
- rest :org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
- authc :org.apache.shiro.web.filter.authc.FormAuthenticationFilter
- perms :org.apache.shiro.web.filter.authz.PermissionAuthorizationFilter
- roles :org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
- logout :org.apache.shiro.web.filter.authc.LogoutFilter
- authcBasic :org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
- noSessionCreation :org.apache.shiro.web.filter.session.NoSessionCreationFilter
这些过滤器分为两组:
u 认证过滤器:anon(不认证也可以访问),authcBasic, authc(必须认证后才可
访问),user
u 授权过滤器:perms(指定资源需要哪些权限才可以访问),Roles, ssl,rest, port
注意 user 和 authc 不同
当应用开启了rememberMe时,用户下次访问时可以是一个user,但绝不会是authc,因为authc是需要重新认证的
user表示用户不一定已通过认证,只要曾被Shiro记住过登录状态的用户就可以正常发起请求,比如rememberMe
说白了:以前的一个用户登录时开启了rememberMe,然后他关闭浏览器,下次再访问时他就是一个user,而不会authc
下面举几个例子介绍一下(注意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()