Shiro是一个很具灵活性的验证框架。
不过也有些不完美的地方。
因为,本身支持了permission级别的权限验证,role级别的就没怎么弄。
结果 RolesAuthorizationFilter 是按照 hasAllRoles来判断的。
http://shiro-user.582556.n2.nabble.com/Shiro-ini-multiple-roles-for-one-url-td6806837.html
因此想要 得到 满足一个role列表即可的判断,要自己实现判断的filter,代码如下。
不过也有些不完美的地方。
因为,本身支持了permission级别的权限验证,role级别的就没怎么弄。
结果 RolesAuthorizationFilter 是按照 hasAllRoles来判断的。
http://shiro-user.582556.n2.nabble.com/Shiro-ini-multiple-roles-for-one-url-td6806837.html
因此想要 得到 满足一个role列表即可的判断,要自己实现判断的filter,代码如下。
public class MyRolesAuthorizationFilter extends AuthorizationFilter {
@SuppressWarnings({"unchecked"})
public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
Subject subject = getSubject(request, response);
String[] rolesArray = (String[]) mappedValue;
if (rolesArray == null || rolesArray.length == 0) {
//no roles specified, so nothing to check - allow access.
return false;
}
List<String> roles = CollectionUtils.asList(rolesArray);
boolean[] hasRoles = subject.hasRoles(roles);
for (boolean hasRole : hasRoles) {
if (hasRole) {
return true;
}
}
return false;
}
}