2015-08-02 10 views
7

@PreAuthorize ek açıklamasını kullanarak spring security (kullanıcı rolü yetkilendirmesi) ile ilgili bir örnek çalışıyorum, aşağıdaki hatayla karşılaştım.@PreAuthorize çalışmıyor - Çözülemez bir döngüsel referans var mı?

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) 

Benim WebSecurityConfigurerAdapter uzatma sınıftır: UserController içinde

@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"); 

} 

Ve yöntemi seviyesi yetkilendirme kontrolü:

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

ben anında kullanıcı yetkilileri (Liste) alıyorum İçinde 111 olan giriş

Hata yapan herhangi biri bana yardımcı olabilir mi?

cevap

0

WebSecurityConfigurerAdapter için statik değiştirici kullanmayın. pasajı aşağıdaki

Dene: notunu değil denetleyicinizdeki etrafında ancak uygulamanın civarında olmalıdır

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

@EnableAutoConfiguration.

1

Yakın geçmişte benzer bir sorun yaşadım.
Projemde @PreAuthorize ek açıklamaları ve denetim mantığını ele alan özellikler de vardı.

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

Umut birinin bu yararlı bulacaksınız pom.xml yılında

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

2.Add bağımlılık aşağıdaki şekilde
1. güncelleme güvenlik yapılandırmasında: Benim durumumda
o kadar yeterliydi.

İlgili konular