关于Web服务中的身份验证失败的用户通知的哪种方式更好?

时间:2011-10-18 00:45:40

标签: java web-services

这是我开发Web服务的第一次尝试。通过在用户请求的上下文中发送登录名和密码来实现身份验证(使用此示例:http://www.mkyong.com/webservices/jax-ws/application-authentication-with-jax-ws/),然后从每个WS方法调用autentication方法。但在这种情况下,用户通知身份验证失败的方式更好?抛出异常(SOAP错误)?或者还有其他更好的方法吗?

P.S。抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

阿尔乔姆,

SOAP错误大致类似于程序异常,因此我将使用

返回SOAP错误
  • 明确的故障代码(即错误编号)和
  • 一个“香草”故障字符串,适合向用户显示;和
  • 包含“技术细节”的故障详细信息,例如基础异常和堆栈跟踪。

这为您提供了两全其美,简单的灵活性。简单地说,在Service实现中,您捕获AuthenticationFailureException并使用

构建“SOAP错误响应”
  • FaultCode = 5,
  • FaultString =“身份验证失败”和
  • FaultDetail =“AuthenticationFailureException:blah blah \ n< stacktrace>”

因此,在编程时,您已经拥有了所需的一切,可以确切地看到出错的地方,并且在生产中,服务使用者(即表示层)负责处理SOAP错误,以便向用户显示适当的错误信息。确切地说,不应该向用户显示的内容,特别是在故障情形中,应确定为服务。这显然是表示层的责任。

还有一个改进......确保为“身份验证服务当前不可用”的方案使用单独的异常类型(和soap-fault-code),以便用户不会无果而终地重试,从而担心他们忘记了密码,或者被黑客攻击过,或者其他什么。

这是关于Using SOAP Faults的一篇很好的成功MSDN文章,它适用于Java和.NET Web服务。

干杯。基思。