总览

org.apache.shiro.web.filter.mgt.DefaultFilter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum DefaultFilter {
anon(AnonymousFilter.class),
authc(FormAuthenticationFilter.class),
authcBasic(BasicHttpAuthenticationFilter.class),
logout(LogoutFilter.class),
noSessionCreation(NoSessionCreationFilter.class),
perms(PermissionsAuthorizationFilter.class),
port(PortFilter.class),
rest(HttpMethodPermissionFilter.class),
roles(RolesAuthorizationFilter.class),
ssl(SslFilter.class),
user(UserFilter.class);
//...
}

身份认证相关的filter

anon

匿名filter,表示可以匿名访问的资源的filter。

比如,静态资源的配置:

1
2
/css/** = anon
/js/** = anon

authc

和form表单相关的filter,当访问需要身份认证的页面但是还没有通过身份认证会跳转到配置的登录地址。

此处的身份认证指的是已经调用过Realm的doGetAuthenticationInfo方法。

常用属性:

  • usernameParam:登录表单中的用户名对应的参数名(username)
  • passwordParam:登录表单中的密码对应的参数名(password)
  • rememberMeParam:”记住我”参数对应的参数名(rememberMe)
  • loginUrl:登录页面的URI
  • successUrl:登录成功后默认重定向到哪个地址
  • failureKeyAttribute:认证失败时错误信息的键(shiroLoginFailure)

user

user这个filter和authc不同的地方是:

  • authc是必须已经调用过Realm的doGetAuthenticationInfo方法才能通过
  • user是调用过Realm的doGetAuthenticationInfo法或者rememberMe就可通过

authcBasic

和BasicHttp认证相关的身份认证filter,用的并不是很多。此处略过。

logout

退出登录拦截器。

常用属性:

  • redirectUrl:退出登录后重定向到哪个页面

授权相关的filter

roles

只有拥有指定role的用户才能访问对应的URL

1
2
/shiro/user.jsp = roles[user]
/shiro/admin.jsp = roles[admin]

常用属性

  • loginUrl:登录URI
  • unauthorizedUrl:用户权限不足时该去哪个页面

perms

只有拥有指定的permission的用户才能访问对应的URL

1
/shiro/user/** = perms[user:create]

port

可以将请求重定向至指定的端口

常用属性

  • port:指定的端口(80)

ssl

只有是HTTPS请求才能通过。若不是https请求,则自动转发至https端口(默认443)。

rest

和目前比较流行的优雅的RestAPI相关的filter。
这个filter比较流行也比较灵活。以后有时间再专门记录这方面的资料。

可以根据请求的RestURL自动拼接处权限验证的字符串。