Spring Security 的 searchForSingleEntryInternal 方法在找不到记录时抛出异常



我正在开发一个使用Spring Security的searchForSingleEntryInternal方法的应用程序。如果没有找到记录,有没有一种方法可以在不引发异常的情况下做同样的事情?我希望能够创建一个处理丢失记录的条件。

我想改变什么

if (results.size() == 0) {
    throw new IncorrectResultSizeDataAccessException(1, 0);
}

从此方法

/**
* Internal method extracted to avoid code duplication in AD search.
*/
public static DirContextOperations searchForSingleEntryInternal(DirContext ctx, SearchControls searchControls,
    String base, String filter, Object[] params) throws NamingException {
        final DistinguishedName ctxBaseDn = new DistinguishedName(ctx.getNameInNamespace());
        final DistinguishedName searchBaseDn = new DistinguishedName(base);
        final NamingEnumeration<SearchResult> resultsEnum = ctx.search(searchBaseDn, filter, params, searchControls);
        if (logger.isDebugEnabled()) {
            logger.debug("Searching for entry under DN '" + ctxBaseDn + "', base = '" + searchBaseDn + "', filter = '" + filter + "'");
        }
        Set<DirContextOperations> results = new HashSet<DirContextOperations>();
        try {
            while (resultsEnum.hasMore()) {
                SearchResult searchResult = resultsEnum.next();
                // Work out the DN of the matched entry
                DistinguishedName dn = new DistinguishedName(new CompositeName(searchResult.getName()));
                if (base.length() > 0) {
                    dn.prepend(searchBaseDn);
                }
                if (logger.isDebugEnabled()) {
                    logger.debug("Found DN: " + dn);
                }
                results.add(new DirContextAdapter(searchResult.getAttributes(), dn, ctxBaseDn));
            }
        } catch (PartialResultException e) {
            LdapUtils.closeEnumeration(resultsEnum);
            logger.info("Ignoring PartialResultException");
        }
        if (results.size() == 0) {
            throw new IncorrectResultSizeDataAccessException(1, 0);
        }
        if (results.size() > 1) {
            throw new IncorrectResultSizeDataAccessException(1, results.size());
        }
        return results.iterator().next();
    }
}

我对春天有些陌生,也许我错过了一些显而易见的东西。任何建议都将不胜感激

简单修复,只需从Spring Security复制searchForSingleEntryInternal方法并将其放置在我自己的项目中。从那时起,我可以调整异常处理,这样在没有找到记录的情况下,应用程序就不会陷入停顿。

相关内容

  • 没有找到相关文章

最新更新