List<AuthorizeType> result = urlAnalyze.check(requestUrl);
String action = StringUtil.toCamelCase(trimToNull(rundata.getParameters().getString(actionParam)));
String eventName = getEventName();
// 首先判断是否登录
User user = (User) rundata.getRequest().getSession().getAttribute(WebConstant.USER_SESSION_KEY);
if (StringUtils.isNotEmpty(action)) {
result.addAll(urlAnalyze.check(action, eventName));
}
if (result.isEmpty()) {
// 访问的连接不符合权限匹配规则,跳转到登录页面
redirect(pipelineContext, rundata, forbiddenLink);
} else {
if (null == user) {
// 如果用户未登录,则判断访问连接的权限匹配集合:
// 1.如果有高于匿名权限,则跳转到登录页面;
// 2.如果集合中只包含匿名权限,则通过。
if (result.contains(AuthorizeType.OPERATOR) || result.contains(AuthorizeType.ADMIN)) {
redirect(pipelineContext, rundata, loginLink);
} else {
pipelineContext.invokeNext();
}
} else {
// 如果用户已经登录,则判断访问连接的权限匹配集合:
// 1.如果权限集合有等于(低于)用户权限,则通过;
// 2.如果权限集合有高于用户权限,则跳转到登录页面。
if (compareAuth(user.getAuthorizeType(), result)) {
pipelineContext.invokeNext();
} else {
redirect(pipelineContext, rundata, forbiddenLink);
}
}