스프링 MethodSecurityExpressionRoot를 확장하고 (자신의 MethodSecurityExpressionHandler에서 생성) String을 제외한 eval 메소드를 추가하고 SpringExpressionParser가 String을 평가하도록 할 수 있습니다. ... 일을해야
편집 :
약간의 코드 :
public class MySpringSecurityRoot extends MethodSecurityExpressionRoot {
private MyMethodSecurityExpressionHandler handler; // to be injected in the handler
public boolean eval(String expression) {
Expression expression = handler.getExpressionParser().parseExpression(expression);
return ExpressionUtils.evaluateAsBoolean(
handler.getExpressionParser().parseExpression(expression),
handler.createEvaluationContext(authentification, methodInvocation));
}
}
핸들러는 기본 방법 보안 발현 핸들러로 설정해야합니다
:
<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="myHandler"/>
</security:global-method-security>
지금 eval 함수 모든 메서드 보안 표현식에서 액세스 할 수 있습니다.
하지만 반드시 있어야합니다. 보안 규칙을 설명하는 사람이 현재 봄 컨텍스트 내의 모든 빈을 액세스 할 수 있다는 사실을 알고 있어야합니다. 보안 유출 일 수도 있습니다.
내가 제대로 대답을 이해하면 나는 확실하지 않다 :이 ARG1
및 컨텍스트를 위해 유선으로
mySecurityService은 부울을 반환하는 모든 콩/방법이 될 수 있습니다 그러나 인수에 저장된 보안 표현식을 평가하는 방법과 달리 인수를 얻는 방법에 초점을 맞추는 것 같습니다. 이미 인수에 액세스 할 수 있지만 보안 표현식 (즉, @ mySecurityService.hasPermission() 비트)을 평가하는 방법을 모르겠습니다. –
그냥 @ 다음 원하는 콩 및 메서드를 사용하십시오 ... – NimChimpsky
것은 내가 표현을 평가하기 위해 봄에 의존하고 있습니다. 나는 그것을하기위한 나의 방법이 없다. –