Настроить настраиваемый заголовок ответа весной из PermissionEvaluator - PullRequest
0 голосов
/ 12 октября 2019

У меня есть пользовательский класс разрешений, как показано ниже, который я использую для обеспечения безопасности метода с @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());
        }
    }

1 Ответ

0 голосов
/ 13 октября 2019

Это может помочь кому-то в ближайшем будущем, я смог достичь этого таким образом.

HttpServletResponse resp  = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
        resp.setHeader("TEST", "TEST");
...