小编Mis*_*sch的帖子

OAuth2:JWT授权授予和客户端凭据授权与JWT客户端身份验证之间的区别是什么?

OAuth2 JWT配置文件引入了将JWT用作授权授权和客户端身份验证的可能性.

JWT客户端身份验证功能独立于某种授权类型,可以与任何授权类型一起使用,也可以与客户端凭据授予一起使用.

但是,使用JWT授权类型似乎与使用JWT客户端身份验证的客户端凭据授权完全相同,只是语法略有不同.

在这两种情况下,客户端都会联系令牌端点以获取访问令牌:

POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=[JWT]
Run Code Online (Sandbox Code Playgroud)

VS

POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=[JWT]
Run Code Online (Sandbox Code Playgroud)

oauth oauth-2.0 jwt

29
推荐指数
2
解决办法
2万
查看次数

如何确保来自QTcpSocket的readyRead()信号不能错过?

QTcpSocket用于接收数据时,使用的readyRead()信号表示新数据可用.但是,当您在相应的插槽实现中读取数据时,不会readyRead()发出其他内容.这可能是有意义的,因为您已经在函数中,您正在读取所有可用的数据.

问题描述

但是假设此插槽的以下实现:

void readSocketData()
{
    datacounter += socket->readAll().length();
    qDebug() << datacounter;
}
Run Code Online (Sandbox Code Playgroud)

如果一些数据在通话后readAll()但在离开插槽之前到达怎么办?如果这是另一个应用程序发送的最后一个数据包(或者至少是最后一个数据包),该怎么办?不会发出额外的信号,因此您必须确保自己读取所有数据.

一种最小化问题的方法(但不能完全避免)

当然我们可以像这样修改插槽:

void readSocketData()
{
    while(socket->bytesAvailable())
        datacounter += socket->readAll().length();
    qDebug() << datacounter;
}
Run Code Online (Sandbox Code Playgroud)

但是,我们还没有解决问题.数据仍然可能在socket->bytesAvailable()-check 之后到达(甚至在函数的绝对末尾放置/另一个检查也无法解决此问题).

确保能够重现问题

由于这个问题当然很少发生,我坚持第一个插槽的实现,我甚至会添加一个人工超时,以确保出现问题:

void readSocketData()
{
    datacounter += socket->readAll().length();
    qDebug() << datacounter;

    // wait, to make sure that some data arrived
    QEventLoop loop;
    QTimer::singleShot(1000, &loop, SLOT(quit()));
    loop.exec();
}
Run Code Online (Sandbox Code Playgroud)

然后我让另一个应用程序发送100,000字节的数据.这是发生的事情:

新的联系!
32768(或16K或48K)

读取消息的第一部分,但不再读取结尾,因为readyRead()不会再次调用.

我的问题是:什么是最好的方法来确定,这个问题永远不会发生?

可能解决方案

我提出的一个解决方案是再次在末尾再次调用相同的插槽,并在插槽的开头检查是否还有更多数据要读取:

void readSocketData(bool selfCall) // default …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtcpsocket

28
推荐指数
2
解决办法
2万
查看次数

性能:typedef vs原始类型的包装类?

我想在C++中定义一个新类型,它只是一些原始类型(在我的例子中int,可以是任何类型).我NodeId在这个例子中调用了这个类型.

我可以用typedef int NodeId.我想要一个NodeIds 的默认值,所以我会用#define NULL_NODE_ID -1.

现在,我认为定义一个类而不是typedef允许一个函数isValid()和构造一个null的默认构造函数会更好NodeId:

class NodeId
{
    int value;
public:
    inline NodeId() : value(-1) {}
    inline NodeId(int value) : value(value) {}
    inline operator int() {return value;}
    inline bool isValid() {return value != -1;}
    //...
};
Run Code Online (Sandbox Code Playgroud)

是否存在导致使用第二种方法的性能缺点?

c++ inline micro-optimization

7
推荐指数
1
解决办法
3418
查看次数

当没有实例化QCoreApplication时,为什么QString没有正确处理特殊字符?

我开始在Qt中编写一个非常基本的文本操作应用程序,没有GUI.我的文字包含特殊字符,但无论如何,无论我做什么,我都无法打印出那些特殊字符.然后我注意到,在添加一个QCoreApplication实例(我之前删除过,因为我认为我不需要它)之后,一切都正常工作.

这是代码:

#include <QCoreApplication>
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString s(QString::fromUtf8("aä\xc3\xa4")); // aää

    qDebug() << s;
    qDebug() << s.toAscii();
    qDebug() << s.toLatin1();
    qDebug() << s.toUtf8();
    qDebug() << s.toLocal8Bit();
    qDebug("%s", qPrintable(s));

    qDebug("%i", s.length());
    qDebug("%i", strlen(qPrintable(s)));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出QCoreApplication(一切正常):

"aää" 
"aää" 
"aää" 
"aää" 
"aää" 
aää
3
5
Run Code Online (Sandbox Code Playgroud)

注释掉行后的输出,在哪里QCoreApplication定义(不再显示特殊字符):

"a" 
"a" 
"a" 
"a" 
"a" 
a
3
1
Run Code Online (Sandbox Code Playgroud)

请注意,在调用之后qPrintabable(s),特殊字符已被删除.我测试了这个以确定,这QDebug不是问题.

我还检查了文件是否真的用UTF-8编码.

为什么QString没有正确处理特殊字符,当没有QCoreApplication实例化时?

qt special-characters

7
推荐指数
1
解决办法
2961
查看次数

如何使用Netbeans 7.1配置glassfish 3.1安全文件领域?

我试图在本教程后面的glassfish 3.1中配置一个简单的文件域:

我做了一切,因为它说但不起作用,当我前往管理页面时,我没有看到弹出消息要求凭据.这就是我做的:

