2016-06-10 17 views
5

Şu ana kadar çalışmayı başaramadığım Spring Security yapılandırmamla uğraşıyorum. Özel PermissionEvaluator'um neden çağrılmadığını ve hasPermission ifadesini kullanarak @PreAuthorize notumun neden yok sayıldığını bilmiyorum.Neden özel PermissionEvaluator'um çağrılmıyor?

Web Güvenlik yapılandırması

@Configuration 
@EnableWebSecurity 
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http // 
       .addFilterBefore(wafflePreAuthFilter(), AbstractPreAuthenticatedProcessingFilter.class) // 
       .authenticationProvider(preauthAuthProvider()) // 
       .csrf().disable() // 
       .authorizeRequests() // 
       .antMatchers("/ui/**").authenticated() // 
       .anyRequest().permitAll(); 
    } 

    @Bean 
    public WafflePreAuthFilter wafflePreAuthFilter() throws Exception { 
     WafflePreAuthFilter filter = new WafflePreAuthFilter(); 
     filter.setAuthenticationManager(authenticationManager()); 
     return filter; 
    } 

    @Bean 
    public PreAuthenticatedAuthenticationProvider preauthAuthProvider() { 
     PreAuthenticatedAuthenticationProvider preauthAuthProvider = new PreAuthenticatedAuthenticationProvider(); 
     preauthAuthProvider.setPreAuthenticatedUserDetailsService(userDetailsServiceWrapper()); 
     return preauthAuthProvider; 
    } 

    @Bean 
    public UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> userDetailsServiceWrapper() { 
     UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> wrapper = new UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken>(); 
     wrapper.setUserDetailsService(myUserDetailsService()); 
     return wrapper; 
    } 

    @Bean 
    public UserDetailsService myUserDetailsService() { 
     return new myUserDetailsService(); 
    } 
} 

Yöntem Güvenlik yapılandırması

:

Spring 4.2.4 ve Bahar güvenliğini 4.1.0

Onun benim kod edilir kullanıyorum

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, proxyTargetClass = true) 
public class MyServiceMethodSecurityConfig extends GlobalMethodSecurityConfiguration { 
    @Bean 
    public PermissionEvaluator myPermissionEvaluator() { 
     return new DcePermissionEvaluator(); 
    } 

    @Override 
    public MethodSecurityExpressionHandler createExpressionHandler() { 
     DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); 
     expressionHandler.setPermissionEvaluator(myPermissionEvaluator()); 
     return expressionHandler; 
    } 
} 

PermissionEvaluator

public class MyPermissionEvaluator implements PermissionEvaluator { 
    @Autowired 
    private MyService myAutowiredService; 

    @Override 
    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) { 
     // checking permissions 
     return true; 
    } 

    @Override 
    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) { 
     // checking permissions 
     return true; 
    } 
} 

Herkes bana ne bir ipucu verebilirim? Ben bu işe MyServiceMethodSecurityConfig değiştirirseniz arada

ardından myPermissionEvaluator işlenmiş ancak Bahar tarafından yönetilmeyen olarak enjeksiyon çalışmaz bağımlılıkları edilir: Ben bu konuda koştum

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, proxyTargetClass = false) 
public class MyServiceMethodSecurityConfig extends GlobalMethodSecurityConfiguration { 

    @Override 
    public MethodSecurityExpressionHandler createExpressionHandler() { 
     DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); 
     expressionHandler.setPermissionEvaluator(new DcePermissionEvaluator()); 
     return expressionHandler; 
    } 
} 
+0

Bu konudaki herhangi bir gelişme var mı? – eduyayo

cevap

2

. Birden çok yerde belirtilen @EnableGlobalMethodSecurity ek açıklamasından kaynaklanmış gibi görünüyor.

Yukarıdakiler dışındaki konumlardan kaldırdığımda GlobalMethodSecurityConfiguration öğesinin uygulanması beklendiği gibi çalışmaya başladı.

+0

Teşekkür ederim, aynı sorunu yaşadım ve bir çözüm bulmak için bana HOURS mal oldu. Biri hariç tüm '@ EnableGlobalMethodSecurity 'notlarının kaldırılması hile yapar. İlginç bir şekilde, linux altında çalışırken, ancak pencereler altında değilken birden fazla ek açıklama ile çalıştı. – Alan47

İlgili konular