首页 > 解决方案 > 如何使用 Micronaut Security 将未经授权的 WWW-Authenticate 字段添加到响应标头?

问题描述

使用 Micronaut Security,我希望应用程序使用 WWW-Authenticate 标头字段响应未经授权的请求以进行基本身份验证,如下所示:

WWW-Authenticate: Basic realm="User Visible Realm"

是否可以在配置文件(即 application.yaml)中执行此操作?如果不是,您如何建议使用最少的样板来执行此操作?

我当前的安全配置:

security:
  intercept-url-map:
    - pattern: /**/*
      access:
        - isAuthenticated()
  redirect:
    forbidden:
      enabled: false
    unauthorized:
      enabled: false

谢谢!

标签: securitybasic-authenticationmicronautmicronaut-security

解决方案


我不知道这可以通过配置实现。

实现此目的的一种方法是服务器过滤器。下面的代码很时髦。


@Filter("/**")
class AuthenticateHeaderFilter extends OncePerRequestHttpServerFilter {

    @Override
    protected Publisher<MutableHttpResponse<?>> doFilterOnce(HttpRequest<?> request, ServerFilterChain chain) {
        return Publishers.map(chain.proceed(request)) { response ->
            if (response.status() == HttpStatus.UNAUTHORIZED) {
                response.header(HttpHeaders.WWW_AUTHENTICATE, "Basic realm=\"my realm\"")
            }
            return response
        }
    }

    @Override
    int getOrder() {
        return Integer.MIN_VALUE
    }
}


推荐阅读