1-创建文件域: 在此输入图像描述

2-然后我使用manage users按钮创建了一个用户 在此输入图像描述

3-I使用图形界面而不是编辑器创建了glassfish-web.xml文件 在此输入图像描述

4 - 然后以同样的方式配置web.xml 在此输入图像描述 对不起,如果最后一张图片有点难以看清,你可以放大.

当我使用URL前往/admin.xhtml时,没有什么能阻止我查看页面内容,这意味着没有正确配置.我不知道我错过了什么.有人可以试着找出我不能让这个简单的安全任务工作的原因吗?

更新

这是我的web.xml源码

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <display-name>Constraint1</display-name>
        <web-resource-collection>
            <web-resource-name>allowed</web-resource-name>
            <description/>
            <url-pattern>/admin.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>administrator</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>file</realm-name>
    </login-config>
    <security-role>
        <description/>
        <role-name>administrator</role-name>
    </security-role>
</web-app>
Run Code Online (Sandbox Code Playgroud)

还有glassfish-web.xml源码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server …
Run Code Online (Sandbox Code Playgroud)

java security netbeans glassfish java-ee

6
推荐指数
1
解决办法
1万
查看次数

从多个列表中查找元素中的(100)最高总和

我有以下问题(在我的版本中有一些约束可能使问题更容易解决,但一般的解决方案也会很好):

我有4个列表,有10个条目.第一个列表包含0到6之间的整数条目,其他三个包含0到3之间的条目.我现在必须找到这四个列表的100个最佳元素组合.一个组合由4个值的总和组成,每个列表中有一个值.请注意,我不仅需要知道结果元素的值,还需要知道它们的组成方式,因为有更多与值相关的信息.

例1:

list A: 6, 3, 2, 2, 1, 0, 0, 0, 0
list B: 3, 2, 0, 0, 0, 0, 0, 0, 0
list C: 2, 2, 0, 0, 0, 0, 0, 0, 0
list D: 3, 1, 1, 1, 1, 1, 0, 0, 0
Run Code Online (Sandbox Code Playgroud)

在这种情况下,五种最佳组合是:

  • 14(A [0] + B [0] + C [0] + D [0])
  • 14(A [0] + B [0] + C [1] + D [0])
  • 13(A [0] + B [1] + C [0] + D …

algorithm combinations

5
推荐指数
1
解决办法
368
查看次数

是否可以按需确定用户的组成员身份,而不是在ServerAuthModule(JASPIC)中登录时

我正在尝试编写自己的ServerAuthModule,使用自定义登录系统.

如果我理解了一切正确,那么容器会为每个传入的请求调用validateRequest方法,并且我的SAM将检查凭据,并告诉容器用户的用户名和组(如果凭据是正确的)通过的CallbackHandler.

public class MySAM implements ServerAuthModule {

    @Override
    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {

        // check user credentials
        ...

        // set username and groups
        CallerPrincipalCallback cpCallback = new CallerPrincipalCallback(clientSubject, username);
        GroupPrincipalCallback gpCallback = new GroupPrincipalCallback(clientSubject, groups);
        callbackHandler.handle(new Callback[]{cpCallback, gpCallback}

        return AuthStatus.SUCCESS;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,当用户登录时,我不知道用户属于哪些组.我只能检查用户是否在给定的组中.是否有可能为容器提供一种方法,使用该方法可以检查用户是否在给定组中,而不是在validateRequest方法中为其提供包含组的数组?

boolean isInGroup(String username, String group) {
    // ask backend system
}
Run Code Online (Sandbox Code Playgroud)

java java-ee jaspic

5
推荐指数
1
解决办法
197
查看次数

如果使用CoreMotion/Accelerometer删除iPhone,则以编程方式检测

所以我正在编写一段代码,我必须在上面的iOS 4.3中使用Accelerometer和陀螺仪检测不同的移动手势.

Q1:是否有任何已实现任何移动/手势检测的开源代码?

如果不

Q2:现在我想检测一下iPhone是否掉线了.

到目前为止我所取得的成就: CoreMotion API提供了userAcceleration,其中(afaik)是用户给予设备的加速度或设备在某个方向(x,y或z)的加速度,而不考虑重力因此我是什么可以做的是:存储,比方说,前面的5-6个加速度参数值,可以检查其中任何一个点击大的负值,这基本上代表突然减速.

但是这个解决方案并不是非常优化,我认为我需要先以某种方式检测设备的自由落体/向下运动.知道如何解决这个问题吗?

更新: 感谢Misch分享您的方法.我一点也不考虑总加速度.我完全按照你的说法做了:

"但是你必须自己测试一下,"你的情况下"总加速度大致相当于地球加速度"和"一段时间".

加速度值实际上是G',因此我测试了"总加速度"值,范围为0.9 - 1.1.我检查了一段时间,最初我在updateInterval设置为1/20.0时检查了四个连续的值.现在我已经放松了一点连续的条件.

这是一个示例输出:

加速度= 0.090868
加速度= 0.074473
加速度= 0.159797
加速度= 1.157513
加速度= 1.224588
加速度= 1.036272
加速度= 0.914698
加速度= 0.904093
加速度= 0.941516
加速度= 0.046362
加速度= 0.045109
加速度= 0.060045

我想,我仍然要继续测试和调整价值观.如果你有任何优化,请分享,我知道为了帮助你需要看到许多自由落体加速度值的样本.现在我想:

  1. 将加速度值四舍五入到小数点后3位,然后使用我正在使用的加速度范围.
  2. 可以检查在满足自由落体条件后,总加速度值是否突然下降.
  3. 你认为我引用的加速度值有点吵?

physics accelerometer ios

4
推荐指数
1
解决办法
6935
查看次数