Аннотация @PreAuthorize не работает для JpaRepository в Spring - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблема с моим UsersRepository, как показано ниже.

У меня есть репозиторий Users, в котором я пытаюсь отобразить всех пользователей в моей базе данных, только если вошедший в систему пользователь - «Admin».

Однако приведенный ниже код возвращает всех пользователей, когда я расширяю JpaRepository.Когда я расширяю CrudRepository, он работает нормально.

Это известное ограничение или я что-то не так делаю?

   @Repository
    public interface UserRepository extends JpaRepository<User, Long> {

    List<User> findById(List<Long> userIds);

    Optional<User> findByUsername(String username);

    Boolean existsByUsername(String username);

}

   {

    @PreAuthorize("hasRole('test')")
    @RequestMapping(value = "/api/users", method = RequestMethod.GET)
    public @ResponseBody
    List<User> findAll(Sort var1);


}

Добавление весеннего класса конфигурации безопасности для отображения настроек безопасности

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

    @Autowired
    private JwtAuthenticationEntryPoint unauthorizedHandler;

    @Autowired
    CustomUserDetailsService customUserDetailsService;


    @Bean
    public JwtAuthenticationFilter jwtAuthenticationFilter() {
        return new JwtAuthenticationFilter();
    }

    private String[] permitted = new String[] {
            "/static/css/**","/static/media/**","/static/js/**", "/static/manifest.json"
    };

    @Bean(BeanIds.AUTHENTICATION_MANAGER)
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
    // this will create the auth manager that we will use to auth the user
    @Override
    public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
        authenticationManagerBuilder
                .userDetailsService(customUserDetailsService)
                .passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .csrf()
                .disable()
                .exceptionHandling()
                .authenticationEntryPoint(unauthorizedHandler)
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
               // .requiresChannel()
               // .anyRequest()
               // .requiresSecure()
               // .and()
                .authorizeRequests()
                .antMatchers(permitted)
                .permitAll()
                .antMatchers("/api/auth/**", "/api/", "/")
                .permitAll()
                .anyRequest()
                .permitAll();
                //.authenticated();

        // Add our custom JWT security filter
        http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }

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

}

1 Ответ

0 голосов
/ 06 февраля 2019

Можете ли вы показать вашу реализацию класса безопасности?Вы пометили его аннотацией @EnableGlobalMethodSecurity(prePostEnabled = true)?

...