我有一个抛出异常的方法,并调用一个捕获另一个异常的方法:
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (authenticated()) {
return new UsernamePasswordAuthenticationToken(
name, password, new ArrayList<>());
} else {
return null;
}
}
private boolean authenticated(){
try {
thirdPartyClass.login();
return true;
} catch (ThirdPartyException e) {
return false;
}
}
thirdPartyClass.login()
来自我不拥有的api,它是一种void方法,因此必须捕获所有不成功的身份验证。
ThirdPartyException
异常可以很好地解释出现了什么问题,因此我希望将其作为我的错误消息而不是:
No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
来自AuthenticationException
如何实现这一目标?
答案 0 :(得分:1)
您想从ThirdPartyException
收到消息吗?如果是这样,那么你可以这样做:
private boolean authenticated() throws ThirdPartyException {
thirdPartyClass.login();
return true;
}
如果没有,请善解释
public Authentication authenticate(Authentication authentication)
throws AuthenticationException
{
try {
authenticated();
return new UsernamePasswordAuthenticationToken(
name, password, new ArrayList<>());
} catch (ThirdPartyException ex) {
throw new AuthenticationException(ex.getMessage(), ex);//or any other child exception of AuthenticationException
}
}
答案 1 :(得分:1)
这些方面的内容如何:
public Authentication authenticate(Authentication authentication)
throws AuthenticationException
{
try {
thirdPartyClass.login();
return new UsernamePasswordAuthenticationToken(
name, password, new ArrayList<>());
} catch (ThirdPartyException tpe) {
throw new AuthenticationException(tpe.getMessage(), tpe);
}
}
答案 2 :(得分:0)
只需用以下代码替换该函数:
private boolean authenticated(){
try {
thirdPartyClass.login();
return true;
} catch (ThirdPartyException e) {
return false;
} catch (Exception ex) {
return false;
}
}
如果thirdPartyClass.login();
在控制台上处理异常和打印错误,那么您只能忽略该消息,并认为thirdParty函数告诉您用户名和密码令牌不是有效的。