我正在构建一个需要访问客户的Office 365管理活动的应用程序.我已按照此Azure Active Directory概述中概述的步骤操作,并且能够使用OAuth代码获取初始访问令牌,以及使用此令牌设置O365订阅.
但是,当我使用refresh_token提供的初始令牌获取新的访问令牌时,我收到以下错误:
{"error_description":"AADSTS65001:用户或管理员未同意使用ID为'8f72f805-dfd2-428d-8b0e-771a98d26c16'的应用程序..发送此用户和资源的交互式授权请求.\ r \nTrace ID: df229c3f-8f28-420b-9ac3-321ab1b2ad09\r \n相关ID:0e0f2bcb-4b19-458a-8556-2a6d4e51379f\r \n时间戳:2016-10-03 17:33:20Z","错误":"invalid_grant"}
由于我能够获取并使用初始访问令牌,因此我非常确定用户正在授予我的应用程序一些权限.为了使用刷新令牌获取新的访问令牌,是否需要特定权限?
编辑:
具体来说,我正在使用com.microsoft.azure::adal4j java包,AuthenticationContext类,acquireTokenByAuthorizationCode和acquireTokenByRefreshToken方法:
public class AzureProvisioner {
private final AuthenticationContext authService = new AuthenticationContext(
"https://login.windows.net/common/oauth2/token", true, Executors.newSingleThreadExecutor());
private final ClientCredential clientCredential = new ClientCredential("azureAppId", "azureAppSecret");
public static final String resource = "https://manage.office.com";
// Internal implementation of REST interface; Microsoft didn't provide a Java Library
final Office365ManagementApi managementApi;
public void acquireToken(final String authCode, …Run Code Online (Sandbox Code Playgroud) 当我在查询上调用setMaxResults时,似乎想要将最大数量视为"2",无论它的实际值是多少.
function findMostRecentByOwnerUser(\Entities\User $user, $limit)
{
echo "2: $limit<br>";
$query = $this->getEntityManager()->createQuery('
SELECT t
FROM Entities\Thread t
JOIN t.messages m
JOIN t.group g
WHERE
g.ownerUser = :owner_user
ORDER BY m.timestamp DESC
');
$query->setParameter("owner_user", $user);
$query->setMaxResults(4);
echo $query->getSQL()."<br>";
$results = $query->getResult();
echo "3: ".count($results);
return $results;
}
Run Code Online (Sandbox Code Playgroud)
当我评论该setMaxResults行时,我得到6个结果.当我离开时,我得到了最近的2个结果.当我在phpMyAdmin中运行生成的SQL代码时,我得到了4个最新的结果.生成的SQL,供参考,是:
SELECT <lots of columns, all from t0_>
FROM Thread t0_
INNER JOIN Message m1_ ON t0_.id = m1_.thread_id
INNER JOIN Groups g2_ ON t0_.group_id = g2_.id
WHERE g2_.ownerUser_id = ?
ORDER …Run Code Online (Sandbox Code Playgroud) 有什么方法可以确定量角器browser.waitForAngular()卡住了什么?
我的 Protractor 测试基本上加载页面,单击一个元素,然后等待加载新页面。我收到“超时等待量角器在 11 秒后与页面同步”错误;但是,我不使用$timeout,并且可以看到我的浏览器的开发人员控制台中没有未完成的 http 请求。
我可以在浏览器中手动重现与测试相同的步骤,然后运行
angular.getTestability(document.body)
.whenStable(function() {console.log("holla")})
Run Code Online (Sandbox Code Playgroud)
并看到页面实际上在加载后 1 秒内稳定。
如果我编写一个量角器测试来加载第一页,然后使用browser.get('index.html#second-page'),则测试通过。
我知道我可以设置ignoreSerialization量角器,但老实说,我宁愿不这样做,因为我担心我的 Angular 项目中存在一些潜在的错误。我是否可以采取任何步骤来更深入地了解量角器中发生的事情?
我在服务中有以下方法:
public interface MyService {
@POST
@Path("/upload-file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
void uploadFile(@FormDataParam("file") InputStream inputStream,
@FormDataParam("file") FormDataContentDisposition contentDisposition);
}
Run Code Online (Sandbox Code Playgroud)
我使用 WebResourceFactory 创建此接口的实例:
final MyService buildProxy() {
final ClientBuilder clientBuidler = ClientBuilder.newBuilder();
// register components, trust manager, etc.
final WebTarget target = clientBuilder.build().target("http://myservice.example.com");
return WebResourceFactory.newResource(
MyService.class, target, false, ImmutableMultivaluedMap.empty(),
Collections.emptyList(), new Form());
}
Run Code Online (Sandbox Code Playgroud)
我想使用此代理调用我的方法,但我找不到创建FormDataContentDisposition. 我最好的选择真的是创建标头字符串,然后将其传递到 吗new FormDataContentDisposition(String header)?我可以在某个地方放松我的类型来访问更方便的构造函数吗?我可以在文件上传中使用不同的、更方便的界面吗?我主要在界面中包含内容处置,以便在将整个文件保存到磁盘之前可以拒绝太大的文件。
我想在我的Doctrine 2实体中包含一些额外的函数来包含我必须经常运行的代码.例如:
用户 - 有很多帖子
帖子 - 只有一个用户
我已经有了一个功能$user->getPosts(),但这会返回我的所有帖子.我想写一个$user->getActivePosts(),就像:
$user->getPosts()->where('active = true') //if this were possible
要么:
$em->getRepository('Posts')->findBy(array('user'=>$user,'active'=>true)) //if this were more convenient
据我所知,虽然实体本身没有办法回到实体经理,所以我唯一的选择就是
class User {
function getActivePosts() {
$all_posts = $this->getPosts();
$active_posts = new ArrayCollection();
foreach ($all_posts as $post) {
if ($post->getActive()) {
$active_posts->add($post);
}
}
return $active_posts;
}
Run Code Online (Sandbox Code Playgroud)
但是,这需要我将所有帖子加载到我的实体管理器中,当我真的只需要它们的一小部分时,它需要我在PHP中进行过滤,而在SQL层中这样做更合适.有没有办法完成我在实体内部要做的事情,或者我是否必须在其外部创建代码?
postgresql文档指定 GiST 索引可以有多个列,但没有提供可能是什么样子的示例。
我有一个表格来跟踪不同客户拥有的资产。
CREATE TABLE asset (
id serial PRIMARY KEY,
description text NOT NULL,
customer_id uuid NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我正在编写一个查询,允许客户根据描述中的词来搜索资产。
SELECT *
FROM asset
WHERE to_tsvector('english', asset.description) @@ plainto_tsvector('english', ?)
AND asset.customer_id = ?;
Run Code Online (Sandbox Code Playgroud)
如果这是一个非 tsvector 查询,我会构建一个简单的多列索引
CREATE INDEX idx_name ON asset(customer_id, description);
Run Code Online (Sandbox Code Playgroud)
我只能在 tsvector 上创建索引:
CREATE INDEX idx_name ON asset USING gist(to_tsvector('english', asset.description));
Run Code Online (Sandbox Code Playgroud)
但是,查询优化器不使用 gist 索引,因为它似乎customer_id要先进行过滤。有没有办法可以customer_id以某种方式将非 tsvector 字段包含在要点索引中,或者我不走运?
我正在运行 Postgresql 9.5.2 服务器,我偶尔会看到如下消息:
错误:检测到死锁
详细信息:进程 1234 等待事务 3042999324 上的 ShareLock;被进程 5678 阻止。
进程 5678 等待事务 3042999328 上的 ShareLock;被进程 1234 阻止。
提示:请参阅服务器日志以获取查询详细信息。
其中:在锁定关系“asset”中的元组 (5389,30) 时
如果它包含有关导致死锁的行或列的任何信息,它将帮助我调试首先导致错误的大而丑陋的公用表表达式。
我的 lambda 在 Java8 下运行了几年,我刚刚将其更新到 Java 11。它立即崩溃了,给了我这样的错误:
\nCaused by: java.lang.ExceptionInInitializerError\n at com.mycompany.rest.providers.JsonProvider.writeTo(JsonProvider.java:80)\n at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242)\n at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227)\n at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)\n at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116)\n at org.glassfish.jersey.client.ClientRequest.doWriteEntity(ClientRequest.java:461)\n at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:443)\n at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:367)\n at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:265)\n at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:297)\n ... 15 more\nCaused by: java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found.\n at org.apache.logging.log4j.LogManager.callerClass(LogManager.java:571)\n at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:596)\n at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:583)\n at com.mycompany.rest.util.NonClosingOutputStream.<clinit>(NonClosingOutputStream.java:11)\n ... 25 more\nRun Code Online (Sandbox Code Playgroud)\n所讨论的类并不是特别令人兴奋,并且具有在我的类中常见的简单静态初始化:
\npublic class NonClosingOutputStream extends ProxyOutputStream {\n private static final Logger log = LogManager.getLogger(); // Line 11\n\n public NonClosingOutputStream(final OutputStream proxy) …Run Code Online (Sandbox Code Playgroud) java ×3
doctrine-orm ×2
postgresql ×2
psql ×2
adal ×1
angularjs ×1
aws-lambda ×1
azure ×1
deadlock ×1
doctrine ×1
javascript ×1
jersey ×1
log4j2 ×1
protractor ×1
tsvector ×1