【问题标题】:How to authenticate a user via Spring Security and MarkLogic's Java Client API?如何通过 Spring Security 和 MarkLogic 的 Java Client API 对用户进行身份验证?
【发布时间】:2015-01-30 17:05:21
【问题描述】:

使用 Java 客户端 API (2.0.4) 的登录对话框来验证用户是否可以通过 MarkLogic 服务器(版本 7.0.4)进行身份验证以保护 Spring Web 应用程序的最佳实践是什么?

使用我当前的方法(请参阅gist 中的源代码)我正在实现来自 Spring Security 的 AbstractUserDetailsAuthenticationProvider(带有 HTTP 会话的“经典”方法),我确实创建了一个 MarkLogic DatabaseClient 实例,之后是一个简单的查询 (testQuery, L. 46 in MarkLogicConnections) 被执行以查看是否可以检索结果。根据这个结果来决定登录是否被授予。

我想知道是否存在更优雅的解决方案,但在 MarkLogic 文档中找不到任何内容。

【问题讨论】:

    标签: java spring spring-mvc spring-security marklogic


    【解决方案1】:

    您可以利用这个机会检索您存储在数据库中的任何用户特定数据。

    如果不希望这样做,也许根本不需要验证用户凭据?您可以在第一个必要的查询中懒惰地发生这种情况。而且你应该准备好在任何地方处理数据库错误。

    如果您确实需要非延迟验证并且不想要任何数据,那么对 suggest() 的调用可能会比您想要的更昂贵。如果是这样,您可能会考虑其他选择。致电getErrorFormat 应该相当便宜。打开一个事务然后回滚它也应该很便宜,但它需要rest-writerrest-admin 角色。如果没有其他工作,您可以编写一个实现 noop XQuery 的 extension,可能只是 ()

    【讨论】:

    • 感谢@mblakele 的回答,延迟验证不是一种选择(因为这完全是关于登录掩码,并且必须直接决定是否允许用户继续)。由于这些“业务”(只读)用户既没有rest-writer 也没有rest-admin 角色,我可能会坚持使用简单的建议或搜索查询来决定是否允许她继续。
    • 文档检索可能比搜索或建议便宜。你可以利用这个机会寻找像"/usr/" + userId + "/data.xml" 这样的东西。也许有一天你会想在那里保留用户偏好之类的东西,但同时请求一个不存在的文档应该相当便宜。
    • 这是一个很好的观点,我仍然认为这是一个“微”优化(因为如果登录需要 10 或 100 毫秒的内部网场景,这没什么大不了的)。我真的希望有一种方法可以通过 Java 或 REST API 对用户进行身份验证。似乎有一些有用的 xdmp 函数,不过我可能会通过 REST 扩展公开自己......
    猜你喜欢
    • 2019-12-26
    • 2012-03-06
    • 2013-02-23
    • 2018-09-12
    • 1970-01-01
    • 2016-11-13
    • 2020-04-16
    • 2013-06-12
    • 2011-08-12
    相关资源
    最近更新 更多