Всем привет, такая ситуация, хочу настроить в спринг секюрити что бы когда кто то полез на несуществующие страницы или закрытые страницы, перенаправляло на страницу - доступ закрыт. Но дело в том что когда я пытаюсь сделать запрос на какой то левый путь, то меня перенаправляет на страницу логина, как будто я при аутентификации ввел неправильные данные! Я добавил в настройки страницу в случае "доступ закрыт" так же добавлял хадлер, но в нем логи не работабт, то есть он не отрабатывает... Почему так?
Может я не правильно понимаю как он должен работать?! я это понимаю так, что при вводе левого или запрещенного пути, то есть где у юзера нет прав, меня должно перебросить на страницу ошибки, но почему-то перебрасывает на стр. логина...
little update:
accessDeniedHandler срабатывает только если я зологинился и пытаюсь зайти на существующую запрещенную страницу. Почему он не срабатывает если я разлогиненый и пытаюсь зайти на существующую запрещенную страницу и перекидывает на страницу логина?
Настройки Спринг Секюрити
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public AuthenticationSuccessHandler myAuthenticationSuccessHandler() {
return new MyAuthenticationSuccessHandler();
}
@Bean
public UserDetailsServiceImpl userDetailsService() {
return new UserDetailsServiceImpl();
}
@Bean
public AccessDeniedHandler accessDeniedHandler() {
return new MyAccessDeniedHandler();
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public DaoAuthenticationProvider daoAuthenticationProvider () {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userDetailsService());
authenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());
return authenticationProvider;
}
@Override
protected void configure(AuthenticationManagerBuilder amb) throws Exception {
amb.authenticationProvider(daoAuthenticationProvider());
}
@Override
public void configure(WebSecurity web) throws Exception {
// web.debug(true);
web.ignoring()
.antMatchers("/resources/**")
.antMatchers("/resources/bootstrapComponent/**")
.antMatchers("/resources/css/**")
.antMatchers("/resources/patternViews/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers()
.defaultsDisabled()
.contentTypeOptions().and()
.frameOptions().and()
.xssProtection()
.block(true).and()
.contentSecurityPolicy ( "script-src 'self'").and()
.cacheControl();
http.authorizeRequests()
.antMatchers("/main", "/signin", "/signUp"/*, "/error"*/).permitAll()
.antMatchers("/home").hasAnyRole("CEO", "Manager", "User")
.antMatchers("/control").hasAnyRole("CEO", "Manager")
.antMatchers("/ceo").hasAnyRole("CEO")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/signin")
.usernameParameter("username")
.passwordParameter("password")
.loginProcessingUrl("/signin")
// .defaultSuccessUrl("/processSignIn")
// .successForwardUrl("/processSignIn")
.successHandler(myAuthenticationSuccessHandler())
.and()
.logout()
.logoutUrl("/signout")
.logoutSuccessUrl("/signin")
.and()
// .exceptionHandling().accessDeniedPage("/error");
.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
}
}
Хандлер
@Component
public class MyAccessDeniedHandler implements AccessDeniedHandler {
private final Logger logger = LogManager.getLogger(MyAccessDeniedHandler.class);
@Override
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {
logger.debug("DEBUG from MyAccessDeniedHandler --> " + e.getMessage());
httpServletResponse.sendRedirect( httpServletRequest.getContextPath() + "/error");
}
}
Что мне нужно добавить или как это решить!?
Cпасибо!