Вот мой код:весна не @PreAuthorize работы с @EnableGlobalMethodSecurity (prePostEnabled = истина)
@Configuration
@ComponentScan(basePackages = "com.webapp")
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests().antMatchers("/resources/**").permitAll().
antMatchers("/admin/**").hasRole("ADMIN").
anyRequest().authenticated().
and().
formLogin().loginPage("/login").permitAll().
and().
logout().permitAll();
}
@Autowired
public void configureGlobal(UserDetailsService userDetailsService, AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService);
}
}
когда запрос/администратор/* приходит, он будет проверять, имеет ли пользователь роли администратора по телефону " antMatchers ("/ администратор/**"). hasRole ("ADMIN") «. , но в моем контроллере он не проверяет, имеет ли пользователь другие разрешения с @PreAuthorize.
Есть ли особая причина, почему ваш контроллер как @PreAuthorize («denyall»)? Если preauth терпит неудачу в классе, он даже не ударит по методу, чтобы попытаться использовать preauth. –
@JeffWang я удалил denyall, но как только пользователь с административной ролью регистрируется без разрешения «view_user», все равно может получить доступ к URL-адресу. я уверен, что предварительная авторизация не работает. есть ли у вас какие-либо предложения, спасибо –
Из того, что я понимаю, сначала фильтруется цепочка фильтров, поэтому первое оцениваемое правило имеет роль администратора. Второй - это уровень preauth класса, который отрицает все. Третий, если он проходит через оба, является уровнем метода preauth, который имеет роль user_view. Тот факт, что denyall работает, означает, что preauth работает. вы можете захотеть проверить, какие роли имеет пользователь, зарегистрированный в списке, в методе listUsers. (SecurityContextHolder.getContext(). GetAuthentication(). GetAuthorities()) –