AnnotationTarget target = annotation.target();
if (!(target instanceof ClassInfo)) {
continue;
}
ClassInfo classInfo = ClassInfo.class.cast(target);
AnnotationMetaData annotationMD = annotations.get(classInfo.toString());
if (annotationMD == null) {
annotationMD = new AnnotationMetaData();
annotationMD.setClassName(classInfo.toString());
annotations.add(annotationMD);
}
if (annotation.value() == null) {
throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidRunAsAnnotation(target));
}
RunAsMetaData runAs = new RunAsMetaData();
runAs.setRoleName(annotation.value().asString());
annotationMD.setRunAs(runAs);
}
}
// @DeclareRoles
final List<AnnotationInstance> declareRolesAnnotations = index.getAnnotations(declareRoles);
if (declareRolesAnnotations != null && declareRolesAnnotations.size() > 0) {
SecurityRolesMetaData securityRoles = metaData.getSecurityRoles();
if (securityRoles == null) {
securityRoles = new SecurityRolesMetaData();
metaData.setSecurityRoles(securityRoles);
}
for (final AnnotationInstance annotation : declareRolesAnnotations) {
if (annotation.value() == null) {
throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidDeclareRolesAnnotation(annotation.target()));
}
for (String role : annotation.value().asStringArray()) {
SecurityRoleMetaData sr = new SecurityRoleMetaData();
sr.setRoleName(role);
securityRoles.add(sr);
}
}
}
// @MultipartConfig
final List<AnnotationInstance> multipartConfigAnnotations = index.getAnnotations(multipartConfig);
if (multipartConfigAnnotations != null && multipartConfigAnnotations.size() > 0) {
AnnotationsMetaData annotations = metaData.getAnnotations();
if (annotations == null) {
annotations = new AnnotationsMetaData();
metaData.setAnnotations(annotations);
}
for (final AnnotationInstance annotation : multipartConfigAnnotations) {
AnnotationTarget target = annotation.target();
if (!(target instanceof ClassInfo)) {
throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidMultipartConfigAnnotation(target));
}
ClassInfo classInfo = ClassInfo.class.cast(target);
AnnotationMetaData annotationMD = annotations.get(classInfo.toString());
if (annotationMD == null) {
annotationMD = new AnnotationMetaData();
annotationMD.setClassName(classInfo.toString());
annotations.add(annotationMD);
}
MultipartConfigMetaData multipartConfig = new MultipartConfigMetaData();
AnnotationValue locationValue = annotation.value("location");
if (locationValue != null && locationValue.asString().length() > 0) {
multipartConfig.setLocation(locationValue.asString());
}
AnnotationValue maxFileSizeValue = annotation.value("maxFileSize");
if (maxFileSizeValue != null && maxFileSizeValue.asLong() != -1L) {
multipartConfig.setMaxFileSize(maxFileSizeValue.asLong());
}
AnnotationValue maxRequestSizeValue = annotation.value("maxRequestSize");
if (maxRequestSizeValue != null && maxRequestSizeValue.asLong() != -1L) {
multipartConfig.setMaxRequestSize(maxRequestSizeValue.asLong());
}
AnnotationValue fileSizeThresholdValue = annotation.value("fileSizeThreshold");
if (fileSizeThresholdValue != null && fileSizeThresholdValue.asInt() != 0) {
multipartConfig.setFileSizeThreshold(fileSizeThresholdValue.asInt());
}
annotationMD.setMultipartConfig(multipartConfig);
}
}
// @ServletSecurity
final List<AnnotationInstance> servletSecurityAnnotations = index.getAnnotations(servletSecurity);
if (servletSecurityAnnotations != null && servletSecurityAnnotations.size() > 0) {
AnnotationsMetaData annotations = metaData.getAnnotations();
if (annotations == null) {
annotations = new AnnotationsMetaData();
metaData.setAnnotations(annotations);
}
for (final AnnotationInstance annotation : servletSecurityAnnotations) {
AnnotationTarget target = annotation.target();
if (!(target instanceof ClassInfo)) {
throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidServletSecurityAnnotation(target));
}
ClassInfo classInfo = ClassInfo.class.cast(target);
AnnotationMetaData annotationMD = annotations.get(classInfo.toString());
if (annotationMD == null) {
annotationMD = new AnnotationMetaData();
annotationMD.setClassName(classInfo.toString());
annotations.add(annotationMD);
}
ServletSecurityMetaData servletSecurity = new ServletSecurityMetaData();
AnnotationValue httpConstraintValue = annotation.value();
List<String> rolesAllowed = new ArrayList<String>();
if (httpConstraintValue != null) {
AnnotationInstance httpConstraint = httpConstraintValue.asNested();
AnnotationValue httpConstraintERSValue = httpConstraint.value();
if (httpConstraintERSValue != null) {
servletSecurity.setEmptyRoleSemantic(EmptyRoleSemanticType.valueOf(httpConstraintERSValue.asEnum()));
}
AnnotationValue httpConstraintTGValue = httpConstraint.value("transportGuarantee");
if (httpConstraintTGValue != null) {
servletSecurity.setTransportGuarantee(TransportGuaranteeType.valueOf(httpConstraintTGValue.asEnum()));
}
AnnotationValue rolesAllowedValue = httpConstraint.value("rolesAllowed");
if (rolesAllowedValue != null) {
for (String role : rolesAllowedValue.asStringArray()) {
rolesAllowed.add(role);
}
}
}
servletSecurity.setRolesAllowed(rolesAllowed);
AnnotationValue httpMethodConstraintsValue = annotation.value("httpMethodConstraints");
if (httpMethodConstraintsValue != null) {
AnnotationInstance[] httpMethodConstraints = httpMethodConstraintsValue.asNestedArray();
if (httpMethodConstraints.length > 0) {
List<HttpMethodConstraintMetaData> methodConstraints = new ArrayList<HttpMethodConstraintMetaData>();
for (AnnotationInstance httpMethodConstraint : httpMethodConstraints) {
HttpMethodConstraintMetaData methodConstraint = new HttpMethodConstraintMetaData();
AnnotationValue httpMethodConstraintValue = httpMethodConstraint.value();
if (httpMethodConstraintValue != null) {
methodConstraint.setMethod(httpMethodConstraintValue.asString());
}
AnnotationValue httpMethodConstraintERSValue = httpMethodConstraint.value("emptyRoleSemantic");
if (httpMethodConstraintERSValue != null) {
methodConstraint.setEmptyRoleSemantic(EmptyRoleSemanticType.valueOf(httpMethodConstraintERSValue.asEnum()));
}
AnnotationValue httpMethodConstraintTGValue = httpMethodConstraint.value("transportGuarantee");
if (httpMethodConstraintTGValue != null) {
methodConstraint.setTransportGuarantee(TransportGuaranteeType.valueOf(httpMethodConstraintTGValue.asEnum()));
}
AnnotationValue rolesAllowedValue = httpMethodConstraint.value("rolesAllowed");
rolesAllowed = new ArrayList<String>();
if (rolesAllowedValue != null) {
for (String role : rolesAllowedValue.asStringArray()) {
rolesAllowed.add(role);
}
}
methodConstraint.setRolesAllowed(rolesAllowed);
methodConstraints.add(methodConstraint);
}
servletSecurity.setHttpMethodConstraints(methodConstraints);
}
}
annotationMD.setServletSecurity(servletSecurity);
}
}
return metaData;
}