Java 基于用户代理的REST API未经验证的请求异常

Java 基于用户代理的REST API未经验证的请求异常,java,authentication,browser,rest,login,Java,Authentication,Browser,Rest,Login,我正在开发一个REST API,它支持两种身份验证协议: 登录表单身份验证-用于基于浏览器的客户端 简单基本身份验证-适用于非浏览器客户端 我开发了一个流程,其中未经验证的请求重定向到“登录表单”,问题是这对于非borwser客户端来说是不希望的行为 我想通过根据“用户代理”决定要做什么来解决这个问题:浏览器将被重定向到“登录表单”,非浏览器客户端将获得标准的401:基本身份验证 A.您觉得这个解决方案怎么样? B.Java中是否有标准方法来检查请求是否来自浏览器,或者我是否需要自己开发这种机制

我正在开发一个REST API,它支持两种身份验证协议:

  • 登录表单身份验证-用于基于浏览器的客户端
  • 简单基本身份验证-适用于非浏览器客户端
  • 我开发了一个流程,其中未经验证的请求重定向到“登录表单”,问题是这对于非borwser客户端来说是不希望的行为

    我想通过根据“用户代理”决定要做什么来解决这个问题:浏览器将被重定向到“登录表单”,非浏览器客户端将获得标准的401:基本身份验证

    A.您觉得这个解决方案怎么样?
    B.Java中是否有标准方法来检查请求是否来自浏览器,或者我是否需要自己开发这种机制?


    提前谢谢

    由于您可以完全控制客户端,因此您可以使用许多其他方法来完成此操作,而无需检查用户代理

  • 为客户端登录使用不同的URL。我们的客户端无法恢复HTML,因此我们使用不同的端点

  • 在URL中传递一个特殊参数,如client_version

  • 如果您坚持要检查用户代理,请使用一个特殊的字符串,以便所有其他内容都在浏览器中显示


  • 只是好奇,为什么有两种不同的身份验证机制?基本身份验证在浏览器中运行良好?不完全是:1。安全方面:浏览器“记住”登录表单中的BA+,我可以将客户端重定向到https。2.用户过期:与BA相比,登录表单更轻松。Shay,成功验证后是否为浏览器客户端创建会话?如果是这样的话,我认为必须在同一服务器端代码中处理有状态(浏览器)和无状态(非浏览器)交互会让人相当困惑。我们为这两种情况创建了应用程序会话,但感谢您的评论。