问答详情
源自:4-4 Shiro过滤器

为什么数组中有不符合条件的依旧通过验证

roles中只有“admin”,而rolesOr[“admin”,“admin1”],每次都能通过验证?打印role也只有一个“admin”,这是为什么呢?浏览器,idea,tomcat都重启过了,缓存也清了。

提问者:黑色的白兔 2019-02-22 16:55

个回答

  • Woodo
    2019-05-09 14:33:09


    public class RolesAuthorizationFilter extends AuthorizationFilter {

        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 true;

            }

            Set<String> roles = CollectionUtils.asSet(rolesArray);

            return subject.hasAllRoles(roles);

        }

    }


  • zzzzzzz小盆友
    2019-03-06 09:19:04

    rolesOr这个自定义的filter就是实现满足数组参数中的任意一个角色都能通过的,过滤实现的是or的关系。而shiro自带的roles角色过滤是and的关系.