Spring Security 的默认的AuthenticationEntryPoint 是 LoginUrlAuthenticationEntryPoint。
LoginUrlAuthenticationEntryPoint 用于在用户未经身份验证时重定向到登录页面。它将登录页面的URL作为构造函数的参数,并在重定向时将用户请求的URL作为查询参数附加到登录页面的URL上。
当用户尝试访问受保护的资源时,如果用户未经身份验证,则 AuthenticationEntryPoint 会调用 commence() 方法进行处理。在 commence() 方法中,LoginUrlAuthenticationEntryPoint 会重定向用户到登录页面。
默认情况下,LoginUrlAuthenticationEntryPoint 的构造函数接受一个字符串参数,该参数表示登录页面的URL。例如:
AuthenticationEntryPoint entryPoint = new LoginUrlAuthenticationEntryPoint("/login");
在上述示例中,如果用户未经身份验证尝试访问受保护的资源,则会将用户重定向到 "/login" 页面。
需要注意的是,LoginUrlAuthenticationEntryPoint 仅适用于基于表单的身份验证方式,如果您使用其他份验证方式(例如基于令牌的身份验证),则需要使用其他的 AuthenticationEntryPoint 实现类。 Spring Security OAuth2 默认的权限校验失败 AuthenticationEntryPoint 是 OAuth2AccessDeniedHandler。
OAuth2AccessDeniedHandler 用于在用户尝试访问受保护的资源但权限不足时处理请求。它负责生成适当的响应,以向用户返回权限不足的信息。
当权限校验失败时,OAuth2AccessDeniedHandler 会返回一个 403 禁止访问的响应。
要自定义 OAuth2AccessDeniedHandler,您可以创建一个实现了 AccessDeniedHandler 接口的自定义类,并在 Spring Security 配置中进行配置,例如:
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
// ...
@Override
public void configure(HttpSecurity http) throws Exception {
http
// ...
.exceptionHandling()
.accessDeniedHandler(accessDeniedHandler());
}
@Bean
public AccessDeniedHandler accessDeniedHandler() {
return new MyOAuth2AccessDeniedHandler();
}
}
上述示例中的 MyOAuth2AccessDeniedHandler 是您自定义的 AccessDeniedHandler 实现类,您可以根据您的需求自定义逻辑。