Cosa devo fare per poter utilizzare le espressioni di sicurezza # oauth2 a livello di metodo come nell'esempio seguente?# oauth2 espressioni di sicurezza a livello di metodo
@RequestMapping(value = "email", method = RequestMethod.GET)
@ResponseBody
@PreAuthorize("#oauth2.hasScope('read')")
public String email() {
return "[email protected]";
}
Se faccio una richiesta in tal risorsa ricevo
[INFO] java.lang.IllegalArgumentException: Failed to evaluate expression '#oauth2.hasScope('read')'
[INFO] at org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean(ExpressionUtils.java:14)
[INFO] at org.springframework.security.access.expression.method.ExpressionBasedPreInvocationAdvice.before(ExpressionBasedPreInvocationAdvice.java:44)
[INFO] at org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter.vote(PreInvocationAuthorizationAdviceVoter.java:57)
[INFO] at org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter.vote(PreInvocationAuthorizationAdviceVoter.java:25)
[INFO] at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:62)
[INFO] at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:232)
[INFO] at org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor.invoke(AspectJMethodSecurityInterceptor.java:43)
[INFO] at org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect.ajc$around$org_springframework_security_access_intercept_aspectj_aspect_AnnotationSecurityAspect$1$c4d57a2b(AnnotationSecurityAspect.aj:63)
[INFO] at pl.insert.controllers.ResourceController.email(ResourceController.java:22)
La stessa cosa funziona bene se a specificare l'accesso nel mio ResourceServerConfiguration invece di metodi @Controllers'
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.requestMatchers().antMatchers("/oauth/resources/**");
http.authorizeRequests().anyRequest().access("#oauth2.hasScope('read')");
}
}
Le espressioni di sicurezza standard come @PreAuthorize ("permitAll") o @PreAuthorize ("denyAll") funzionano come previsto. Quindi, probabilmente devo dire in qualche modo al mio AspectJMethodSecurityInterceptor di usare OAuth2WebSecurityExpressionHandler. Qualche idea?
Ciao @Marek! Hai trovato una soluzione al tuo problema? Stesso problema qui ... –
Purtroppo no, per quanto mi ricordo ho passato un po 'di tempo con questo, ma la soluzione era troppo complicata e, infine, non vale la pena di implementarla. Io uso @Configuration per farlo manualmente :(Nel mio caso questo non è così doloroso, ma posso immaginare che ci siano casi in cui potrebbe essere. –
ok grazie per la risposta –