【问题标题】:io.undertow.servlet.util.IteratorEnumeration cannot be cast to java.lang.Stringio.undertow.servlet.util.IteratorEnumeration 不能转换为 java.lang.String
【发布时间】:2019-10-19 22:33:32
【问题描述】:

我正在尝试根据在标头中发送的 API 密钥对用户进行身份验证,而无需通过登录获得任何用户详细信息。然后我得到一个转换异常,因为我尝试将主体转换为字符串。

我试图在 SecurityConfig 类中获取标题,但没有奏效。我也尝试在自定义过滤器中获取它,这就是当前解决方案的位置。

@Bean
    public APIKeyAuthFilter authFilter() {
        APIKeyAuthFilter filter = new APIKeyAuthFilter(principalRequestHeader);
        filter.setAuthenticationManager(authentication -> {
            String principal = (String) authentication.getPrincipal();
            if (!principalRequestValue.equals(principal)){
                throw new BadCredentialsException("The API key was not found or not the expected value.");
            }
            authentication.setAuthenticated(true);
            return authentication;
        });
        return filter;
    }

我希望能够获取标头并检查值以与现有键进行比较,但是,我得到了这个异常 "message": "io.undertow.servlet.util.IteratorEnumeration cannot be cast to java.lang.String", "trace": "java.lang.ClassCastException: io.undertow.servlet.util.IteratorEnumeration cannot be cast to java.lang.String\n\tat uk.co.nesistec.contractpicturechallenge.config.APISecurityConfig.lambda$authFilter$0(APISecurityConfig.java:46)

我从另一个问题中获得了示例代码。 Securing Spring Boot API with API key and secret

【问题讨论】:

    标签: spring-boot spring-security java-8


    【解决方案1】:

    我发现我只需要另一个类来注册安全过滤器。

    import org.springframework.security.web.context
                .AbstractSecurityWebApplicationInitializer;
    public class SpringSecurityInitializer
                extends AbstractSecurityWebApplicationInitializer {
        //no code needed
    }
    

    这是此方案的完整示例,适用于需要此功能的任何人。 Spring

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2015-05-18
      • 2011-10-27
      • 2018-01-23
      • 2011-05-09
      • 2014-06-24
      • 1970-01-01
      • 2013-08-27
      • 2018-05-17
      相关资源
      最近更新 更多