将异常传递给方法

时间:2017-05-10 11:17:00

标签: java spring exception

我有一个抛出异常的方法,并调用一个捕获另一个异常的方法:

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

如何实现这一目标?

3 个答案:

答案 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函数告诉您用户名和密码令牌不是有效的。