我正在尝试创建一个基本的身份验证服务,对于某些业务逻辑,我需要访问所有基本的身份验证凭据,并使它们访问另一个服务(如果凭据错误,则会失败)。因此,我尝试在基本身份验证不存在或凭据为空时引发异常。
这是我的安全配置程序:
@Configuration
@EnableWebSecurity
public class SecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Autowired
STGAuthenticationProvider authProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests().anyRequest().authenticated()
.and().httpBasic();
}
}
这是我的customauthprovider:
@Component
public class STGAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
if(!StringUtils.isBlank(username) && !StringUtils.isBlank(password)) {
return new UsernamePasswordAuthenticationToken(username, password, new ArrayList<>());
} else {
throw new STGNoCredentialsException(Constants.Error.NO_CREDENTIALS);
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
实际上,我的应用程序给我“401unauthorized”如果我发送一个没有身份验证的请求(我真的想得到我的自定义异常,你可以在我的customauthprovider看到)。当我只发送一个凭证(用户名或密码),或者没有人发送时,我的服务会在 Postman 处用空的正文回答我。你们能帮帮我吗?
1条答案
按热度按时间bvn4nwqk1#
据我所知,您的问题与我几天前遇到的问题类似:每当在没有授权或auth令牌过期的情况下调用端点时,我需要返回401而不是403。
关于您的代码,我将添加.exceptionhandling().authenticationentrypoint(…)到您的WebSecurity配置适配器,如下所示
然后,代替/自定义异常/添加一些
new MyAuthException()
,其中myauthexception如下所示:)我不记得了,现在我无法检查这个类是否需要标记为
@Component
,我想不是)。