权限注解
AnonymousPermission
/**
* 未有用户登录时,进行匿名登录,允许匿名访问<br/>
* ----类注释,代表访问类中全部方法前检查<br/>
* ----方法注释,代表访问当前方法前检查
*
* @author
*
*/
@Target({
ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnonymousPermission {
}
package com.szqbl.lib.config;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import com.szqbl.lib.aop.AnonymousPermission;
@Component
public class AnonymousPermissionConfig implements ApplicationListener<ContextRefreshedEvent> {
private static final Logger logger = LoggerFactory.getLogger(AnonymousPermissionConfig.class);
public static Set<String> AnonymousPermissionUrls = new HashSet<>();
public static Set<String> AnonymousPermissionUrls_PathVariable = new HashSet<>();
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// 根容器为Spring容器
if (event.getApplicationContext().getParent() == null) {
Map<String, Object> beans = event.getApplicationContext().getBeansWithAnnotation(RequestMapping.class);
for (Object bean : beans.values()) {
RequestMapping classRM = bean.getClass().getAnnotation(RequestMapping.class);
AnonymousPermission classAR = bean.getClass().getAnnotation(AnonymousPermission.class);
if (classAR != null) {
Method[] methods = bean.getClass().getMethods();
for (Method declaredMethod : methods) {
RequestMapping methodRM = AnnotationUtils.findAnnotation(declaredMethod, RequestMapping.class);
if (methodRM != null) {
if (classRM.value().length == 0) {
if (methodRM.value().length == 0) {
AnonymousPermissionUrls.add("");
} else {
for (String method : methodRM.value()) {
AnonymousPermissionUrls.add(method);
}
}
} else {
for (String path : classRM.value()) {
if (methodRM.value().length == 0) {
AnonymousPermissionUrls.add(path);
} else {
for (String method : methodRM.value()) {
if (path.endsWith("/"))
path = path.substring(0, path.length() - 1);
if (method.startsWith("/"))
method = method.substring(1);
if ("".equals(path)) {
AnonymousPermissionUrls.add(method);
} else if ("".equals(method)) {
AnonymousPermissionUrls.add(path);
} else {
AnonymousPermissionUrls.add(path + "/" + method);
}
}
}
}
}
}
}
} else {
Method[] methods = bean.getClass().getMethods();
for (Method declaredMethod : methods) {
RequestMapping methodRM = AnnotationUtils.findAnnotation(declaredMethod, RequestMapping.class);
AnonymousPermission methodAR = AnnotationUtils.findAnnotation(declaredMethod,
AnonymousPermission.class);
if (methodRM != null && methodAR != null) {
if (classRM.value().length == 0) {
if (methodRM.value().length == 0) {
AnonymousPermissionUrls.add("");
} else {
for (String method : methodRM.value()) {
AnonymousPermissionUrls.add(method);
}
}
} else {
for (String path : classRM.value()) {
if (methodRM.value().length == 0) {
AnonymousPermissionUrls.add(path);
} else {
for (String method : methodRM.value()) {
if (path.endsWith("/"))
path = path.substring(0, path.length() - 1);
if (method.startsWith("/"))
method = method.substring(1);
if ("".equals(path)) {
AnonymousPermissionUrls.add(method);
} else if ("".equals(method)) {
AnonymousPermissionUrls.add(path);
} else {
AnonymousPermissionUrls.add(path + "/" + method);
}
}
}
}
}
}
}
}
}
}
AnonymousPermissionUrls.stream().filter(url -> url.indexOf("{") >= 0 && url.indexOf("}") >= 0)
.forEach(url -> AnonymousPermissionUrls_PathVariable.add(url));
logger.info("允许匿名访问地址:" + AnonymousPermissionUrls);
}
}