2016-09-01 7 views
0

私は@PreAuthorizeアノテーションを使用してUserリソースへのアクセスをフィルタリングして、Userだけが自分のリソースにアクセスできるようにするSpring Bootアプリケーションを開発しています。@PreAuthorizeを使用したエラー

@Repository 
@RepositoryRestResource 
public interface MyUserRepository extends PagingAndSortingRepository<MyUser, UUID> { 
    @Override 
    @PreAuthorize("principal.getId().equals(#uuid)") 
    MyUser findOne(UUID uuid); 

    MyUser findByUsername(@Param("username") String username); 

    MyUser findByEmail(@Param("email") String email); 

} 

あなたはスタックトレースhereを見ることができます:ここに私のUserRepositoryです。スタックトレースで

どこかには、クラスWebSecurityConfigライン42を参照する。これは、以下のクラスのメソッドconfigureAuthentication:

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private RestAuthenticationEntryPoint unauthorizedHandler; 

    @Autowired 
    private BasicUserDetailsService userDetailsService; 

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

    @Autowired 
    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { 
     authenticationManagerBuilder 
       .userDetailsService(this.userDetailsService) 
       .passwordEncoder(passwordEncoder()); 
    } 

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

    @Bean 
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception { 
     JwtAuthenticationTokenFilter authenticationTokenFilter = new JwtAuthenticationTokenFilter(); 
     authenticationTokenFilter.setAuthenticationManager(authenticationManagerBean()); 
     return authenticationTokenFilter; 
    } 

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

      // we don't need CSRF because our token is invulnerable 
      .csrf().disable() 

      .exceptionHandling() 
       .authenticationEntryPoint(unauthorizedHandler) 
       .and() 

      // don't create session 
      .sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
       .and() 

      .authorizeRequests() 
       .antMatchers(HttpMethod.POST, "/login").permitAll() 
       .antMatchers(HttpMethod.POST, "/myUsers").permitAll() 
       .antMatchers(HttpMethod.PUT).authenticated() 
       .antMatchers(HttpMethod.POST).authenticated() 
       .antMatchers(HttpMethod.DELETE).authenticated() 
       .antMatchers(HttpMethod.PATCH).authenticated() 
       .anyRequest().permitAll(); 

     // Custom JWT based security filter 
     http.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

     http.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class); 

    } 
} 

ありがとうございます!

+0

MyUserRepositoryの実装はありませんか? – jlumietu

+0

もちろん、コードの最初の部分でそれを見ることができます。 – bergacat1

+0

これはinferfaceですね。 – jlumietu

答えて

0

スプリングブート1.4にアップデートすることで問題は解決しました。

関連する問題