春季安全性未经授权而不是重定向到登录名

问题描述 投票:0回答:1

[我希望我的spring Web应用程序将在用户试图访问资源而没有登录或没有正确权限的情况下仅返回状态代码403 UNAUTHORIZED,而不重定向到/login

我目前使用oauth2客户端登录名设置了我的spring security,但是我认为它与基本登录名也具有相同的行为。

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/allowed").permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .oauth2Login(this::configureOauthLogin) // sets up custom user services
            .exceptionHandling()
            .accessDeniedHandler((request, response, accessDeniedException) -> {
                response.setStatus(HttpStatus.UNAUTHORIZED.value());
            });
}

我已经尝试通过提供accessDeniedHandler来处理它,但我看不到它会改变任何东西,因为从未真正触发过此处理程序。

TLDR

在未经授权的请求下,将弹簧抛出403而不是302。>>

编辑

这里是我的过滤器链的转储

filters = {ArrayList@6668}  size = 14
 0 = {WebAsyncManagerIntegrationFilter@6635} 
 1 = {SecurityContextPersistenceFilter@6634} 
 2 = {HeaderWriterFilter@6633} 
 3 = {LogoutFilter@6632} 
 4 = {OAuth2AuthorizationRequestRedirectFilter@6631} 
 5 = {OAuth2LoginAuthenticationFilter@6630} 
 6 = {DefaultLoginPageGeneratingFilter@6629} 
 7 = {DefaultLogoutPageGeneratingFilter@6628} 
 8 = {RequestCacheAwareFilter@6627} 
 9 = {SecurityContextHolderAwareRequestFilter@6626} 
 10 = {AnonymousAuthenticationFilter@6625} 
 11 = {SessionManagementFilter@6624} 
 12 = {ExceptionTranslationFilter@6623} 
 13 = {FilterSecurityInterceptor@6622} 

我希望我的spring Web应用程序将简单地返回状态代码403 UNAUTHORIZED,而不是在用户尝试访问未登录或没有... ...的资源时重定向到/ login]]

java spring spring-boot spring-security spring-security-oauth2
1个回答
0
投票

我想通了,原来这个控制流程是由安全配置中的authenticationEntryPoint处理的。以下代码提供了所需的行为:

         http   
            .exceptionHandling()
            .authenticationEntryPoint(new Http403ForbiddenEntryPoint())
© www.soinside.com 2019 - 2024. All rights reserved.