春季启动:accessDeniedHandler不起作用
问题内容:
我有以下Spring Security配置:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/private/**", "/app/**").authenticated();
http.csrf().disable();
http.logout().logoutSuccessUrl("/");
http.exceptionHandling().accessDeniedPage("/403"); //.accessDeniedHandler(accessDeniedHandler);
}
}
我期望以下逻辑:未经身份验证的用户将被重定向到/403
。Spring会显示默认的Tomcat
403页面,而不是该页面。我也尝试过自定义,accessDeniedHandler
尽管没有成功。
如何在访问失败时实施自定义逻辑?
问题答案:
AccessDeniedHandler仅适用于经过身份验证的用户。未经身份验证的用户的默认行为是重定向到登录页面(或适用于所使用的身份验证机制的任何内容)。
如果要更改,则需要配置AuthenticationEntryPoint
,当未经身份验证的用户尝试访问受保护的资源时会调用。您应该可以使用
http.exceptionHandling().authenticationEntryPoint(...)
而不是你所拥有的。有关更多详细信息,请查看API文档。