给出以下Dockerfile
FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
MKDIR /data
COPY test/ /data/test data
RUN chown -R john:mygroup /data
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)
在我复制的测试目录中,我已将文件权限设置为770.
如果我su john在容器内部进行操作,则无法访问测试目录中的任何文件或子目录.看来这个问题与aufs文件系统中的所有权有关,其中复制的目录仍由root拥有,权限设置为770.
是否有解决此问题的方法来正确设置权限?可以在复制之前将原始目录的权限设置为容器用户的uid.但这似乎更像是一个黑客.
我在Linux上使用IntelliJ 13.1并尝试按照示例http://spring.io/guides/gs/spring-boot/构建基本的REST应用程序
当我从IntelliJ中执行目标bootRun时,集成的tomcat服务器启动并且一切正常.
10:09:35: Executing external task 'bootRun'...
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
Run Code Online (Sandbox Code Playgroud)
但是停止执行不会影响gradle任务:
10:11:40: External task execution finished 'bootRun'.
Run Code Online (Sandbox Code Playgroud)
我仍然可以访问配置端口上的tomcat实例.只关闭IntelliJ会破坏该过程.
我搜索了这个主题但找不到任何合理的答案.我想知道它是不是
OAuth2的规范规定授权服务器在使用隐式授权时不得发出刷新令牌.在我们的用例中,我们使用OAuth2保护RESTful API,并使用单页Javascript应用程序作为此API的客户端.由于在访问令牌过期后重定向到授权服务器非常困难,我们正在寻找更好的方法来获取新的有效令牌.我可以考虑两种不同的方法,并想知道哪一种可能更好:
使用隐藏的iframe重新请求有效的访问令牌.为此,必须包含一个参数,例如"prompt = none",它告诉OAuth提供者既不挑战认证,也不显示授权页面.如果用户已通过身份验证并已授权应用程序,则服务器将在URL#parameters中发回访问令牌.如果未满足上述条件之一,它将重定向,并出现错误,如#error = authentication%20lost.通过这种行为,我们可以使用具有隐式流的短期访问令牌.
我们可以使用一个额外的范围(例如离线)来告诉服务器分发刷新令牌.即使原始规范说隐式流不会发出刷新令牌(如果客户端仅将OAuth用于第一次授权,这是正确的),您可以自由地为您的特定应用程序定义自己的作用域.您应该考虑仅允许来自知名客户端的此范围.
这两种方法都与OpenID Connect非常相似.不幸的是,目前OpenID Connect的实现并不多.因此,第一步是扩展OAuth2服务器,直到OIC更受欢迎.
那么哪种方法应该首选?
编辑:令牌端点需要客户端身份验证,这仅适用于机密客户端,如服务器端应用程序.使用第二种方法,只有在我们的情况下,RESTful API才能使资源提供者刷新令牌并将其发送回客户端.我认为这会带来安全风险.所以我们可能只有一种有效的方法.
restful-authentication single-sign-on oauth-2.0 single-page-application
有没有办法用Rtti探索界面的属性?
以下代码不起作用:
procedure ExploreProps;
var
Ctx: TRttiContext;
RttiType: TRttiType;
RttiProp: TRttiProp;
begin
RttiType := Ctx.GetType(TypeInfo(IMyInterface));
for RttiProp in RttiType.GetProperties do
Writeln(RttiProp.ToString);
end;
Run Code Online (Sandbox Code Playgroud)
有没有人解决方法如何正确地做到这一点?
在以前版本的OAuth2中,可以通过将自定义标记granter添加到<authorization-server>元素中的xml配置来添加它.
我想知道如何使用AuthorizationServerConfigurerAdapter使用Java Config扩展授权服务器,而不会丢失包含隐式,客户端凭据,刷新令牌和授权代码授权类型的默认配置.
首次尝试使用@Component创建TokenGranter:
@Component("customTokenGranter")
public class CustomTokenGranter {
//implementation
}
Run Code Online (Sandbox Code Playgroud)
这导致依赖性解决异常,因为构造Granter所需的tokenServices无法自动装配.
第二次尝试使用configure方法
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception
{
endpoints
.tokenGranter(new CustomTokenGranter(endpoints.getTokenServices(),
endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
}
Run Code Online (Sandbox Code Playgroud)
使用此选项,将不会注册默认授权类型.
我也尝试了低阶的第二种配置,但没有成功.我还可以做些什么来添加自定义授权类型?
正如在Rtti数据处理和Delphi 2010中的一致性中已经讨论的那样,通过使用一对TRttiField和实例指针访问成员,可以达到原始数据和rtti值之间的一致性.对于只有基本成员类型(例如整数或字符串)的简单类,这将非常容易.但是,如果我们有结构化的字段类型呢?
这是一个例子:
TIntArray = array [0..1] of Integer;
TPointArray = array [0..1] of Point;
TExampleClass = class
private
FPoint : TPoint;
FAnotherClass : TAnotherClass;
FIntArray : TIntArray;
FPointArray : TPointArray;
public
property Point : TPoint read FPoint write FPoint;
//.... and so on
end;
Run Code Online (Sandbox Code Playgroud)
为了方便成员访问,我想构建一个成员节点树,它提供了一个获取和设置值,获取属性,序列化/反序列化值等的接口.
TMemberNode = class
private
FMember : TRttiMember;
FParent : TMemberNode;
FInstance : Pointer;
public
property Value : TValue read GetValue write SetValue; //uses FInstance
end;
Run Code Online (Sandbox Code Playgroud)
所以最重要的是获取/设置值,这是通过使用TRttiField的GetValue和SetValue函数完成的 - 如前所述.
那么FPoint成员的实例是什么?假设Parent是TExample类的Node,其中实例是已知的,成员是一个字段,那么Instance将是:
FInstance := Pointer …Run Code Online (Sandbox Code Playgroud) 对于一个框架,我编写了一个包装器,它接受任何对象,接口或记录类型来探索其属性或字段.类声明如下:
TWrapper<T> = class
private
FType : TRttiType;
FInstance : Pointer;
{...}
public
constructor Create (var Data : T);
end;
Run Code Online (Sandbox Code Playgroud)
在构造函数中,我尝试获取进一步处理步骤的类型信息.
constructor TWrapper<T>.Create (var Data : T);
begin
FType := RttiCtx.GetType (TypeInfo (T));
if FType.TypeKind = tkClass then
FInstance := TObject (Data)
else if FType.TypeKind = tkRecord then
FInstance := @Data
else if FType.TypeKind = tkInterface then
begin
FType := RttiCtx.GetType (TObject (Data).ClassInfo); //<---access violation
FInstance := TObject (Data);
end
else
raise Exception.Create ('Unsupported type');
end;
Run Code Online (Sandbox Code Playgroud)
我想知道这个访问冲突是否是delphi编译器中的错误(我正在使用XE).在进一步调查之后,我写了一个简单的测试函数,它表明,要求类名也会产生这个异常:
procedure TestForm.FormShow (Sender …Run Code Online (Sandbox Code Playgroud) 我想对以下问题提出一些建议:假设你想为VCL控件编写适配器.所有适配器应具有相同的基类,但在包装特殊控件方面有所不同(例如,从TEdit获取值与从TSpinEdit获取值不同).所以第一个想法就是创建一个类层次结构
TAdapter = class
end;
TEditAdapter = class (TAdapter)
end;
TSpinEditAdapter = class (TAdapter)
end;
Run Code Online (Sandbox Code Playgroud)
现在我想引入一个字段来保存对vcl控件的引用.在我的特殊适配器中,我想 - 当然 - 使用具体的子类.但是Base类还应该包含一个引用(例如,如果我想使用适配器使控件可见).
可能性1(物业存取中的向下):
TAdapter = class
protected
FCtrl : TControl;
end;
TEditAdapter = class (TAdapter)
public
property Control : TEdit read GetControl write Setcontrol;
end;
{...}
function TEditAdapter.GetControl : TEdit;
begin
Result := FCtrl as TEdit;
end;
Run Code Online (Sandbox Code Playgroud)
因此,如果我实现一个特定的方法,我使用属性Control,如果我在基类中执行某些操作,则使用protected字段.
可能性2(使用通用基类):
TAdapter = class
end;
TAdapter <T : TControl> = class (TAdapter)
protected
FCtrl : T;
end;
TEditAdapter = class (TAdapter <TEdit>)
end;
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪种解决方案?还是有第三种解决方案,哪种更好? …
我尝试用 Delphi 2010 编写一种对象/记录序列化器,想知道是否有办法检测记录是否是变体记录。例如 Types.pas 中定义的 TRect 记录:
TRect = record
case Integer of
0: (Left, Top, Right, Bottom: Longint);
1: (TopLeft, BottomRight: TPoint);
end;
Run Code Online (Sandbox Code Playgroud)
由于我的序列化程序应该在我的数据结构上递归工作,因此它将下降到 TPoint 记录并在我的序列化文件中生成冗余信息。有没有办法通过获取记录中的详细信息来避免这种情况?
阅读帖子后如何通过新的RTTI设置事件处理程序?,我想知道是否有可能更动态地解决这个问题.例如,我想将任何组件的ALL事件处理程序设置为nil.
使用TValue.From <TNotifyEvent> (SomeMethod)不起作用有两个原因:1.类型未知(可能是TNotifyEvent,TMouseEvent等)2.我不能将'SomeMethod'设置为nil(无效转换)
在旧的RTTI风格中,我会做类似的事情:
var
NilMethod: TMethod;
begin
[...]
NilMethod.Data := nil;
NilMethod.Code := nil;
SetMethodProp (AComponent,PropertyName,NilMethod);
Run Code Online (Sandbox Code Playgroud) delphi ×6
rtti ×5
delphi-2010 ×3
generics ×2
interface ×2
java ×2
spring ×2
docker ×1
dockerfile ×1
downcast ×1
gradle ×1
inheritance ×1
oauth-2.0 ×1
records ×1
spring-boot ×1