2016-07-14 21 views
2

私はSpringセキュリティーを使用してメソッドレベルでアクセスルールを定義しています。春のセキュリティ注釈はサービスレイヤーでは機能していません。しかし、コントローラレイヤーでは正常に動作します。ここで春のセキュリティ注釈がサービスレイヤーで機能しない

は私の設定です:

サービスが動作しない
@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
private UserDetailsService userDetailsService; 

@Bean 
public PasswordEncoder passwordEncoder() { 
    return new BCryptPasswordEncoder(); 
} 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth 
      .userDetailsService(userDetailsService) 
      .passwordEncoder(passwordEncoder()); 

} 

@Override 
public void configure(WebSecurity web) throws Exception { 
    web 
      .ignoring() 
      .antMatchers("/api/register") 
      .antMatchers("/api/activate") 
      .antMatchers("/api/lostpassword") 
      .antMatchers("/api/resetpassword"); 

} 

@Override 
@Bean 
public AuthenticationManager authenticationManagerBean() throws Exception { 
    return super.authenticationManagerBean(); 
} 

@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true) 
private static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration { 

    @Autowired 
    private MutableAclService mutableAclService; 

    @Autowired 
    private RoleHierarchy roleHierarchy; 

    public GlobalSecurityConfiguration() { 
     super(); 
    } 

    @Override 
    protected MethodSecurityExpressionHandler createExpressionHandler() { 
     DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); 
     expressionHandler.setPermissionEvaluator(new AclPermissionEvaluator(mutableAclService)); 
     expressionHandler.setRoleHierarchy(roleHierarchy); 
     return expressionHandler; 
    } 

} 

}

@Override 
@PreAuthorize("hasRole('ROLE_ADMIN')") 
public Iterable<Appliance> getAll() { 
    return applianceRepo.findAll(); 
} 

コントローラはうまく機能:

@PreAuthorize("hasRole('ROLE_ADMIN')") 
@RequestMapping(method = RequestMethod.GET) 
public ResponseEntity<PagedResources<Appliance>> getPage(@PageableDefault Pageable pageable, PagedResourcesAssembler pagedAssembler) { 
    Page<Appliance> appliancePage = applianceService.getPage(pageable); 
    return ResponseEntity.ok(pagedAssembler.toResource(appliancePage, applianceAssembler)); 
} 
+0

WebSecurityConfigなどに@EnableGlobalMethodSecurityアノテーションを追加する必要があります。 – Zemzela

+0

@Zemzela @EnableGlobalMethodSecurity(prePostEnabled = true、jsr250Enabled = true)を追加しましたが、動作しません。 –

+0

これをお読みください:http://websystique.com/spring-security/spring-security-4-method-security-using-preauthorize-postauthorize-secured-el役立つはずです – Zemzela

答えて

1

私は私は気づい入れて間違っている@PreAuthorize on getAll()方法であったが、getPage(pageable)方法で試験した。 Springのセキュリティー構成はうまくいきます。ご迷惑をおかけして申し訳ありません。

関連する問題