2015-08-02 10 views
7

Sto provando un esempio sulla sicurezza di primavera (autorizzazione ruolo utente) usando l'annotazione @PreAuthorize, rimasta bloccata con l'errore di sotto.@PreAuthorize non funziona - Esiste un riferimento circolare irrisolvibile?

Caused by: org.springframework.beans.BeanInstantiationException:   
    Failed to instantiate [org.aopalliance.intercept.MethodInterceptor]:  
    Factory method 'methodSecurityInterceptor' threw exception; nested exception is  org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'methodSecurityInterceptor': Requested bean is currently in creation: Is there an unresolvable circular reference? 
       at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
       at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
       ... 91 more 
     Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'methodSecurityInterceptor': Requested bean is currently in creation: I 
     s there an unresolvable circular reference? 
       at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:347) 
       at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
       at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
       at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) 
       at org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor.getAdvice(MethodSecurityMetadataSourceAdvisor.java:107) 
       at org.springframework.aop.aspectj.AspectJProxyUtils.isAspectJAdvice(AspectJProxyUtils.java:67) 
       at org.springframework.aop.aspectj.AspectJProxyUtils.makeAdvisorChainAspectJCapableIfNecessary(AspectJProxyUtils.java:49) 

mio WebSecurityConfigurerAdapter classe estensione è:

@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public static class FormLoginWebSecurityConfigurerAdapter extends 
     WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http.authorizeRequests().anyRequest().authenticated().and() 
       .formLogin().loginPage("/login").defaultSuccessUrl("/home") 
       .permitAll().and().logout().permitAll() 
       .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) 
       .logoutSuccessUrl("/login?logout").permitAll() 
       .and().httpBasic() 

       .and().exceptionHandling() 
       .accessDeniedPage("/access?error"); 

} 

E livello di metodo controllo di autorizzazione in UserController:

@Controller 
    @EnableAutoConfiguration 
    public class UserController { 
    @PreAuthorize("hasAnyAuthority('111')") 
     @RequestMapping(value = "/users") 
     public String userManagement(Model model) { 
      . 
      return something; 
     } 
    } 

sto ottenendo autorità utente (List), al momento della login che ha 111 in esso

Qualcuno mi può aiutare con l'errore sto affrontando?

risposta

0

Non utilizzare modificatore statico per WebSecurityConfigurerAdapter.

Prova seguente frammento di codice:

@Configuration 
@EnableWebSecurity 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
@EnableGlobalMethodSecurity(securedEnabled = true, proxyTargetClass = true, prePostEnabled = true) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 
// do your stuff here 

@EnableAutoConfiguration anotation non dovrebbe essere intorno al vostro controller, ma intorno alla vostra applicazione.

1

Recentemente ho avuto il problema simile.
Nel mio progetto c'erano @PreAuthorize annotazioni e anche aspetti che gestivano la logica di controllo.
Nel mio caso è stato sufficiente per:
1. config sicurezza aggiornamento nel seguente modo

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(mode = ASPECTJ, prePostEnabled = true, securedEnabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter` 

2.Add dipendenza nel pom.xml

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-aspects</artifactId> 
    <version>4.1.0.RELEASE</version> 
</dependency> 

La speranza che qualcuno troverà che utile.

Problemi correlati