gpt4 book ai didi

java - Dropwizard Auth - 如果未给出 header ,如何返回默认用户?

转载 作者:行者123 更新时间:2023-12-02 03:44:15 24 4
gpt4 key购买 nike

如果未指定 BacicAuth header ,我希望我的授权机制返回默认用户。我尝试这样做:

@Override
public Optional<User> authenticate(final BasicCredentials basicCredentials) throws AuthenticationException {

String email = basicCredentials.getUsername();
String plaintextPassword = basicCredentials.getPassword();

final Optional<User> user = Optional.of(userDao.getUserByEmail(email));

if (user.isPresent()) {
return user;
}
else {
return Optional.of(defaultUser);
}
}

但是,不知何故,当我发出没有正确 header 的请求时,我仍然收到 401。

我怎样才能让它工作?

最佳答案

因此,如果没有 Basic Auth header ,则会将空的 BasicCredentials 传递到预身份验证过程,这会导致自动未经授权的错误响应。所以我们需要确保有一个标题。为此,您可以注册一个 Jersey 过滤器,该过滤器在 Dropwizard 身份验证过滤器之前执行。我们可以在其中添加带有默认用户名和密码的 header 。

import java.io.IOException;
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.HttpHeaders;
import org.glassfish.jersey.internal.util.Base64;

@Priority(Priorities.AUTHENTICATION - 100)
public class PreAuthenticationFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext request) throws IOException {
boolean hasValidHeader = false;
if (request.getHeaders().containsKey(HttpHeaders.AUTHORIZATION)) {
final String header = request.getHeaderString(HttpHeaders.AUTHORIZATION);
if (header.toLowerCase().startsWith("basic")) {
hasValidHeader = true;
}
}
if (!hasValidHeader) {
final String defaultUser = "defaultUser";
final String defaultPassword = "defaultPassword";
final String base64 = Base64.encodeAsString(defaultUser + ":" + defaultPassword);
request.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, "Basic " + base64);
}
}
}

然后只需向DW注册即可 env.jersey().register(PreAuthenticationFilter.class);

关于java - Dropwizard Auth - 如果未给出 header ,如何返回默认用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com