2017-03-08 3 views
1

Ich möchte @PreAuthorize mit SpEL innerhalb Spring Security wie das Beispiel bei http://forum.spring.io/forum/spring-projects/security/100708-spel-and-spring-security-3-accessing-bean-reference-in-preauthorize verwenden, aber dies ist nicht für mich arbeiten, während es in Spring Security 4.1.4. Unten ist mein Beispielcode:Verwendung anderer Bean und Methode in Spring Security @ PreAuthorize

Eine Bean-Klasse:

package com.service.spel; 

import org.springframework.stereotype.Component; 

@Component(value="accessBean") 
public class AccessCheckBean { 
    public String getPermision(){ 
     /** 
     * return the api permision 
     */ 
     String scope = "#oauth2.hasScope('resource.Update')"; 
     return scope; 
    } 
} 

In Controller:

@PreAuthorize("accessBean.getPermision()") 
    @GetMapping("/perm") 
    public @ResponseBody String getPerm(){ 
     return "Perm"; 
    } 

Fehlermeldung:

Fehlgeschlagen Ausdruck auszuwerten ‚accessBean.getPermision() '

scheint, ich kann SpEL nicht wie oben verwenden, dann, wenn ich diese Version von Spring Security verwende, wie kann ich fortfahren?

Antwort

1

Sie haben @ zu verwenden, finden Sie Spring Security Reference:

Wenn Sie die Ausdrücke erweitern möchten, die verfügbar sind, können Sie einfach an jeden Frühling Bean verweisen können Sie aussetzen. Wenn zum Beispiel angenommen haben Sie eine Bean mit dem Namen webSecurity, die die folgenden Methodensignatur enthält:

public class WebSecurity { 
     public boolean check(Authentication authentication, HttpServletRequest request) { 
       ... 
     } 
} 

Sie auf das Verfahren beziehen könnten mit:

<http> 
    <intercept-url pattern="/user/**" 
     access="@webSecurity.check(authentication,request)"/> 
    ... 
</http> 

oder in Java-Konfiguration

http 
     .authorizeRequests() 
       .antMatchers("/user/**").access("@webSecurity.check(authentication,request)") 
       ... 
Verwandte Themen