У меня есть пользовательский класс разрешений, как показано ниже, который я использую для обеспечения безопасности метода с @PreAuthorize, он работает нормально, но мне нужно добавить пользовательские заголовки ответа, основанные на некоторой бизнес-логике из этого класса, если кто-то может пролить светв этой области это было бы очень полезно.
на контроллере
@ PreAuthorize ("hasPermission ('APP', 'GENERIC', 'VIEW')")
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator());
return expressionHandler;
}
}
public class CustomPermissionEvaluator implements PermissionEvaluator {
boolean dev = true;
public CustomPermissionEvaluator() {
}
public void init() {
}
@Override
public boolean hasPermission(
Authentication auth, Object targetDomainObject, Object permission) {
System.out.println("CustomPermissionEvaluator.hasPermission()-X");
if ((auth == null) || (targetDomainObject == null) || !(permission instanceof String)){
return false;
}
String targetType = targetDomainObject.getClass().getSimpleName().toUpperCase();
return hasPrivilege(auth, "X",targetType, permission.toString().toUpperCase());
}
@Override
public boolean hasPermission(
Authentication auth, Serializable category, String module, Object permission) {
String cat = (String) category;
System.out.println("CustomPermissionEvaluator.hasPermission()-Y "+module);
if ((auth == null) || StringUtils.isEmpty(module) || !(permission instanceof String)) {
return false;
}
return hasPrivilege(auth, cat,module.toUpperCase(), permission.toString().toUpperCase());
}
}