启用自定义AuthenticationEntryPoint时,PUT请求抛出InsufficientAuthenticationException:需要完全身份验证

时间:2014-07-15 23:39:42

标签: rest spring-security spring-boot

此问题与this one

有关

我定义了自己的AuthenticationEntryPoint。启用后,我在尝试执行put请求时收到异常:

  

org.springframework.security.authentication.InsufficientAuthenticationException:访问此资源需要完全身份验证

但事实并非如此。

有人知道为什么以及如何解决这个问题? 如果需要更多配置信息,请与我们联系。


这是我的配置:

@Configuration
@Order(1)                                                        
public static class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    ...
        http
            .authorizeRequests()
                .antMatchers("/rest/**").hasAnyRole(Sec.ADMIN,Sec.SUPER_USER)
    ...
        .and().exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint)

如果我注释掉最后一行(" authenticationEntryPoint ..."),我的PUT请求就可以正常工作。

我需要使用该EntryPoint以防止重定向到登录表单,因为这是一个REST服务。

我的RestAuthenticationEntryPoint类是:

@Component( "restAuthenticationEntryPoint" )
public final class RestAuthenticationEntryPoint implements AuthenticationEntryPoint {
    @SuppressWarnings("unused")
    private final Logger logger = Logger.getLogger(getClass());

    @Override
    public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException) throws IOException {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage());
    }
}

0 个答案:

没有答案