gpt4 book ai didi

java - 在特定路径中使用用户名/密码身份验证

转载 作者:行者123 更新时间:2023-12-02 06:11:34 25 4
gpt4 key购买 nike

我有一个配置了工作安全性的 Spring 项目,我想做的是设置一个特定的路径,该路径将接受 REST 调用,只需基本的用户/密码身份验证,可以进行硬编码。

我知道这有点奇怪,但我对此有一个非常具体的用例。

安全代码类似于:

    @Override
public void configure(HttpSecurity http) throws Exception {
http
...
.and()
.authorizeRequests()
.antMatchers("my-path/**").authenticated()
}

我不太明白 spring 是如何发挥所有魔力的,但我希望它看起来像这样:

    @Override
public void configure(HttpSecurity http) throws Exception {
http
...
.and()
.authorizeRequests()
.antMatchers("my-path/**").authenticatedWithUserPassword("user", "pswd")
}

必须发生的两件事:

  • 我希望此用户/密码仅适用于此路径!
  • 我希望此路径仅适用于该用户/密码,不适用于其他身份验证类型!

最佳答案

好吧,我做了一些修改(受到 this answer 的启发),但它解决了我的问题。

首先,我创建了这个AuthenticationProvider:

public class ClusterInternalAuthenticationProvider implements AuthenticationProvider {

public static final String USER = "...";
public static final String PASSWORD = "...";

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken)authentication;

Object principal = token.getPrincipal();
Object credentials = token.getCredentials();

if (principal.equals(USER) && credentials.equals(PASSWORD)) {
return new UsernamePasswordAuthenticationToken(
principal,
credentials,
Collections.singletonList(new SimpleGrantedAuthority("RELEVANT_AUTHORITY"))
);
}

throw new BadCredentialsException("Sorry mate, wrong credentials...");
}

@Override
public boolean supports(Class<?> authentication) {
return authentication.isAssignableFrom(UsernamePasswordAuthenticationToken.class);
}
}

这会尝试 user/pswd 组合,如果 true 返回具有访问特定路径所需的权限的凭据。

接下来,在 SecurityConfiguration 中启用 httpBasic 并添加我的 AuthenticationProvider:

    @Override
public void configure(HttpSecurity http) throws Exception {
http
...
.and()
.authorizeRequests()
.antMatchers("my-path/**").hasAuthority("RELEVANT_AUTHORITY")
.and()
.httpBasic()
.and()
.authenticationProvider(new ClusterInternalAuthenticationProvider());
}

这似乎足够了,但不是一个“正确”的修复,因为我需要确保不在其他地方使用此权限,并且对于如此小的需求来说这似乎有点过分 - 非常欢迎其他解决方案。

关于java - 在特定路径中使用用户名/密码身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55903238/

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