当前位置: 首页 > 知识库问答 >
问题:

Spring Security HeaderPreAuthentication主体未从

柯升
2023-03-14

我有一个现有的Spring Boot应用程序,它通过第三方身份验证服务对web应用程序进行身份验证。与SiteMinder一样,第三方服务向HTTP请求注入一个报头,例如user_header。我的任务是配置现有的应用程序来提取这个HTTP头,并通过Spring Security@AuthenticatedPrincipal注释使生成的Auth对象可供MVC层的控制器使用。

注意,这个应用程序只是Java配置。不允许使用XML(我的领导授权)

通过阅读Spring Security reference和其他各种文章,我知道需要使用RequestHeaderAuthenticationFilter并将其注入到过滤器链中,以便从请求头中获取用户名。

过滤器:

public class HeaderAuthenticationFilter extends RequestHeaderAuthenticationFilter {
    private static final Logger logger = LoggerFactory.getLogger(HeaderAuthenticationFilter.class);
    private final String HEADER = "USER_HEADER";

    public HeaderAuthenticationFilter() {
        super();
        this.setPrincipalRequestHeader(HEADER);

        // This setting returns an HTTP 404 with no error message instead of an HTTP 500 with the "missing header" exception message
        this.setExceptionIfHeaderMissing(false);
    }

    @Override
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
        logger.debug("Authorizing URI: " + request.getRequestURI());

        try {
            return super.getPreAuthenticatedPrincipal(request);
        } catch(PreAuthenticatedCredentialsNotFoundException e) {
            logger.error("Could not find request header " + HEADER + " in request", e);
            return null;
        }
    }
}

谢谢,如果需要更多的细节,请让我知道!

共有1个答案

简景焕
2023-03-14

@AuthenticationPrincipal未能解析的原因是,我没有用@enableWebMVCSecurity注释我的WebSecurityConfigurerAdapter类

添加这个注释解决了这个问题

 类似资料:
  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入

  • 什么是 Subject? - RxJS Subject 是一种特殊类型的 Observable,它允许将值多播给多个观察者,所以 Subject 是多播的,而普通的 Observables 是单播的(每个已订阅的观察者都拥有 Observable 的独立执行)。 Subject 像是 Observable,但是可以多播给多个观察者。Subject 还像是 EventEmitters,维护着多个监听

  • 我的http请求发送到此: 我的超文本传输协议请求与正文: { 我想通过WireMock映射这个请求。 这里是WireMock的映射文件。 我这样开始wireMock: 但当请求启动时,WireMock不会映射此请求。什么都没发生。为什么?

  • 我按照此处找到的说明使用graalvm构建了一个Micronaut应用程序。我配置了一个自定义错误处理程序,当在控制器上遇到请求正文的验证错误时,它会返回HttpRequest。 在邮递员上测试时,错误显示正常 但是当在lambda上使用测试它时,错误主体不显示 如何在aws lambda函数上显示错误体?

  • 我有一个Lambda函数,它在直接执行时工作得非常好。由于目前只是为了测试,它只读取请求,并返回其中一个子项的值作为响应: 然而,当我使用AWSAPI网关从中创建Api时,出现了一种奇怪的行为。如果Lambda函数包含上述代码,则响应主体为空。但是,如果我更改响应以返回整个请求正文,而不是一个子请求(在本例中为),它将返回整个请求正文。无论如何,尽管lambda函数在隔离状态下工作良好,但在API

  • 我正在使用Spring实现一个RESTful web服务。其中一个endpoint接收JSON字符串作为请求体,我希望将其映射到POJO。然而,现在看来传入的JSON字符串并没有映射到POJO的属性。 这里是@RestController界面 数据模型 最后是我的发帖请求: 与内容类型指定为应用程序/json 但是,当我打印出对象值时,打印出的是默认值(“first”和“last”),而不是我传入